历史上的今天
今天是:2025年01月04日(星期六)
2019年01月04日 | STM32——定时器TIME模块之输入捕获
2019-01-04 来源:eefocus
STM32的定时器模块有很强大的功能,除了普通的定时功能之外还可以进行输入捕获和输出比较(PWM),PWM已在别的文章中介绍过,现在介绍一下输入捕获。
在这里先说本人在测试时想到的两个疑问:
疑问1:STM32的同一个定时器是否能同时进行输入捕获和输出比较(PWM)?
疑问2:假设疑问1的答案是可以,那输入捕获的范围是不是受限制?
功能实现:
1、既然是输入捕获,肯定需要相关引脚对信号进行检测,所以需要查找开发手册和数据手册来确定是哪几个引脚,要用哪几个引脚,然后给予合适的配置(图1)。

2、要进行输入捕获实验,首先需要配置某个定时器的时基功能,这样我们才能根据这个时基计算我们的捕获信息;其次就是要配置输入(通道、边沿设置、映射、分频是几次时间、滤波是单次事件的采样次数);还要配置中断优先级,同时启动相关中断(图2);

3、为了解答前面的疑问,我们在同一个定时器里添加PWM输出,配置方式可以参考手册(图3);

4、使能定时器。
5、添加相关中断函数,这里设计到更新中断和捕获中断。需要说明的是,本实验的主要目的是为了测试捕获实验,通过不惑实验可以实现对固定频率的脉冲频率检测,或者脉宽检测等,本实验中刚好输出了PWM波,所以可以尝试的测测频率。思路是这样的:既然是固定频率和占空比的PWM波,那我可以连续测两次上升沿,将两次上身沿之间的计数器相减,然后根据定时器预分频值计算频率。由于在实际测试中存在所测频率很低,可能在两个上升沿之间定时器计数器更新了好几次,所以需要添加更新中断来记录这个更新(图4)。其中"Time2_Ch1_Cap_FreVal = TIM_GetCapture1(TIM2) + (Arr_Val + 1)*(Time2_Ch1_Cap_Sta&0x1F) - Time2_Ch1_Cap_Val;"是计数记录的最终结果值。

6、主函数中轮询判断是不是已经检测完成一次测试了,如果是,那清除掉相关屏蔽,然后利用"72000000/((Psc_Val+1)*(Time2_Ch1_Cap_FreVal))"
计算出频率。其中有一些小技巧,在对Time2_Ch1_Cap_Sta状态值清除的时候只清除0x80和0x20,是为了实现只有在两个上升沿之间进行更新记录(图5)。

疑问解答:
1、通过上面的介绍我们知道,可以用一个定时器实现既进行输入捕获,又进行PWM输出;
2、捕获的频率范围是否受限制,答案是不一定。以本实验为例,arr= 899,psc= 3;那么很明显,该实验中定时器的时钟频率是18M,所以当所测信号频率太高,在一个计数值跳变之间发生了两次上升沿,这种是测不出来的,或者测出来也是不准确的,也就是说当所测的信号频率越接近该定时器的时钟频率,误差值就越大,在实测的时候600K的频率就有点问题了(也可能是操作问题,该数据没有太大参考价值)。那么反过来,当所测频率很低,那测试结果怎么样,这个时候大家只要保证记录定时器更新的变量不要溢出,在计算过程中所有相关变量不要因为其他值的影响而不准确就不会有太大误差,在本例程中Time2_Ch1_Cap_Val定义为u8类型,可用的就低5位,最大值也就是31,计算可以知道能测的最低频率645.16多,所以如果要再低,就设置该变量为u16类型,把特殊比特位左移就行了(图6)。

输入捕获能需要结合自己的算法逻辑,可以实现不同的作用,需要我们结合自身项目开发。
史海拾趣
|
中科院计算机技术研究所1999年硕士生入学试题 编译原理与操作系统 一.(15分)有表达式如下:A+B*(C-D)**N (**为幂乘) (1)给出该表达式的逆波兰式表示(后缀式); (2)给出上述表达式的四元式和三元式序列. 二.(15分)有C程序如下: main() { printf("%d,%d,%d\\n",10); } (1)试着写出上述printf语句输出的 ...… 查看全部问答> |
|
最新08版PM4040FL的部分升级开关电源应用资料 [ 本帖最后由 yuandayuan6999 于 2010-6-1 18:35 编辑 ]… 查看全部问答> |
|
一个处理机,机器字长未定,有两个基址寄存器(20位),两个通用寄存器组,每组16个寄存器,用两种指令方案:一种指令字长16位,另一种指令字长24位,他们各有什么优缺点?如果选用24位的,基址寄存器还有保留的必要吗? 请高手帮忙解答一下,谢谢 ...… 查看全部问答> |
|
430的P6.0IO口是AD转换的0号通道,如果不接任何电路器件,那么这个IO口的模拟电压是多少?是0吗?我写了个单通道多次转换的代码,用A0通道转换,A0没有接任何东西,参考电压正电压用2.5V和1.5V转换得到的结果没有差别,负参考电压都是用AVss,菜鸟 ...… 查看全部问答> |
|
求问GrContextFontset包含在哪个头文件中啊,一直显示Undefined symbol GrContextFontset (referred from dddisplay.o).,无法正常引用该函数?还有哪位高人能讲一下 Not enough information to list image symbols的原因么?谢谢啦… 查看全部问答> |
|
MSP430G2 DCO Frequencies February 9, 2012, 10:01 pm MSP430 LaunchPad (MSP-EXP430G2) is compatible with many of the TI‘s Value Line series of microcontrollers. For these MCUs, both the Master clock (MCLK) and the sub-main clo ...… 查看全部问答> |
|
MSP430在程序初始化的时候,将P2IFG=0X00,但是仿真的时候却发现,P2IFG=0x38,也就是2.3,2.4,2.5一直的置位的,清除不了。 在程序使用的过程中,都会对中断标志位清0,但是3和5一直都清除不掉!求大侠帮助… 查看全部问答> |




