STM32 定时器输入捕获注意点

时间:2020-12-21 23:25:17

使用的是stm32f103rct6.

最近在写一个单定时器捕获4路pwm波的程序,那就必须在中断函数中改变检测边沿,通过手动记录捕获值来手动计算pwm的频率和脉宽值。

网上也有很多相关程序,但是我在写的时候却碰到了一个对于初学者来说非常不起眼的问题,导致结果怎么都不对:

如图中所示,我正在用TIM4_CH1,因为看见其他的结构体都是自己定义一边再使用的,于是我将‘TIM_TypeDef’这个结构体也自己定义了一个对象‘TIM4_Type’然后就发现结果不对。

后来仔细分析后发现这个结构体已在stm32f10x.h中有了对象实例:TIM4。并且这个TIM4所在的地方正是那些寄存器所处的地方,而我自己定义的对象‘TIM4_Type’是出于用户内存区,所以不论怎么操作‘TIM4_Type’都不能得到正确的结果。

后来去V3.5的官方手册看了下,发现那些‘xxx_TypeDef’的结构体都在stm32f10x.h有着自己的对象申明,都有自己特定的内存地址,也就是说这一类的结构体都不需要自己定义,而其他种类的由于没有特定的内存地址,故需要自己定义后才能操作。

STM32 定时器输入捕获注意点