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