(精简)基于HAL库-双蓝牙HC05双STM32通讯(附代码!)

本文介绍了如何使用STM32F103C8T6和HAL库,通过CubeMX配置两个HC05蓝牙模块进行通信。主要步骤包括蓝牙配置、USART设置和中断处理,同时展示了简洁的主机和从机代码段,以及使用OLED屏幕和LED灯进行数据验证的示例。
摘要由CSDN通过智能技术生成

一、前言

最近在准备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

  • 16
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
对于STM32蓝牙通信,可以使用BTO8HAL库来实现。根据引用\[1\]中的描述,首先需要将USBTOTTL模块的引脚连接到STM32的电源引脚和串口引脚。具体连接方式如下:将3.3V引脚连接到STM32的3.3V引脚,将GND引脚连接到STM32的GND引脚。需要注意的是,模块的串口引脚RX对应STM32的TX引脚,模块的串口引脚TX对应STM32的RX引脚。在烧录程序时,需要使用串口1,即将模块的TX引脚连接到STM32的A9引脚,将模块的RX引脚连接到STM32的A10引脚。 在使用BTO8HAL库之前,需要引入Delay.h头文件。根据引用\[2\]中的代码,Delay.h文件中定义了一些延时函数,可以用来实现延时操作。 关于使用BTO8HAL库进行蓝牙通信的具体步骤和函数调用,可以参考引用\[3\]中提到的江科大自化协c8t6的教学视频和笔记。这些资料可以提供更详细的指导和示例代码,以帮助你实现STM32蓝牙通信功能。 #### 引用[.reference_title] - *1* [Arduino IDE 烧录 STM32单片机](https://blog.csdn.net/jacka654321/article/details/82827925)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [01、【江科大自化协stm32F103c8t6】笔记之【入门32单片机及GPIO初始化参数配置】](https://blog.csdn.net/weixin_61203118/article/details/125860600)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值