使用到的藍牙模塊為DX-BT24,他可以將串口轉藍牙,實現與手機藍牙的通信,本次實現使用手機藍牙發送數據包來控制單片機LED的亮滅,規則如下:
AA 05 01 FF AF 該數據包表示包頭為AA,05表示該數據包的大小,01表示藍燈 FF表示亮 AF為校驗和,是前面數據相加后的后兩位用來檢驗數據傳輸的準確性
AA 05 02 00 B1 表示綠燈滅
也就是 包頭 +數據大小+哪個燈+燈狀態+校驗和,
因為可以同時設置所有燈的狀態如下:
AA 09 01 FF 02 FF 03 00 B7
所以不確定數據包大小就可以用不定長數據接收
按照電路圖接線,然后使用串口3來進行通信,rx接tx,tx接rx
代碼實現:
解析數據包代碼實現:
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{if(huart==&huart3){HAL_UART_Transmit_DMA(&huart3,(uint8_t*)message, Size);// 解析數據包代碼if(message[0]==0XAA)//包頭檢驗{if(message[1]==Size)//數據個數檢驗{uint8_t sum=0;for(int i=0;i<Size-1;i++){sum+=message[i];}if(sum==message[Size-1])//校驗和檢驗{for(int i=2;i<Size-2;i+=2){GPIO_PinState state=GPIO_PIN_RESET;if(message[i+1]==0XFF){state=GPIO_PIN_SET;}if(message[i]==0X01){HAL_GPIO_WritePin(BLUE_LED_GPIO_Port,BLUE_LED_Pin, state);}else if(message[i]==0X02){HAL_GPIO_WritePin(GREEN_LED_GPIO_Port,GREEN_LED_Pin, state);}else if(message[i]==0X03){HAL_GPIO_WritePin(RED_LED_GPIO_Port,RED_LED_Pin, state);}}}}}HAL_UARTEx_ReceiveToIdle_DMA(&huart3, (uint8_t*)message,sizeof(message));__HAL_DMA_DISABLE_IT(&hdma_usart3_rx,DMA_IT_HT);}}
手機下載一個藍牙助手