前言
上一篇文章介绍了使用PWM Genneration 模式生成PWM波,本文将简绍PWM波生成的另外一种模式,输出比较(Output Compare )生成PWM波。
定时器输出比较是一种在定时器中使用的比较功能。它可以将定时器的计数器值与预设的比较器值进行比较,来对输出电平进行置1、置0或翻转的操作。
CUBEMX配置如下:
修改部分:内部时钟源,通道一模式,分频系数,输出比较模式,记得开启NVIC
代码部分:
开启输出比较
HAL_TIM_OC_Start_IT(&htim2,TIM_CHANNEL_1);
回调函数:
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM2)
{
if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_1)
{
uint32_t value=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);
if(flag)
{
__HAL_TIM_SetCompare(htim,TIM_CHANNEL_1,value+Frq-Dut); //低电平脉冲个数
}
else
{
__HAL_TIM_SetCompare(htim,TIM_CHANNEL_1,value+Dut); //高电平脉冲个数
}
flag=!flag; //轮流设置高低电平
}
}
}
解析:
频率=1000000/Frq 占空比=Dut/Frq
定时器的计数器每次递增时与比较器中的预设值进行比较。当计数器值等于比较器值时,输出端口进行电平翻转,同时触发中断,在中断函数中写入下一次函数触发中断的值(value+Frq-Dut为低电平,value+Dut为高电平)。