STM32H7 輸入捕獲(cubemax和hal)

2021-10-09 15:58:36 字數 1489 閱讀 3054

簡述:使用tim2捕獲pwm

ide: keilv5.27

firmware package:stm32cube fw_h7 v1.8.0

晶元:stm32h750vbt6

開啟tim2輸入捕獲

配置psc為200-1,這裡主要是方便計算,計時器加一正好是1微妙。我配置的h750的主頻為400m,apb1時鐘為200m,並且我是用來測量50hz的矩形波。所以psc為200-1已經足夠。arr就取最大值即可。

通道一和二都配置成捕獲上公升沿。

管腳配置成上拉或者下拉。在無訊號輸入的時候,保持穩定的電平。

hal_tim_ic_start_it

(&htim2,tim_channel_1)

;hal_tim_ic_start_it

(&htim2,tim_channel_2)

;//開啟tim2兩通道的輸入捕獲

void

hal_tim_ic_capturecallback

(tim_handletypedef *htim)

if(htim->instance == tim4)

}void

tim2_capturechannel1_callback

(void

)}

#define __hal_tim_set_capturepolarity(__handle__, __channel__, __polarity__)    \

dowhile(0)

這一句話__hal_tim_set_capturepolarity中就包含了清除原來通道的極性和設定型通道的極性。所以直接使用即可。

__hal_tim_getcounter(&htim2)

__hal_tim_getcompare(&htim2,tim_channel_1)

這兩句話 第一句是用來獲得計數器的值,乙個是用來獲得ccr1的值。ccr1是通道一的捕獲/比較暫存器。ccr1包含了由上一次輸入捕獲事件傳輸的計數器值。所以在此中斷裡兩句話的作用差不多。如果不在中斷內呼叫,獲得ccr1的值即可。由於我要在tim4的中斷中取獲得tim2的計數值,所以都使用了__hal_tim_getcounter。

實驗結果:50hz方波捕獲到的週期為20000us基本不變。

stm32h7記憶體分配 談談H7的記憶體分配以及總結

首先呢,大家在使用h743 的時候,在keil或者iar中,有乙個記憶體的勾選,如圖1,irom1表示flash的記憶體位址,h743是2m,所以,大小自然是2m,起始位址可以在參考手冊中找到,如圖2,這個比較容易理解,程式就是從這開始執行。其次,是ram,743內部有1m,那麼這1m怎麼分的呢,直...

STM32H7系列使用DMA不能傳輸資料的問題

我使用dma進行spi傳輸時發現無資料,還好有個邏輯分析儀,不然有沒有訊號都不知道 這是匯流排訪問許可權的圖。表示不能訪問。d 表示直接訪問。其它的都是間接訪問。發現dma1只有itcm和dtcm不能訪問,問題就出在這。有句 tcm 介面上的 dtcm ram 對映到位址 0x2000 0000,可...

stm32 輸入捕獲

根據定時器的計數頻率,我們就可以算出t1 t2的時間,從而得到高電平脈寬 計算公式 n arr ccrx2首先設定定時器通道為上公升沿捕獲,這樣在t1時刻,就會捕獲到當前的cnt值,然後立即清零cnt,並設定定時器通道為下降沿捕獲,這樣到t2時刻,又會發生捕獲事件,得到此時的cnt值,記為ccrx2...