高级会员 
  
	- 积分
 - 690
 
        - 金钱
 - 690 
 
       - 注册时间
 - 2019-7-28
 
      - 在线时间
 - 62 小时
 
 
 
 | 
 
硬件:STM32G030F6P6  
 
软件环境:STM32CubeIDE 
实现功能:RCR定数量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  修改脉宽 
 
非常方便,也好记。 
 
 |   
 
 
 
 |