硬件:STM32G030F6P6
软件环境:STM32CubeIDE
实现功能:顶数量PWM输出
正常配置硬件,TIM1_CHANNEL2,ONE_Pulse Mode
主程序主动开启时钟、中断: (过去一直这么用!!!)
HAL_TIM_Base_Start(&htim1); //这句有的说放在开启中断后,有的说在前,测试发现应该防止前面,否则输出脉冲数少了。
HAL_TIM_PWM_Start_IT(&htim1, TIM_CHANNEL_2);
怎么都进不了下面的中断,但同样的程序,改成TIM3就可以
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
做了各种排列组合,结果发现需要同时(!!!!!?????)启用下列函数,才能正确进入中服务(重点是以前从来没这么用过!!!)
__HAL_TIM_ENABLE_IT(&htim1, TIM_IT_UPDATE);
HAL_TIM_PWM_Start_IT(&htim1, TIM_CHANNEL_2);
也许这就是研发——从一个又一个的坑里趴出来,外人看上去以为你在走平路。
另外发现一个好用的功能,给大家分享以下:
固定个数的脉冲输出,可以采用PWM 的 ONE_Pulse Mode 方式,
通过:
TIM1->RCR = pulse 根据需要修改脉冲数量
TIM1->ARR = 1/f 修改频率
TIM1->CCR1 = du 修改脉宽
非常方便,也好记。 |