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