用STM32制作汽车蓝牙OBD转速/车速表(带LED转速指示)

这个项目的目标是用STM32F103C8T6制作汽车蓝牙OBD转速/车速表,在OLED屏上显示当前转速和车速,同步在OLED灯带上显示转速(按预设的最高转速的比例显示),转速超出预设的最高转速后,灯带开始闪烁,可以用于换挡提示。

系统结构框图如下:

1、LED灯条和OLED屏用商家提供的驱动就好了;

2、蓝牙模块HC-05预先和蓝牙OBD配对好,HC-05连接模式需要设置CMOD为1,写入蓝牙OBD的mac地址,这样上电后HC-05就会主动连接OBD。同时需要把HC-05的状态引脚接入STM32的一个io口,用于判断蓝牙是否连接成功。

3、系统使用按键进入设置模式,可以设置提醒转速值。设置参数存储在STM32的flash内。

系统最重要的部分是OBD的初始化和OBD数据的接收:

/****************
	初始化OBD
*****************/
#define INIT_SEQ_LEN	6
char *init_strs[]={"ATD\r","ATZ\r","AT E0\r","AT L0\r","AT S0\r","AT H0\r"};
char *response_strs1[]={"OK","ELM327v1.5","OK","OK","OK","OK"};
char *response_strs2[]={"ATDOK","ATZ","ATE0OK","","",""};
u8 USART2_init_obd(void){
	u8 ret=0;
	
	for(int i=0;i<INIT_SEQ_LEN;i++){
		USART2_SendStr(init_strs[i]);
		ret=USART2_wait_for_response(response_strs1[i],response_strs2[i]);
		if(!ret) return 0;		
	}
	
	return ret;
}
/****************
  UART2接收中断处理
*****************/
void USART2_IRQHandler(void)
{
	u8 data;
  //接收中断
	//溢出-如果发生溢出需要先读SR,再读DR寄存器 则可清除不断入中断的问题
	if(USART_GetFlagStatus(USART2,USART_FLAG_ORE) != RESET) //溢出
	{
		USART_ClearFlag(USART2,USART_FLAG_ORE);  //读SR
		data=USART_ReceiveData(USART2); //读DR  
		//gUsart2RxOk=1;	//标识已经接收完成
	}
	
 if(USART_GetITStatus(USART2,USART_IT_RXNE)!= RESET)  // 接收 中断
	{
		USART_ClearITPendingBit(USART2,USART_IT_RXNE); // U1RX_Clear_Intr_Status_Bit;
		data=USART_ReceiveData(USART2);
		if(data == '>'){	//'>'符号代表一行数据结束
			USART2_ParseData();	
			
			gUsart2RxOk=1;	//标识已经接收完成
			usart2_rx_buff_idx=0;//指针复位
		}  
		else if((data !=0x20) && (data!=0x0d)) {	//忽略空格和回车
			usart2_rx_buff[usart2_rx_buff_idx++]=data;	//放入缓冲区
			usart2_rx_buff_idx %= USART2_RX_BUFF_SIZE;	//防止越界
		}
		
	}
 
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值