重工电子论坛
标题:
解决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://cqutlab.cn/)
Powered by Discuz! X3.1