重工电子论坛

标题: 解决STM32使用中32位定时器不足的办法 [打印本页]

作者: 张金权-11级电子    时间: 2016-11-3 16:36
标题: 解决STM32使用中32位定时器不足的办法
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溢出进行计数。
实现方法:计数定时器中断溢出时间配置成和捕获定时器溢出相同的时间,在捕获中断中第一次检测到边沿的时候打开计数定时器(如果要捕获的脉宽时间过长,就在计数定时器中断中对计数变量自加),在第二次检测到边沿的时候关闭计数定时器。
作者: 顾福源    时间: 2016-11-14 20:30
可以构造一个数据结构,做时钟,用程序解决问题
作者: 张金权-11级电子    时间: 2016-12-16 17:59
顾福源 发表于 2016-11-14 20:30
可以构造一个数据结构,做时钟,用程序解决问题

嗯,多种方法,都可以用




欢迎光临 重工电子论坛 (http://www.cqutlab.cn/) Powered by Discuz! X3.1