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