一、需求
实现蓝牙串口通信功能
• 当手机端蓝牙调试助手发送:”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很暗