STM32 定時器輸入捕獲注意點

使用的是stm32f103rct6.

最近在寫一個單定時器捕獲4路pwm波的程序,那就必須在中斷函數中改變檢測邊沿,通過手動記錄捕獲值來手動計算pwm的頻率和脈寬值。

網上也有很多相關程序,但是我在寫的時候卻碰到了一個對於初學者來說非常不起眼的問題,導致結果怎麼都不對:

如圖中所示,我正在用TIM4_CH1,因爲看見其他的結構體都是自己定義一邊再使用的,於是我將‘TIM_TypeDef’這個結構體也自己定義了一個對象‘TIM4_Type’然後就發現結果不對。

後來仔細分析後發現這個結構體已在stm32f10x.h中有了對象實例:TIM4。並且這個TIM4所在的地方正是那些寄存器所處的地方,而我自己定義的對象‘TIM4_Type’是出於用戶內存區,所以不論怎麼操作‘TIM4_Type’都不能得到正確的結果。

後來去V3.5的官方手冊看了下,發現那些‘xxx_TypeDef’的結構體都在stm32f10x.h有着自己的對象申明,都有自己特定的內存地址,也就是說這一類的結構體都不需要自己定義,而其他種類的由於沒有特定的內存地址,故需要自己定義後才能操作。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章