赞
踩
本章将会详细讲述蓝牙模块(HC-05)和STM32单片机之间的通信收发的数据如何处理,在测试开始前首先在手机上下载好一个蓝牙调试APP,此APP可以是手机端和PC端口的,以我常用的手机端的为例。
在配置工程之前先了解一下他的数据传输格式
一帧数据里面有以下数据:包头、原数据、校验位、包尾。
接下来我们在APP里面设置一个简单的工程以便我们验证后续的程序。
APP设置操作到处就结束了,可以用USB转串口先看一下HC-O5收到的数据,可以看见接收到的16进制数,一共是七个字节,帧头一位、原始数据四位、校验位一位、帧尾一位。
接下来是把我们提前准备好的硬件STM32单片机和HC-05模块连接上,在此直接贴图片,其他涉及到的知识不多赘述,不知道怎么接线的请移步百度。
如何配置串口初始化函数这里也不多说,紧接着开始写接收函数。
- void UART4_IRQHandler(void) //串口4中断程序
- {
- static u8 res;
- if(USART_GetITStatus(UART4, USART_IT_RXNE) != RESET)//接收到数据
- {
- res =USART_ReceiveData(UART4);
- UART4_Flow_Receive_Prepare(res);
- }
-
- }
-
- void UART4_Flow_Receive_Prepare(u8 data)
- {
- /* 局部静态变量:接收缓存 */
- static u8 RxBuffer[UART4_RECV_LEN];
- /* 数据长度 *//* 数据数组下标 */
- static u16 _data_cnt = 0;
- /* 接收状态 */
- static u8 state = 0;
-
- /* 帧头1 */
- if(state==0&&data==0xA5)
- {
- // state=1;
- state=2;
- _data_cnt = 0;
- RxBuffer[_data_cnt++]=data;
- }
-
- /* 接收数据组 */
- else if(state==2)
- {
- RxBuffer[_data_cnt++]=data;
- if((_data_cnt>=6||data==0x5A)&&_data_cnt>=1)
- {
- state=0;
- UART4_access_Data(RxBuffer,_data_cnt);
- }
- }
- /* 若有错误重新等待接收帧头 */
- else
- state = 0;
- }
- void UART4_access_Data(u8 data[],u16 i)
- {
- u16 j=0;
- for(j=0;j<i;j++)
- {
- UART4_BT_date[j]=(u8)data[j];
- // printf("Received data:%d \n\r",UART4_BT_date[2]);
- }
- UART4_RX_STA=1;
- UART4_RX_deal();
- }
- u8 UART4_RX_deal(void)
- {
- if(UART4_RX_STA)
- {
-
- UART4_RX_STA =0;
- }
- }
再将收到的数据通过上位机调试助手打印出来
- void task2_task(void *pvParameters)
- {
- while(1)
- {
- DC12V_WS_EN=1;//开启12V电压
-
- ll=UART4_BT_date[1];
- lp=UART4_BT_date[2];
- lr=UART4_BT_date[3];
- lv=UART4_BT_date[4];
- if(ll==1)
- {
- printf("Received data:%d \n\r",UART4_BT_date[1]);
- // Auxiliary_PWM_cleaning(5000);
- }
- if(lr==2)
- {
- printf("Received data:%d \n\r",UART4_BT_date[3]);
- // Auxiliary_PWM_cleaning(-7000);
- }
- if(lp==6)
- {
- printf("Received data:%d \n\r",UART4_BT_date[2]);
- // Auxiliary_PWM_dust_collection(5000);
- }
- if(lv==7)
- {
- printf("Received data:%d \n\r",UART4_BT_date[4]);
- Auxiliary_PWM_dust_collection(-7000);
- }
- if (ll==0&&lr==0)
- {
- Auxiliary_PWM_cleaning(0);
- }
- if (lp==0&&lv==0)
- {
- Auxiliary_PWM_dust_collection(0);
- }
-
- vTaskDelay(5);
- }
- }
到这里基本上就处理完接收到的数据了,下期将会介绍如何把数据发回手机APP查看,讲得不对的地方麻烦各位大佬评论区指出。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。