测试是基于正点原子STM32精英版,芯片为STM32F103ZET6。
HAL库配置
记得打开TIMER的中断
程序
HAL_TIM_PWM_Start_IT(&htim3, TIM_CHANNEL_4); //此处一句后可直接进入中断
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) //中断回调
{
static uint16_t i = 0;
i++;
if(i >= 10) //此处10为产生PWM的数量,可设置为变量实时改变
{
i =0;
HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_4); //产生指定数量的PWM波后停止PWM的产生
}
}
说明
测试是可以进入HAL_TIM_PWM_PulseFinishedCallback中断回调,根据网上各种人的结论,测试100K以下可以进入中断,但不知道数量是否对,40kHz以下输出脉冲数量是对的
自己测试时,140KHz以上不稳定,可能会在波形停止后有个延时毛刺。140KHz以下能稳定输出自己所需数量的波形。
由于测试程序中除产生波形以及中断程序外未有其他程序,在使用过程中还需测试。
图说测试结果(看图中的波形频率)
20KHz的波形,设置产生5个PWM波
135KHz的波形,设置产生10个PWM波
142KHz的波形,设置产生10个PWM波
142KHz的波形,设置产生10个PWM波,有毛刺
144KHz的波形,设置产生10个PWM波
168KHz的波形,设置产生10个PWM波,有毛刺
263KHz的波形,设置产生10个PWM波,实际产生13个PWM波