重工电子论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 5040|回复: 2
打印 上一主题 下一主题

解决STM32使用中32位定时器不足的办法

[复制链接]

12

主题

66

帖子

538

积分

高级会员

Rank: 4

积分
538
QQ
跳转到指定楼层
楼主
发表于 2016-11-3 16:36:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PWM输出和输入捕获是STM32定时器的两个重要功能,然而如果使用16位定时器,则
1、f=SystemCoreClock/(arr+1),16位定时器情况下,arr最大为65535,则产生的PWM最小频率只能到SystemCoreClock/65536,即无法产生任意频率的PWM;

2、同理,在捕获PWM频率的情况下,由于定时器计数到65536就溢出,能够捕获的最大脉宽就受限(具体由时钟分频决定),要么无法捕获低频PWM,要么牺牲捕获高频的精度;

遗憾的是,stm32F1系列没有32位定时器,F0系列仅有一个32位定时器,那么在32位定时器不足的情况下怎么办?经过研究,找出了两种办法
1、把两个16位定时器级联成一个32位的定时器,stm32芯片本身提供了这个功能,通过配置定时器可以实现;
2、输入捕获的话还有一种替代的方案,另开一个16位定时器,对捕获定时器arr溢出进行计数。
实现方法:计数定时器中断溢出时间配置成和捕获定时器溢出相同的时间,在捕获中断中第一次检测到边沿的时候打开计数定时器(如果要捕获的脉宽时间过长,就在计数定时器中断中对计数变量自加),在第二次检测到边沿的时候关闭计数定时器。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

20

主题

74

帖子

382

积分

学生管理组

Rank: 8Rank: 8

积分
382
沙发
发表于 2016-11-14 20:30:00 | 只看该作者
可以构造一个数据结构,做时钟,用程序解决问题
回复 支持 反对

使用道具 举报

12

主题

66

帖子

538

积分

高级会员

Rank: 4

积分
538
QQ
板凳
 楼主| 发表于 2016-12-16 17:59:03 | 只看该作者
顾福源 发表于 2016-11-14 20:30
可以构造一个数据结构,做时钟,用程序解决问题

嗯,多种方法,都可以用
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|cqutlab ( 渝ICP备15004556号

GMT+8, 2024-5-5 04:53 , Processed in 0.361767 second(s), 30 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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