前言
客戶在使用 STM32H7 的時(shí)候,想要使用 DWT 計(jì)數(shù)來測量代碼執(zhí)行時(shí)間,評(píng)估執(zhí)行效率??蛻舭l(fā)現(xiàn)在重新上電或 reset 后,無法啟用 DWT 進(jìn)行計(jì)數(shù)。
調(diào)研
在 ARMv7-M 架構(gòu)中有個(gè) DEMCR 寄存器,這個(gè)寄存器可以控制 DWT 的使能。在power-on reset 后這個(gè)寄存器所有位的值都為 0。而當(dāng) bit[24]為 0 時(shí),DWT 和 ITM 模塊都是 disabled 的。所以為了啟用 DWT 模塊,必須將 DEMCR 的 bit[24]置為 1。
啟用 DWT 進(jìn)行計(jì)數(shù)
STM32H7 基于 Arm Cortex-M7 內(nèi)核,而 Cortex-M7 是 ARMv7-M 架構(gòu),所以 H7 在配置 DWT 模塊之前需要將 DEMCR 的 bit[24]置位。在基于 Cortex-M7 的芯片中,需要使用DWT-LAR 來解鎖 DWT(其他核可能不需要,應(yīng)具體分析),然后對 DWT_CTRL 進(jìn)行相應(yīng)使能即可。
小結(jié)
在使用 ARMv7-M 架構(gòu)的 STM32 時(shí),對 DWT 配置之前應(yīng)確保 DEMCR 中的 bit[24]已經(jīng)被配置(使能 DWT),然后才能使用 DWT。