STM32 定時(shí)器輸入捕獲注意點(diǎn)
使用的是stm32f103rct6.
最近在寫一個(gè)單定時(shí)器捕獲4路pwm波的程序,那就必須在中斷函數(shù)中改變檢測(cè)邊沿,通過手動(dòng)記錄捕獲值來手動(dòng)計(jì)算pwm的頻率和脈寬值。
網(wǎng)上也有很多相關(guān)程序,但是我在寫的時(shí)候卻碰到了一個(gè)對(duì)于初學(xué)者來說非常不起眼的問題,導(dǎo)致結(jié)果怎么都不對(duì):
如圖中所示,我正在用TIM4_CH1,因?yàn)榭匆娖渌慕Y(jié)構(gòu)體都是自己定義一邊再使用的,于是我將‘TIM_TypeDef’這個(gè)結(jié)構(gòu)體也自己定義了一個(gè)對(duì)象‘TIM4_Type’然后就發(fā)現(xiàn)結(jié)果不對(duì)。
后來仔細(xì)分析后發(fā)現(xiàn)這個(gè)結(jié)構(gòu)體已在stm32f10x.h中有了對(duì)象實(shí)例:TIM4。并且這個(gè)TIM4所在的地方正是那些寄存器所處的地方,而我自己定義的對(duì)象‘TIM4_Type’是出于用戶內(nèi)存區(qū),所以不論怎么操作‘TIM4_Type’都不能得到正確的結(jié)果。
后來去V3.5的官方手冊(cè)看了下,發(fā)現(xiàn)那些‘xxx_TypeDef’的結(jié)構(gòu)體都在stm32f10x.h有著自己的對(duì)象申明,都有自己特定的內(nèi)存地址,也就是說這一類的結(jié)構(gòu)體都不需要自己定義,而其他種類的由于沒有特定的內(nèi)存地址,故需要自己定義后才能操作。