一、需求
實現藍牙串口通信功能
• 當手機端藍牙調試助手發送:”LED1 Toggle”時,反轉LED1燈狀態;
• 當手機端藍牙調試助手發送:”LED2 BrightnessN”(其中最後一個字母N表示亮度等級,可取爲1,2,3,4,5,數字越大,越亮)時,調節LED2的亮度等級
• LED1、LED2自由選擇GPIO口
二、實現
- 1、配置好兩個LED的底層驅動,我手頭的兩個LED燈電路如下所示,其中PA6設置爲PWM模式,也就是上文的LED2,PA7爲普通IO口輸出。
- 配置藍牙模塊的波特率爲115200,要與串口1連接,配置方法見之前的博客藍牙模塊的配置(HC05):修改密碼、修改模塊名字、修改波特率。
- 在STM32寫入MSH命令行控制的代碼,如下:
void LED2_control(int argc,char **argv)
{
if(!rt_strcmp(argv[1],"LED2 Brightness1"))
{
TIM3->CCR1 = 499;
}
else if(!rt_strcmp(argv[1],"LED2 Brightness2"))
{
TIM3->CCR1 = 400;
}
else if(!rt_strcmp(argv[1],"LED2 Brightness3"))
{
TIM3->CCR1 = 300;
}
else if(!rt_strcmp(argv[1],"LED2 Brightness4"))
{
TIM3->CCR1 = 200;
}
else if(!rt_strcmp(argv[1],"LED2 Brightness5"))
{
TIM3->CCR1 = 100;
}
}
MSH_CMD_EXPORT(LED2_control, LED2 Bringhtness control);
int LED1Toggle(void)
{
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_7);
return 0;
}
MSH_CMD_EXPORT(LED1Toggle, LED1 Toggle);
- 在MSH中輸入對應控制命令即可。
三、實驗效果
由於沒有藍牙,所以我就使用USB轉TTL模擬。
效果如下:
初始化爲兩個燈常亮:
當調用LED1翻轉,和LED2的模式爲”LED2 Brightness1”時,效果如下:LED1滅了,LED2很暗