按键/串口控制STM32单片机LED灯的亮度

如题,实际上是通过操作单片机定时器发出的PWM输出来点亮LED,而我们可以通过操作占空比来改变LED的亮度。
首先找一个单片机定时器TIM14它可以发出PWM输出
对应针脚PF9将其复用。
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_TIM14_CLK_ENABLE(); //使能定时器 14 __HAL_RCC_GPIOF_CLK_ENABLE(); //开启 GPIOF时钟
GPIO_Initure.Pin=GPIO_PIN_9;
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速
GPIO_Initure.Alternate= GPIO_AF9_TIM14; //PF9复用为 TIM14_CH1 HAL_GPIO_Init(GPIOF,&GPIO_Initure);
设置完io后我们要初始化定时器14的通道为PWM模式1,输出极性
TIM_OC_InitTypeDef TIM14_CH1Handler; //定时器 14通道 1句柄
TIM3_CH4Handler.OCMode=TIM_OCMODE_PWM1; //模式选择 PWM1 TIM3_CH4Handler.Pulse=arr/2; //设置比较值 ,此值用来确定占空比
TIM3_CH4Handler.OCPolarity=TIM_OCPOLARITY_LOW; //输出比较极性为低
HAL_TIM_PWM_ConfigChannel(&TIM3_Handler,&TIM3_CH4Handler,TIM_CHANNEL_4);
初始化全部完成 下面只需要操作PWM输出的占空比即可
//占空比函数实现
void TIM_SetTIM14Compare1(u32 compare) {
TIM14–>CCR1=compare;
}
然后使能串口,串口的操作在上一篇帖子
主函数+源代码。
按键/串口控制STM32单片机LED灯的亮度_第1张图片
同理这样的操作也可以直接操作蜂鸣器,蜂鸣器对应的定时器是TIM_13 也是通道1.修改只需查找替换,(注意头文件里的声明也要改)
其中key2提高亮度(占空比),key1降低亮度

你可能感兴趣的:(STM32F407学习之路)