STM32F103单片机的PWM :频率 与 定时器中断问题

测试用的单片机是STM32F103C8T6 @72MHz,使用TIM1的通道1输出PWM。

 

示波器200MHz带宽(原120MHz软升级)。

TIM1配置:

预分频值:Prescaler(PSC) = 0;

自动装载值:Counter Period(ARR) = 1;

捕获比较寄存器值(设置脉宽):Capture Compare Register(CCR) = 1;

如此设置PWM频率可达72/2=36MHz。

TIM1_CH1引脚悬空波形(采样率不足,波形变形)

注意:想要提高PWM频率就不要开启对应定时器的中断:  

//HAL_TIM_Base_Start_IT(&htim1);    //该函数用于开启定时器中断,此时应该屏蔽掉

若开启了定时器中断,预分频值要设置到35以上才能工作,算下来PWM频率就只能输出1MHz或更低;

若在定时器中断回调函数里改变IO电平观察周期,会发现即便设置了更高的定时器频率,IO电平改变周期在4μs以上;

在开启中断事件的定时器上设置周期低于4μs时,会产生很多奇怪问题:

(以下测试用TIM1产生PWM,用TIM2定时器中断事件翻转IO电平)

比如定时器中断开启函数在PWM开启函数之前,定时中断可以翻转电平(周期4μs),但PWM无波形输出:

反过来PWM在定时器中断之前开启,定时器中断可以翻转电平(周期4μs)、PWM可以正常输出波形:

我尝试在开启定时器中断之前用 __HAL_TIM_CLEAR_FLAG(&htim2, TIM_IT_UPDATE); 清除中断标志,问题没有解决。

总结:

(以下数据在 STM32F103 @72MHz 测试,仅供参考)

  1. 一个定时器只开启PWM功能时,PWM频率最高可达36MHz。
  2. 一个定时器既开启PWM又开启UpDate中断时,PWM频率最高可达1MHz。
  3. 一个定时器用于输出PWM、另一个定时器用于中断时还会出现几种情况:  

         ①用于中断的定时器设定周期处于4μs以上时,两个定时器互不冲突正常工作。

         ②用于中断的定时器设定周期处于4μs以下时:如果定时器中断比PWM先开启了,中断回调周期还是4us但PWM无法输出;如果PWM比定时器先开启,中断回调周期4μs,PWM可以正常输出(频率可达36MHz)。

  • 7
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值