找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1952|回复: 0
打印 上一主题 下一主题
收起左侧

STM32定时器输出比较。

[复制链接]
跳转到指定楼层
楼主
ID:723156 发表于 2020-4-18 21:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚来论坛学习STM32,这几天刚学习了定时器输出比较,调试多路PWM输出,频率占空比可调,用的是STM32F407.记录分享一下。

我用的定时器1  输出比较有4个通道 也有四种模式 STM32参考资料里说明了:

将为相应的输出引脚分配一个可编程值,该值由输出比较模式(TIMx_CCMRx 寄存器
中的 OCxM 位)和输出极性(TIMx_CCER 寄存器中的 CCxP 位)定义。匹配时,输
出引脚既可保持其电平 (OCXM=000),也可设置为有效电平 (OCXM=001)、无效电平
(OCXM=010) 或进行翻转 (OCxM=011)。


标准库里面是这样定义的:

#define TIM_OCMode_Timing                  ((uint16_t)0x0000)
#define TIM_OCMode_Active                  ((uint16_t)0x0010)
#define TIM_OCMode_Inactive                ((uint16_t)0x0020)
#define TIM_OCMode_Toggle                  ((uint16_t)0x0030)


我用到的是翻转模式,TIM_OCMode_Toggle,就是当比较通道里面的值和定时器里面的值相同时,比较通道的电平会翻转,只需要计算脉冲的周期,然后根据占空比计算出高电平的时间和低电平的时间,然后先将比较通道的值设置成高电平的时间,开启捕获比较中断,定时器的值和通道值相等时,进入中断,然后再把比较寄存器的值设为低电平的值,如此反复就可以实现多路PWM输出了。

调试过程中,我不想通道有脉冲输出时,我将比较通道的值设成0或者比定时器装载值大的数,还是会有频率很低脉冲输出。那我想输出频率为0的时候就把通道关闭。


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表