無法連接STM32H7的解決方案

1.引言

重新編程燒錄了 STM32H7 目標芯片後,我就無法連接到該設備。選擇 “Connectunder reset”連接也沒有幫助。為什麼 ?


2.問題分析

通過日常客戶的技術支持整理,有兩種可能的根本原因導致這個問題。第一種可能性更大,與電源配置錯誤有關。其次是 Option Bytes 選項字節中的內核啟動配置相關。下面我們來具體地看一看。


2.1 可能原因一(電源配置錯誤)

這條原因適用於所有具有可配置內部 SMPS 降壓轉換器的 STM32H7 芯片。採用嵌入式降壓轉換器的 STM32H7 器件提供了不同的電源方案。代碼中供電電源的所選配置取決於外部電源電路組件的連接。此配置只能在上電複位後設置一次。選擇錯誤的配置會導致 MCU鎖定,也即是說 STM32H7 軟件代碼配置的供電模式與外部硬件供電連接的模式不一致不匹配的時候,會導致該芯片被 lock-up 鎖定。


軟件代碼中關於電源模式的配置可以通過 HAL 庫中的以下代碼行完成(通常放在SystemClock_Config 函數中) :
大多數的電路原理圖設計都會選擇 SMPS 作為直接 MCU VDD 的供電方式(如果該SMPS 模塊在 MCU 中可用),這裡就需要使用 PWR_DIRECT_SMPS_SUPPLY 參數替代PWR_LDO_SUPPLY 調用上述函數。但是在早期的 STM32CubeMX 生成的項目在默認情況下可能是 PWR_LDO_SUPPLY 電源選項。所以這兒導致了不一致。而在 CubeMX 5.4.0 及更高版本中提供了 PWR_DIRECT_SMPS_SUPPLY 電源做為默認選項。所以要注意配置的一致性。由於配置只能在上電重置後更改一次,因此問題可能會在下一次電源復位後出現。


下面是參考手冊中的圖表,顯示了電源的不同硬件配置:


MCU 內含保護機制,可防止將更高的電壓從內部 SMPS 導入到 VCORE(1.8 或 2.5V)。這樣可以防止由於配置錯誤而損壞 MCU。
由於電源通常在復位後立即配置,因此很難連接。


解決方案 1 是:

1、將復位按鈕保持在低位(通常為 NRST 引腳),然後接通將電路板電源;
2、保持復位按鈕低;
3、通過 STM32CubeProgrammer 連接。當程序開始連接時鬆開復位按鈕;
4、如果連接不上繼續執行上述步驟,如果連接上則執行批量擦除;
5、確保已修復項目中的電源配置,重新下載;


解決方案 2 是:

1、強制將 BOOT0 引腳保持高位,然後上電複位目標板。這需要將 BOOT_CM7_ADD1 設置為系統內存;
2、保持 BOOT0 引腳電平為高;
3、通過 STM32CubeProgrammer 連接。系統引導加載程序 System bootloader 不會使用自己用戶的電源配置;
4、執行批量擦除;
5、確保已修復項目中的電源配置,重新下載;


2.2 可能原因二(Cortex-M7 啟動已禁用)

這適用於所有具有雙核功能的 STM32H7 設備。
有時我們調整選項字節的配置使得只有 Cortex-M4 在復位後才啟動(BOOT_CM7/BCM7=0,BOOT_CM4/BCM4=1)。
此時你需要將調試器連接到訪問端口 AP=3(CortexM4),而不是訪問端口 AP=0(Cortex-M7)。
此處提醒,使用 STM32CubeProgrammer 進行連接時,注意保持 STM32CubeProgrammer 為最新版本。對於開發,建議保持兩個內核啟動配置,否則有些 IDE 工具可能無法與設備一起工作。

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論