当前位置:   article > 正文

STM32单片机与蓝牙模块HC-05通信数据帧处理_stm32通过hc-05传输

stm32通过hc-05传输

本章将会详细讲述蓝牙模块(HC-05)和STM32单片机之间的通信收发的数据如何处理,在测试开始前首先在手机上下载好一个蓝牙调试APP,此APP可以是手机端和PC端口的,以我常用的手机端的为例。

在配置工程之前先了解一下他的数据传输格式

一帧数据里面有以下数据:包头、原数据、校验位、包尾。

接下来我们在APP里面设置一个简单的工程以便我们验证后续的程序。

 APP设置操作到处就结束了,可以用USB转串口先看一下HC-O5收到的数据,可以看见接收到的16进制数,一共是七个字节,帧头一位、原始数据四位、校验位一位、帧尾一位。

接下来是把我们提前准备好的硬件STM32单片机和HC-05模块连接上,在此直接贴图片,其他涉及到的知识不多赘述,不知道怎么接线的请移步百度。

如何配置串口初始化函数这里也不多说,紧接着开始写接收函数。

  1. void UART4_IRQHandler(void) //串口4中断程序
  2. {
  3. static u8 res;
  4. if(USART_GetITStatus(UART4, USART_IT_RXNE) != RESET)//接收到数据
  5. {
  6. res =USART_ReceiveData(UART4);
  7. UART4_Flow_Receive_Prepare(res);
  8. }
  9. }
  10. void UART4_Flow_Receive_Prepare(u8 data)
  11. {
  12. /* 局部静态变量:接收缓存 */
  13. static u8 RxBuffer[UART4_RECV_LEN];
  14. /* 数据长度 *//* 数据数组下标 */
  15. static u16 _data_cnt = 0;
  16. /* 接收状态 */
  17. static u8 state = 0;
  18. /* 帧头1 */
  19. if(state==0&&data==0xA5)
  20. {
  21. // state=1;
  22. state=2;
  23. _data_cnt = 0;
  24. RxBuffer[_data_cnt++]=data;
  25. }
  26. /* 接收数据组 */
  27. else if(state==2)
  28. {
  29. RxBuffer[_data_cnt++]=data;
  30. if((_data_cnt>=6||data==0x5A)&&_data_cnt>=1)
  31. {
  32. state=0;
  33. UART4_access_Data(RxBuffer,_data_cnt);
  34. }
  35. }
  36. /* 若有错误重新等待接收帧头 */
  37. else
  38. state = 0;
  39. }
  40. void UART4_access_Data(u8 data[],u16 i)
  41. {
  42. u16 j=0;
  43. for(j=0;j<i;j++)
  44. {
  45. UART4_BT_date[j]=(u8)data[j];
  46. // printf("Received data:%d \n\r",UART4_BT_date[2]);
  47. }
  48. UART4_RX_STA=1;
  49. UART4_RX_deal();
  50. }
  51. u8 UART4_RX_deal(void)
  52. {
  53. if(UART4_RX_STA)
  54. {
  55. UART4_RX_STA =0;
  56. }
  57. }

再将收到的数据通过上位机调试助手打印出来

  1. void task2_task(void *pvParameters)
  2. {
  3. while(1)
  4. {
  5. DC12V_WS_EN=1;//开启12V电压
  6. ll=UART4_BT_date[1];
  7. lp=UART4_BT_date[2];
  8. lr=UART4_BT_date[3];
  9. lv=UART4_BT_date[4];
  10. if(ll==1)
  11. {
  12. printf("Received data:%d \n\r",UART4_BT_date[1]);
  13. // Auxiliary_PWM_cleaning(5000);
  14. }
  15. if(lr==2)
  16. {
  17. printf("Received data:%d \n\r",UART4_BT_date[3]);
  18. // Auxiliary_PWM_cleaning(-7000);
  19. }
  20. if(lp==6)
  21. {
  22. printf("Received data:%d \n\r",UART4_BT_date[2]);
  23. // Auxiliary_PWM_dust_collection(5000);
  24. }
  25. if(lv==7)
  26. {
  27. printf("Received data:%d \n\r",UART4_BT_date[4]);
  28. Auxiliary_PWM_dust_collection(-7000);
  29. }
  30. if (ll==0&&lr==0)
  31. {
  32. Auxiliary_PWM_cleaning(0);
  33. }
  34. if (lp==0&&lv==0)
  35. {
  36. Auxiliary_PWM_dust_collection(0);
  37. }
  38. vTaskDelay(5);
  39. }
  40. }

 到这里基本上就处理完接收到的数据了,下期将会介绍如何把数据发回手机APP查看,讲得不对的地方麻烦各位大佬评论区指出。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/911718
推荐阅读
相关标签
  

闽ICP备14008679号