使用STM32开发蓝牙模块连接

一、蓝牙概要       

        蓝牙是一种常见的无线通信协议,通常用于短距离通信。蓝牙分为经典蓝牙和低功耗蓝牙(BLE)。经典蓝牙通常用于需要持续传输数据的设备,比如蓝牙耳机等。低功耗蓝牙通常用于只需要间歇性传输数据的设备,比如运动手环。

        蓝牙通信通常分为主机和从机,通常我们的单片机设备被当作从机,手机等终端设备作为主机。在建立蓝牙通信前,从机要向外广播自己的信息。

        蓝牙通信协议比较复杂,比如在低功耗蓝牙中就包含GAP广播协议,GATT协议等知识点。在学习单片机的过程中,可以使用BT24蓝牙串口透传模块,该模块的作用可以讲复杂的蓝牙协议简化为”串口透传“。所谓串口透传,就是将STM32发送给其的数据原封不动地转发给与其连接的设备。并且可以将主机发送的数据通过串口转发给STM32.。

        注意:连接模块时,地线接地线(GND),5V接5V,TX与RX交叉连接

二、准备工作

        在终端输入命令控制红绿小灯亮灭

1.首先我们在CubeIDE将蓝牙模块连接的USART3设置为异步模式。蓝牙模块的默认波特率为9600,在参数设置界面中找到波特率参数修改成9600

2.为USART3开启中断

3.并且为USART3开启DMA通道

4.设置红绿蓝小灯为GPIO_OUTPUT。

5.保存并生成代码。.

6.参考如下连接的代码,将huart2的相关变量改成huart3的相关变量。具体实现见最后

STM32:串口轮询模式、中断模式、DMA模式和接收不定长数据-CSDN博客

三.使用BLE调试功能调试代码

       通常使用蓝牙调试助手来调试代码。或者用 nRF Connect 也行。但是在学习环境上可以在波特律动 串口助手 进行调试。

四、主要代码。

/* USER CODE BEGIN PV */
uint8_t  recvDate[20];
/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_DMA_Init(void);
static void MX_USART3_UART_Init(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){
	if(huart == &huart3){
		 //把接收到的数据,发给终端进行打印
		 HAL_UART_Transmit_DMA(&huart3,recvDate,Size);
		 GPIO_PinState pinstate= GPIO_PIN_RESET;
		 if(recvDate[1] == '1'){
			 pinstate = GPIO_PIN_SET;
		 }
		 if(recvDate[0] == 'R'){
			 HAL_GPIO_WritePin(redLED_GPIO_Port, redLED_Pin, pinstate);
		 }else if(recvDate[0] == 'B'){
			 HAL_GPIO_WritePin(blueLED_GPIO_Port,blueLED_Pin, pinstate);
		 }else if(recvDate[0] == 'G'){
			 HAL_GPIO_WritePin(greenLED_GPIO_Port,greenLED_Pin, pinstate);
		 }
		 //继续接收即将要接收的数据
		  HAL_UARTEx_ReceiveToIdle_DMA(&huart3, recvDate, sizeof(recvDate));
		  //关闭DMA传输过半中断
		  __HAL_DMA_DISABLE_IT(&hdma_usart3_rx,DMA_IT_HT);
	}
}

物联沃分享整理
物联沃-IOTWORD物联网 » 使用STM32开发蓝牙模块连接

发表评论