PWM是常用的外设之一,比如呼吸灯,动态改变灯的亮度,舵机等等都需要用到PWM外设。今天驱动PWM来展示TIM的功能之一。
我这里选用的TIM1的通道1,从数据手册上看到该通道IO为PA8:
pwm设置需要设置的参数有三个,一个是pwm的频率,一个是脉宽,一个是占空比。
依据官方给出的示例M:\CH32V208\CH32V20xEVT\EVT\EXAM\TIM\PWM_Output
我们在他的基本上修改。
1、例程已经给了我们一个频率为96000000/4800=20KHz的PWM波,点定计数值为100。
2、我们只要运态修改占空比,就能实现实时对脉宽的控制,从而改变LED的亮度,形成呼吸灯的效果。
即我们使用函数 TIM_SetCompare1来动态更改点空比。
/*********************************************************************
* @fn TIM_SetCompare1
*
* [url=home.php?mod=space&uid=2666770]@Brief[/url] Sets the TIMx Capture Compare1 Register value.
*
* [url=home.php?mod=space&uid=3142012]@param[/url] TIMx - where x can be 1 to 4 select the TIM peripheral.
* Compare1 - specifies the Capture Compare1 register new value.
*
* [url=home.php?mod=space&uid=1141835]@Return[/url] none
*/
void TIM_SetCompare1(TIM_TypeDef *TIMx, uint16_t Compare1)
{
TIMx->CH1CVR = Compare1;
}
修改后的主函数如下:
while(1)
{
if (t == 0) {
i = i+5;
if (i>=100) {
t = 1;
i=100;
}
}
else {
i = i-5;
if (i<=0) {
i = 0;
t = 0;
}
}
TIM_SetCompare1(TIM1, i);
printf("I:%d\r\n",i);
Delay_Ms(50);
}
编译后,我们下到开发板,就可以实现呼吸灯的效果了,详细见视频。
更多回帖