一、藍牙模塊介紹
主控板配套的是一款低功耗藍牙模塊,適用于短距離無線通信。該模塊通常被用于各種嵌入式項目,如物聯網(IoT)設備、手機配件、智能家居設備、醫療設備等。
以下是藍牙模塊的一些主要特點和功能:
低功耗: 本模塊設計為低能耗,適合電池供電的應用。
藍牙版本: 支持藍牙4.0或更高版本,能夠與大多數藍牙設備兼容。
操作范圍: 通常具有較好的無線傳輸距離,適合各種室內外應用。
小尺寸: 模塊結構緊湊,便于嵌入到各種設備中。
簡單接口: 提供UART、SPI等常用接口,便于與微控制器或其他設備進行連接和通信。
易于配對: 具備快速配對功能,簡化了與其他藍牙設備的連接過程。
模塊圖片:

二、連接原理圖
藍牙接口在開發板上原理圖如下:

RJ5、RJ6跳線電阻用于切換不同模塊的供電電源。
三、驅動編寫
由以上原理圖可知,藍牙模塊的通訊協議為串口,接到主控板CW32上的PA2和PA3接口,再查詢手冊可知PA2,PA3復用功能為UART3,如下圖

那么驅動就比較容易了,只需要將之前固件庫中串口通信部分復制,然后將里面的串口配置引腳修改為PA2,PA3即可,修改之后如下:
PA02_AFx_UART3TXD();//配置GPIO復用功能
PA03_AFx_UART3RXD();
GPIO_InitTypeDef GPIO_Initstructure;
GPIO_Initstructure.IT=GPIO_IT_NONE;
GPIO_Initstructure.Mode=GPIO_MODE_OUTPUT_PP;//配置PA2為推挽輸出
GPIO_Initstructure.Pins=GPIO_PIN_2;
GPIO_Initstructure.Speed=GPIO_SPEED_HIGH;
GPIO_Init(CW_GPIOA,&GPIO_Initstructure);
GPIO_Initstructure.IT=GPIO_IT_NONE;
GPIO_Initstructure.Mode=GPIO_MODE_INPUT_PULLUP;//配置PA3為上拉輸入
GPIO_Initstructure.Pins=GPIO_PIN_3;
GPIO_Initstructure.Speed=GPIO_SPEED_HIGH;
GPIO_Init(CW_GPIOA,&GPIO_Initstructure);
這樣就可以了,完整的串口初始化如下:
void Uart_Init(void)
{
RCC_AHBPeriphClk_Enable(RCC_AHB_PERIPH_GPIOA,ENABLE);
RCC_APBPeriphClk_Enable1(RCC_APB1_PERIPH_UART3,ENABLE);//開啟串口3時鐘
PA02_AFx_UART3TXD();//配置GPIO復用功能
PA03_AFx_UART3RXD();
GPIO_InitTypeDef GPIO_Initstructure;
GPIO_Initstructure.IT=GPIO_IT_NONE;
GPIO_Initstructure.Mode=GPIO_MODE_OUTPUT_PP;//配置PA2為推挽輸出
GPIO_Initstructure.Pins=GPIO_PIN_2;
GPIO_Initstructure.Speed=GPIO_SPEED_HIGH;
GPIO_Init(CW_GPIOA,&GPIO_Initstructure);
GPIO_Initstructure.IT=GPIO_IT_NONE;
GPIO_Initstructure.Mode=GPIO_MODE_INPUT_PULLUP;//配置PA3為上拉輸入
GPIO_Initstructure.Pins=GPIO_PIN_3;
GPIO_Initstructure.Speed=GPIO_SPEED_HIGH;
GPIO_Init(CW_GPIOA,&GPIO_Initstructure);
USART_InitTypeDef USART3_Initstructure;
USART3_Initstructure.USART_BaudRate=9600;//配置波特率
USART3_Initstructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//無流控
USART3_Initstructure.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;//
USART3_Initstructure.USART_Over=USART_Over_16;
USART3_Initstructure.USART_Parity=USART_Parity_No;//不校驗
USART3_Initstructure.USART_Source=USART_Source_PCLK;
USART3_Initstructure.USART_StartBit=USART_StartBit_FE;//起始位
USART3_Initstructure.USART_StopBits=USART_StopBits_1;//停止位
USART3_Initstructure.USART_UclkFreq=64000000;
USART_Init(CW_UART3,&USART3_Initstructure);
USART_DirectionModeCmd(CW_UART3,USART_Mode_Tx,ENABLE);
USART_DirectionModeCmd(CW_UART3,USART_Mode_Rx,ENABLE);
USART_ITConfig(CW_UART3,USART_IT_RC,ENABLE);//中斷配置
NVIC_SetPriority(UART3_IRQn,0);//配置中斷優先級
NVIC_EnableIRQ(UART3_IRQn);
}
然后再修改一下中斷配置,使用狀態機接收固定長度的并且帶幀頭幀尾的數據,數據格式為幀頭+一位數據+幀尾
代碼如下:
void UART3_IRQHandler(void)
{
static uint8_t Count=0;
static uint8_t Pcount=0;
if(USART_GetITStatus(CW_UART3,USART_IT_RC)==SET)
{
uint8_t Data=USART_ReceiveData_8bit(CW_UART3);//接收數據
if(Count==0)
{
if(Data==0xFF)//判斷幀頭
{
Count=1;
// Pcount=0;
}
}
else if(Count==1)
{
Rx_Data[Pcount]=Data;//只存入幀頭之后的一位數據
Pcount++;
if(Pcount>0)
{
Count=2;
Pcount=0;
}
}
else if(Count==2)
{
if(Data==0xFE)//判斷幀尾
{
Count=0;
}
}
USART_ClearITPendingBit(CW_UART3,USART_IT_RC);//清除標志位
}
}
所以一幀完整的數據為(幀頭)0XFF+數據+(幀尾)0XFE;
然后在主函數中寫入以下代碼
int main(void)
{
Uart_Init();//串口初始化函數
printf("Hello world!rn");
while(1)
{
}
}
四、工作現象
當燒寫代碼之后,手機打開任意一個藍牙調試助手,發送如下數據

便可以看到OLED屏幕上第一行第一列顯示字符串HELLO,第二行在藍牙未接收到數據時顯示00,接收到之后顯示接收到的數據,本實驗發送02,則顯示02,可以自己更改。
-
嵌入式
+關注
關注
5204文章
20560瀏覽量
335886 -
智能小車
+關注
關注
87文章
565瀏覽量
83495 -
藍牙模塊
+關注
關注
30文章
669瀏覽量
57943 -
CW32
+關注
關注
1文章
323瀏覽量
1924
發布評論請先 登錄
CW32L012/F030靈眸X1智能小車——板載WS2812驅動示例
CW32L012/F030靈眸X1智能小車——超聲波模塊配置
堅持繼續布局32位MCU,進一步完善產品陣容,96Mhz主頻CW32L012新品發布!
白嫖的CW32小車的藍牙模式使用教程
**CW32L012****開發評估板的第一個程序**
CW32L012小型機器人控制評估板活動 四足機器人+智能小車 開箱評測
基于STM32的藍牙遙控小車設計
使用芯源CW32的CW32L012開發評估板做了spi屏幕驅動
CW32L012與STM32F103的三角運算性能對比
CW32L012與STM32G431的CORDIC三角函數運算性能對比
CW32L012/F030靈眸X1智能小車--電機調速控制
CW32L012/F030靈眸X1智能小車——使用藍牙模塊通訊
評論