本文主要是介绍17-基于stm32单片机汽车胎压速度监测蓝牙上传数据程序代码原理图元件清单,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
功能介绍:采用stm32 单片机,蓝牙技术设计一个汽车监控系统,要求监控汽车驻车时的落锁、胎压、车窗等功能,监控汽车行车时的速度、时间等功能,通过蓝牙上报手机app,该设计通过stm32单片机监测胎压、车速,可以控制电机、车窗的开启和关闭,并且将相关数据通过HC-05蓝牙模块发送给手机APP,全部资料都经过实物验证,程序有中文注释,新手容易看懂,资料分享下载链接:设计资料合集
17-基于stm32单片机汽车胎压速度监测蓝牙上传数据(程序+原理图+元件清单全套资料)
/*****************DHT11********************/
extern void DHT11_receive( int *h, int *t);
/*****************引脚配置********************/
void GPIO_Configuration(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOC| RCC_APB2Periph_GPIOC,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);//LCD1602 管脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0| GPIO_Pin_1| GPIO_Pin_2| GPIO_Pin_3| GPIO_Pin_4| GPIO_Pin_5| GPIO_Pin_6| GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 |GPIO_Pin_14|GPIO_Pin_15;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOC, &GPIO_InitStructure); //LEDGPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOC, &GPIO_InitStructure); //DHT11 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;GPIO_Init(GPIOB, &GPIO_InitStructure); //按键GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6| GPIO_Pin_7| GPIO_Pin_8| GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;;GPIO_Init(GPIOB, &GPIO_InitStructure); //配置 PA0 ADC采集模式 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOB, &GPIO_InitStructure);//LEDGPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOB, &GPIO_InitStructure); }
/* ADC配置 */
void ADC_Set(void)
{ADC_InitTypeDef ADC_InitStructure;//ADC结构体变量//注意在一个语句快内变量的声明要放在可执行语句的前面,否则出错,因此要放在ADC1_GPIO_Config();前面ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC1和ADC2工作在独立模式ADC_InitStructure.ADC_ScanConvMode = DISABLE; //使能扫描ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//ADC转换工作在连续模式ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//由软件控制转换,不使用外部触发ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//转换数据右对齐ADC_InitStructure.ADC_NbrOfChannel = 1;//转换通道为1ADC_Init(ADC1, &ADC_InitStructure); //初始化ADC ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_28Cycles5);ADC_Cmd(ADC1, ENABLE);//使能ADC1ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}int wendu,shidu,guangqiang; //保存温度 湿度 光强
int xiaoshi=70,fenzhong=20;// 湿度设定 光强设定
int yu=0,zhuangtai=3; //保存是否有雨 0晴天 1有雨 0和2表示关 1和3表示开
u8 time_data[8];//保存时间的数组 int nian=12,yue=34,ri=56;//保存年 月 日
int shi=12,fen=34,miao=56;//保存
//这里对按键进行扫描
void anjiansaomiao(void)
{static u8_t k1,k2,k3,k4,k5;static u8_t K1Flag=0,K2Flag=0,K3Flag=0,K4Flag=0; //按键扫描,获取按键状态k1 = GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_6);k2 = GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_7);k3 = GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_8);k4 = GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_9);//小时设定值+//表明按下if(k1 == 0){K1Flag = 1;}else{//释放后进行响应if(K1Flag ){K1Flag = 0;xiaoshi++; }}//小时设定值- //表明按下if(k2 == 0){K2Flag = 1;}
下面是原理图展示:
stm32单片机最小系统讲解:
电源
电就是MCU要吃的饭,不吃饭,stm32芯片肯定不能工作。
stm32最小系统板需要5v和3.3v两种电压,一般可以直接通过USB提供5v电压,也可以用电源适配器提供5V电压。而3.3v电压可以通过稳压芯片如ASM1117-3.3v等,把5v电压降为3.3v输出。
USB接口,提供的5v电压经过ASM1117-3.3v后降为3v3,(10*10^4pF=0.1u)用于电源滤波,高频滤波用小电容,低频滤波用大电容。D3是一个led用以指示电源工况,其上的510R即510.0Ω用以限流,防止led灯烧坏。
USB接口,提供5v电压,同时它也是一个模拟串口,其D-和D+引脚与ch340相应引脚连接构成一个串口设备。
stm32吃的是3v3将其VDD和VSS引脚分别连接到3v3和GND,就解决了stm32的吃饭问题。
注意:VBAT是stm32芯片的备用3.3v电源输入端,当没有备用电源是也需要将VBAT接到VDD上去。
VDDA和VSSA是模拟电源输入口,用以给stm32芯片内部ADC,复位电路供电因此必须分别接到VDD和VSS上。
复位电路
人工作久了容易自闭、精神恍惚,这时需要睡一觉就以重新焕发活力。stm32工作久了也容易“精神恍惚”————程序跑飞,也需要复位。
stm32的NRST引脚是复位信号接收引脚与RESET相连,芯片低电平复位。如上图所示,当芯片刚上电时,电容充电导通,此时RESET=0,芯片复位;当按下复位按钮时,RESET接地,芯片复位。
晶振电路
晶振是芯片的心跳,每一次脉冲激励芯片执行一条指令,因此晶振的重要性不言而喻。
stm32的晶振电路,8M无源晶振,其中(1M)用于稳定晶振的脉冲波形,(20P)和(20P)一方面构成晶振起振的必要回路,另一方面匹配电容,同时还具有调节晶振电路频率的作用。
注意:OSC32IN是外部32.768K晶振输入口,可以直接接时钟信号,也可以不洁作IO用。OSCIN是外部系统时钟输入信号,可以接时钟信号,也可以不接做IO口用,此时stm32用芯片内部的RC电路起振产生时钟信号。
这篇关于17-基于stm32单片机汽车胎压速度监测蓝牙上传数据程序代码原理图元件清单的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!