基于HAL库的双蓝牙通讯,附带代码!

一、前言

最近在准备23电赛,考虑到之前21年有双车跟随题目要用到蓝牙通讯,所以在准备两个蓝牙之间的通信。翻了很多的博客,发现很少有针对双HC05蓝牙通讯的HAL库例程,所以在做好了自己实验过后写一篇博客,希望能帮助到有这方面需求的大家。

本篇文章适用人群:

1.基于HAL库用CubeMX生成代码 

2.已掌握HC05指令配置的人群,如果AT配置还没搞好可以参照http://t.csdn.cn/qSTGE 这位博主的文章。

3.不喜欢看冗长代码博客的同学

二、准备器件

1.两块STM32F103C8T6(其它主控原理一样)

2.两块HC05蓝牙模块

3.一块OLED屏幕

4.两个LED灯

三、开干

1.先确保好自己的两块HC05已配置好:(1)相同密码(2)一块主机模式,一块从机模式(3)主机已绑定从机地址     |

如果没有配置好,请回到前言部分打开链接,跟着配置好,务必!!!!!!!!

2.打开Cubemx开始配置主机部分工程

 点击左侧SYS配置Debug为Serial Wire

 点击左侧RCC开启高速低速时钟

 配置时钟树,在HCLK直接输入72按回车



 配置USART2的模式为Asynchronous异步收发模式,并勾选中断

 再勾选一个PB3的Output模式作为测试LED灯用。这就是全部的引脚图了。


接下来直接上代码!

主机部分(TX)   (以下只展示需要添加的代码,因为初始化代码是cubemx配置的,因此不再展示,以免代码冗长恶心大家。)
/* USER CODE BEGIN 0 */
uint8_t dat_Txd=1;




void HAL_UART_TxCpltCallback(UART_HandleTypeDef  *huart) 
{         
    if(huart->Instance == USART2)         
    {             
            HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,GPIO_PIN_SET);
    }
}




/* USER CODE END 0 */

定义一个变量,让串口2把它发出去,也就是说发出去一个数字1。 中断回调函数作用:一旦串口2发送了数据,就让LED灯亮(LED灯正极接IO口,负极接地,高电平点亮)。

此代码写在int main()初始化的前面,记得写在用户框里,避免再次生成时代码丢失。

HAL_Delay(2000);

在初始化代码int main()里加入Delay,让供电稳定了之后再发送,也避免因为上电过快从机来不及接收。

HAL_UART_Transmit_IT(&huart2,  &dat_Txd, sizeof(dat_Txd));

这段代码写在while里,作用:让串口2发送数据。

以上主机(TX)端代码结束,简洁吧!

从机部分(RX)

Cubemx部分和主机一致,再跟着配一遍就好了!

从机引脚图如下,串口用的USART3,多加了IIC接口以供OLED使用(结尾附工程代码,包含OLED IIC驱动代码),PB4用作LED测试。

/* USER CODE BEGIN 0 */

uint8_t dat_Rxd;



void HAL_UART_RxCpltCallback(UART_HandleTypeDef  *huart)    
{        
    if(huart->Instance == USART3)    
    {  
		OLED_ShowNum(30,3,dat_Rxd,2,12, 0);			
        if(dat_Rxd == 0x01)      
            HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_SET);
    }
}

/* USER CODE END 0 */

定义一个接收量dat_Rxd,中断回调函数作用:一旦接收到数据,OLED屏把它显示出来,如果该数据是0x01,那么让LED灯亮(高电平点亮,另一头接地)

/* USER CODE BEGIN 2 */
	OLED_Init();
	OLED_Clear();
	
	
  HAL_UART_Receive_IT(&huart3,  &dat_Rxd, 1);
  /* USER CODE END 2 */

初始化int main()里加入这三句,OLED初始化,清屏,然后接收数据。

效果演示:

 上电后,右边主机发送数据1,然后LED亮,接着从机OLED显示接收到的数据1,然后点亮LED屏幕。

四、尾言

CSDN上好像很少基于hal库的蓝牙通信例程,我个人也很不喜欢看复杂的代码,就希望自己写的简洁一些,让大家也能很好的看懂,这就是我的初心了。如果大家有什么不懂的也可以留言,本人才疏学浅难免有错误不足之处恳请斧正。特别鸣谢灵感来源:小蜜蜂Cubemx。

工程代码:链接:https://pan.baidu.com/s/1xFEsvyf673LfPEDOSmcr5Q?pwd=ynku 
提取码:ynku

作者:树爷只认钱

物联沃分享整理
物联沃-IOTWORD物联网 » 基于HAL库的双蓝牙通讯,附带代码!

发表评论