当前位置:   article > 正文

基于STM32CUBEMX,HAL库蓝牙通信_stm32单片机的蓝牙通讯代码

stm32单片机的蓝牙通讯代码

 蓝牙通信(实现手机与stm32连接)

1.准备工作

  • 蓝牙模块HC-05模块
  • 安卓APP软件

HC-05蓝牙模块支持AT指令。要进入AT指令模式,需要先按住蓝牙模块上的按键,接通电源,当模块上的LED灯进入慢闪后再松开按键,此时已经进入AT指令模式,可以进行AT指令设置1

常用的AT指令包括:

AT+VERSION?

返回HC-05的软件版本号

AT+NAME?

返回HC-05的名字

AT+UART?

返回蓝牙波特率

AT+UART=115200,0,0

设置串口波特率115200,1位停止位,无校验位

AT+NAME=bluetooth

修改蓝牙模块的名字为bluetooth

AT+PSWD?

查询配对密码

AT+PSWD=”1234”

设置密码1234

AT+ROLE?

查询主从状态,=1:设置成主,=0:设置成从,=2:设置成回环

AT+ROLE=0

设置成从

AT+ORGL

恢复出厂默认设置。

2.stm32cubemx设置

设置和串口一样,因为需要用到中断,所以我们需要打开中断。

我们打开2个串口。UART5连接蓝牙模块。

3.keil代码

基础配置一下

usart.c下

  1. /* USER CODE BEGIN 1 */
  2. char Buff[255];//存储数据
  3. uint8_t Data; //暂存数据
  4. int Cnt = 0; //计数
  5. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  6. {
  7. if(huart ==&huart5)
  8. {
  9. Buff[Cnt++] = (char)Data;
  10. if(Buff[Cnt-1] == 0x0A && Buff[Cnt-2] == 0x0D)//判断是否为回车结尾
  11. {
  12. if(Buff[Cnt-3] == 0x01)
  13. {
  14. flag = 1;
  15. }
  16. if(Buff[Cnt-3] == 0x02)
  17. {
  18. flag = 2;
  19. }
  20. if(Buff[Cnt-3] == 0x03)
  21. {
  22. flag = 3;
  23. }
  24. if(Buff[Cnt-3] == 0x04)
  25. {
  26. flag = 4;
  27. }
  28. if(Buff[Cnt-3] == 0x05)
  29. {
  30. flag = 5;
  31. }
  32. if(Buff[Cnt-3] == 0x06)
  33. {
  34. flag = 6;
  35. }
  36. }
  37. HAL_UART_Receive_IT(&huart5,(uint8_t *)&Data,sizeof(Data));
  38. }
  39. }
  40. ///重定向c库函数printf到串口DEBUG_USART,重定向后可使用printf函数
  41. int fputc(int ch, FILE *f)
  42. {
  43. /* 发送一个字节数据到串口DEBUG_USART */
  44. HAL_UART_Transmit(&huart5, (uint8_t *)&ch, 1, 1000);
  45. return (ch);
  46. }
  47. /* USER CODE END 1 */

 usart.h

  1. /* USER CODE BEGIN Includes */
  2. #include <stdio.h>
  3. /* USER CODE END Includes */
  4. /* USER CODE BEGIN Private defines */
  5. extern char Buff[255];//存储数据
  6. extern uint8_t Data; //暂存数据
  7. extern int Cnt; //计数
  8. extern int flag;
  9. /* USER CODE END Private defines */

 main.c

  1. /* USER CODE BEGIN PTD */
  2. int flag;
  3. /* USER CODE END PTD */
  4. /* USER CODE BEGIN 2 */
  5. HAL_UART_Receive_IT(&huart5,(uint8_t *)&Data,sizeof(Data));
  6. /* USER CODE END 2 */
  7. /* USER CODE BEGIN WHILE */
  8. while (1)
  9. {
  10. switch(flag)
  11. {
  12. case(1):
  13. printf("1");
  14. break;
  15. case(2):
  16. printf("2");
  17. break;
  18. case(3):
  19. printf("3");
  20. break;
  21. case(4):
  22. printf("4");
  23. break;
  24. case(5):
  25. printf("5");
  26. break;
  27. case(6):
  28. printf("6");
  29. break;
  30. default:
  31. printf("0");
  32. break;
  33. }
  34. HAL_Delay(1000);
  35. /* USER CODE END WHILE */

 

4.实验现象

发送01 0D 0A(0D 0A是两个ASCII码,分别代表回车(CR)和换行(LF))

发送02 0D 0A

如果需要在电脑上显示,我们把发送给手机的端口huart5改成huart1就可以了。

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

闽ICP备14008679号