前言
有客戶反饋,在使用 STM32H5 讀取溫度傳感器校準(zhǔn)值地址時(shí),會(huì)進(jìn)入 HardFault,而在其他系列芯片中讀取這個(gè)參數(shù)時(shí)并沒有此現(xiàn)象。在 NUCLEO-H563ZI 開發(fā)板上去復(fù)現(xiàn)此問題,發(fā)現(xiàn)只有開啟 ICACHE 后才會(huì)復(fù)現(xiàn),初步驗(yàn)證說明進(jìn)入 HardFault 與 ICACHE 相關(guān),如果直接關(guān)閉ICACHE 雖然可以解決進(jìn)入 HardFault 的問題,但勢必會(huì)影響代碼執(zhí)行的效率。所以,我們希望能找到一種更好的方式去處理此問題。
問題分析
經(jīng) Datasheet 查詢,兩個(gè)溫度傳感器校準(zhǔn)值 TS_CAL1 和 TS_CAL2 的地址分別為 0x08FFF814-0x08FF F815 和 0x08FF F818-0x08FF F819。
解決方法
經(jīng)上述分析后,我們只需要把[0x08FF F000-0x08FF FFFF]這段地址區(qū)域設(shè)置為 nonecacheable,通過 CubeMX 進(jìn)行配置。
總結(jié)
溫度傳感器校準(zhǔn)值及 UID 等一些信息在 H5 中屬于只讀區(qū)域,而這個(gè)區(qū)域在 AHB 訪問時(shí),默認(rèn)內(nèi)存屬性為 cacheable,需要通過 MPU 把這些區(qū)域設(shè)置為 none-cacheable,才能正常訪問。每個(gè)系列的芯片架構(gòu)都或多或少有差別,當(dāng)按以往經(jīng)驗(yàn)操作不能實(shí)現(xiàn)功能時(shí),不妨對(duì)照相應(yīng)芯片的數(shù)據(jù)手冊(cè)、參考手冊(cè)、應(yīng)用筆記、甚至勘誤手冊(cè),也許就能發(fā)現(xiàn)問題所在。