位與實戰(zhàn)要點)
1. H725在STM32家族里到底處在什么生態(tài)位1.1 550MHz的M7不是孤例它背后有四兄弟這塊 STM32H725ZGT6 上板之前我做 MCU 項目還停留在 CM4。Cortex-M7 在 550MHz 下的表現(xiàn)和 F4 完全是兩個物種。第一次跑通系統(tǒng)時鐘DWT 計數(shù)器刷得我有點恍惚——同樣是嵌入式人家 F407 拼了命才能跑到的 168MHzH725 起步就是 550MHz數(shù)據(jù)手冊直接標(biāo) 1033 DMIPS還帶雙精度 FPU、32KB I-Cache 和 32KB D-Cache。你要做音頻、電機(jī)控制、工業(yè)物聯(lián)網(wǎng)節(jié)點或者想在 MCU 上跑一點輕量算法它比很多 MPU 更順手。但很多剛接觸 H7 的人會先被型號繞暈。H723、H725、H733、H735頻率都是 550MHzFlash 都是 1MB怎么選我直接說結(jié)論H725/735 是帶安全特性的大 RAM 版本H723/733 是不帶加密引擎、RAM 更小的高性價比版本。型號最高頻率FlashSRAM安全側(cè)一句話定位STM32H723ZG550MHz1MB320KB無追求性能與成本平衡STM32H725ZG550MHz1MB564KB含128KB CCMTrustZone、AES/DES/3DES/HASH/RNG性能加安全一把抓STM32H733ZG550MHz1MB320KB無H723平臺的小改款STM32H735ZG550MHz1MB564KB有H725平臺的小改款這里有個容易被忽略的判斷維度H725 多出來的這 244KB RAM不是簡單加內(nèi)存那么樸素。它配合 TrustZone 和硬件密碼引擎意味著你可以把安全啟動、密鑰存儲、OTA 校驗這些活兒真正落在芯片內(nèi)部而不是靠外部加密芯片硬扛。做網(wǎng)關(guān)、光模塊管理、帶計費(fèi)的設(shè)備這條差異線非常重要。再往上一個維度說H725 和 H743/H750 的關(guān)系也要理清。H743 是 480MHz、2MB Flash、1MB RAM 的老旗艦有以太網(wǎng) MAC、有 LCD-TFT 控制器H725 反而是 550MHz、1MB Flash、564KB RAM沒有以太網(wǎng)也沒有 LTDC但多了 FMAC、CORDIC、內(nèi)部 PHY 的 USB HS。所以兩顆芯片的畫像完全不同H743 是大內(nèi)存大存儲外設(shè)齊全H725 是單核頻率拉滿DSP 和模擬外設(shè)堆料帶安全。選型時別再只看主頻。你要 HMI、顯示、網(wǎng)絡(luò)H743/H753 更合適你要算法算力、電機(jī) FOC、信號處理、USB HS、安全啟動H725 才是那把對的鑰匙。1.2 型號命名拆解ZGT6每個字母都是信息很多工程師拿到 STM32H725ZGT6 只關(guān)心它很猛但不太會看名字里的信息。ST 的命名是有規(guī)律的拆開看能避免買錯封裝、買錯 Flash 容量。字符含義在本型號中的解釋STM32品牌前綴ST 的 32 位 MCUH7產(chǎn)品系列Cortex-M7 高性能系列725具體產(chǎn)品線550MHz、帶安全、帶高性能模擬外設(shè)Z引腳數(shù)/封裝144腳LQFP144GFlash 容量1MBT封裝類型LQFP 低剖面封裝6溫度范圍-40℃ 到 85℃工業(yè)級Z、G、T、6 這四個尾綴外行人看著像亂碼其實對應(yīng)了采購最關(guān)心的四件事封裝是不是和 PCB 對得上、Flash 夠不夠、焊接工藝是否匹配、工作溫度能不能覆蓋你的現(xiàn)場環(huán)境。ZGT6 這個組合和 F407ZGT6、F103ZGT6 完全同構(gòu)所以如果你以前做 F407ZGT6 的項目PCB 的 LQFP144 封裝 footprint 可以直接參考只是電源設(shè)計要按 H7 的規(guī)矩重新來。另外還有一點采購層面的經(jīng)驗H725 目前實際貨源比 H723 少交期和價格波動都更大。如果只是前期驗證可以先用 Nucleo-H723ZG 或者便宜的 H723 樣品把軟件框架跑通因為核心、時鐘樹、絕大部分外設(shè)和 H725 一致后期換成 H725ZGT6 只需要補(bǔ) TrustZone 和加密相關(guān)代碼。2. 從內(nèi)核到存儲層次550MHz是怎么撐起來的2.1 M7的底氣流水線、雙精度FPU與CacheCortex-M7 和 Cortex-M4 的差距遠(yuǎn)不止頻率高了兩三倍。M7 是六級雙發(fā)射超標(biāo)量流水線帶分支預(yù)測很多簡單指令在一個周期內(nèi)可以同時發(fā)兩條。加上雙精度浮點單元很多之前必須在 DSP 或者 ARM9/MPU 上跑的數(shù)學(xué)運(yùn)算現(xiàn)在單片 H725 就能扛。但主頻上去了一個物理問題就會浮現(xiàn)Flash 的速度跟不上 CPU。550MHz 的 CPU 跑指令內(nèi)部 Flash 不可能每周期都給你喂一條。H7 的解決辦法是 ART 加速器加預(yù)取緩沖再配合 32KB I-Cache 和 32KB D-Cache。簡單說Cache 命中率高的時候Flash 執(zhí)行幾乎零等待命中率低的時候你就得眼睜睜看流水線空轉(zhuǎn)。所以 H725 的強(qiáng)有一個前提代碼和數(shù)據(jù)的布局要適配 Cache。后面我會專門用一個章節(jié)講怎么實測這個差距這里先記住一個結(jié)論——熱點代碼放 Flash 沒問題但一定要保證 I-Cache 開啟真正的時間關(guān)鍵函數(shù)放到緊耦合 RAM 里跑才是零等待。D-Cache 那邊也有個經(jīng)典坑DMA 和 CPU 共用數(shù)據(jù)區(qū)時如果 D-Cache 沒做 clean/invalidate你讀到的可能是緩存里的舊數(shù)據(jù)。很多 F4 老工程師剛遷 H7 時在這里翻車不是芯片不行是緩存一致性沒處理。2.2 存儲域與總線架構(gòu)H7的內(nèi)存布局比F4復(fù)雜太多H7 的內(nèi)存不是 F4 那種一塊 Flash 一塊 SRAM的簡單模型。它分 D1、D2、D3 三個電源域每個域有自己的時鐘和總線。H725 全芯片共有 564KB SRAM其中包含 128KB 的緊耦合 CCM 內(nèi)存。這塊 CCM 在 H7 家族里的定位類似 DTCM/ITCM是給 CPU 當(dāng)高速私家廚房用的CPU 從里面取指、讀寫數(shù)據(jù)都是零等待不走 AXI 總線不與外設(shè)爭帶寬。但代價是很多 DMA 外設(shè)摸不到這塊內(nèi)存。你在 H7 上做 DMA 傳輸buffer 一般放 AXI SRAM主內(nèi)存區(qū)別扔在 CCM 里。具體哪些外設(shè)能訪問哪些內(nèi)存老老實實查對應(yīng)參考手冊里的總線矩陣圖別想當(dāng)然。這個內(nèi)存分區(qū)的代價是同樣的代碼在 H7 上不像 F4 那樣隨便寫個裸機(jī)循環(huán)就到處都能跑出最大性能。工程上建議把內(nèi)存劃分為三類AXI SRAM給 DMA buffer、外設(shè)數(shù)據(jù)緩沖、大數(shù)組。CCM給中斷服務(wù)函數(shù)、時間關(guān)鍵循環(huán)、棧頂熱點。Flash一般業(yè)務(wù)代碼、不太熱的算法。2.3 時鐘樹與啟動流程550MHz需要親手喂出來H725 內(nèi)部 HSI 是 64MHzHSE 來自外部晶振550MHz 要靠 PLL 生成。開發(fā)板常見的配置是外接 25MHz 晶振然后 PLL 倍到 550MHz。CubeMX 生成的主頻配置大致長這樣void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct {0}; RCC_OscInitStruct.OscillatorType RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLM 5; // 25MHz / 5 5MHz RCC_OscInitStruct.PLL.PLLN 110; // 5MHz * 110 550MHz RCC_OscInitStruct.PLL.PLLP 1; // 550MHz / 1 550MHz SYSCLK RCC_OscInitStruct.PLL.PLLQ 6; RCC_OscInitStruct.PLL.PLLR 6; RCC_OscInitStruct.PLL.PLLVCOSEL RCC_PLL1VCORANGE_WIDE; if (HAL_RCC_OscConfig(RCC_OscInitStruct) ! HAL_OK) { Error_Handler(); } RCC_ClkInitStruct.ClockType RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider RCC_HCLK_DIV2; if (HAL_RCC_ClockConfig(RCC_ClkInitStruct, FLASH_LATENCY_2) ! HAL_OK) { Error_Handler(); } }這段代碼不是我手寫的推薦值就是 CubeMX 在 25MHz HSE 下算出來的標(biāo)準(zhǔn)組合。自己硬寫的話最容易被坑的是 Flash 等待周期和電壓檔位。H7 在 VOS0 或者對應(yīng)的電壓檔之下才能穩(wěn)定跑 550MHz你把主頻配上去但電壓檔沒提上來輕則性能打折重則直接 HardFault。啟動流程方面H725 和 F4 類似但也有新花樣。BOOT0/BOOT1 決定從內(nèi)部 Flash、系統(tǒng) Bootloader、還是外部存儲啟動。系統(tǒng) Bootloader 支持 UART、USB DFU、SPI、I2C 等燒錄方式量產(chǎn)階段很好用。H7 還多了 BSEL 引腳細(xì)分外部啟動設(shè)備可以從 OCTOSPI 外接 Flash 啟動這對 1MB 內(nèi)部 Flash 不夠用的場景非常關(guān)鍵。我從復(fù)位講一遍流程上電后芯片讀選項字節(jié)和啟動引腳電平確定啟動源然后把對應(yīng)存儲器的向量表映射到 0x00000000 這個別名區(qū)從復(fù)位向量開始執(zhí)行。理解這個流程你調(diào)試為什么沒跑起來會快很多。3. 真正拉開差距的并非跑分模擬、加速器與安全3.1 FMAC與CORDIC為DSP卸貨的兩顆專用引擎H723/H725 這一代第一次把 FMAC 和 CORDIC 放進(jìn)了 STM32。這倆不是營銷噱頭是真能幫 CPU 卸貨的硬件加速器。CORDIC坐標(biāo)旋轉(zhuǎn)數(shù)字計算機(jī)是硬件實現(xiàn)三角函數(shù)、反正切、平方根、除法這些數(shù)學(xué)運(yùn)算的。傳統(tǒng) M4 上算一個 atan2 要幾十上百個周期CORDIC 一個調(diào)用就能出結(jié)果。做 PMSM 永磁同步電機(jī)無感 FOCClarke 變換、Park 變換里全是 sin/cos/atan2把這部分扔給 CORDICM7 主核就能騰出余量去跑速度和電流環(huán)。音頻里做濾波器FMAC 專門跑 FIR/IIR 卷積硬件內(nèi)部流水線一拉CPU 不需要一條條乘加指令去填。CubeMX 里開好 CORDICHAL 調(diào)用大概是這種手感CORDIC_HandleTypeDef hcordic; int32_t angle_q31 0x10000000; // Q1.31定點角度 int32_t result[1]; hcordic.Instance CORDIC; HAL_CORDIC_Configure(hcordic, CORDIC_FUNCTION_COSINE, CORDIC_PRECISION_6CYCLES, CORDIC_SCALE_0, CORDIC_NBWRITE_1, CORDIC_NBREAD_1, CORDIC_INSIZE_32BITS, CORDIC_OUTSIZE_32BITS); if (HAL_CORDIC_Calculate(hcordic, angle_q31, result, 1, 1) ! HAL_OK) { Error_Handler(); } // result[0] 就是硬件算出來的余弦值字段名會隨 HAL 版本略有差異但思路一致配置功能模式、精度、輸入輸出格式調(diào) Calculate 一次拿結(jié)果。實際工程里建議把 CORDIC 和 FMAC 的驅(qū)動封裝成一層數(shù)學(xué)庫調(diào)用點全部走你自己的接口后續(xù)換 M4 或者 M33 方案只改底層實現(xiàn)上層算法紋絲不動。3.2 TrustZone與硬件密碼引擎H725比H723貴半檔的理由H725 相對 H723 多的那部分差價和 RAM很大程度買的是安全側(cè)。硬件 AES/DES/3DES、HASH 和真隨機(jī)數(shù)發(fā)生器都有了關(guān)鍵數(shù)據(jù)加密不用拿軟件硬肝。官方資料把 H725 歸為帶 TrustZone 安全擴(kuò)展的那一支做安全啟動、密鑰隔離比 H723 從容得多。TrustZone 對其實戰(zhàn)價值是把系統(tǒng)切成安全世界和非安全世界。你可以把密鑰、安全存儲、固件校驗放在安全側(cè)把應(yīng)用邏輯、UI、通信協(xié)議放非安全側(cè)。就算非安全側(cè)被攻擊者抓了漏洞拿到的也是一堆不透明的加密數(shù)據(jù)而不是直接扒出密鑰。對做智能門鎖、付費(fèi)計量、網(wǎng)關(guān)設(shè)備的團(tuán)隊這個隔離能力比單純加個 AES 重要得多。我在實際項目里走的流程是先用 STM32CubeProgrammer 做安全燒錄和密鑰注入再在安全側(cè)放一個最小化的引導(dǎo)加載器 安全服務(wù)非安全側(cè)跑主應(yīng)用。OTA 升級時固件包先通過安全側(cè)驗簽再解密寫入最后跳轉(zhuǎn)。大多數(shù)人第一次配 TrustZone 會被項目的分散加載文件分區(qū)布局搞暈我的建議是先把官方安全案例跑通一遍再改自己的分區(qū)不要一上來就自己畫地址。3.3 外設(shè)盤點USB HS內(nèi)置PHY、雙OCTOSPI、FDCAN這些真剛需除了 CPU 和安全引擎H725 的外設(shè)選型也很懂活USB 2.0 OTG HS 帶內(nèi)部 PHY這是 H723/H725 最大的亮點之一。老 H7 用 USB HS 要在外面再加一顆 USB PHY 芯片PCB 面積和 BOM 成本都上去。H725 直接省了這顆芯片做高速數(shù)據(jù)傳輸、UVC/USB 音頻類開發(fā)非常方便。雙 OCTOSPI支持單線、雙線、四線、八線模式支持 SDR/DDR 模式還能 memory-mapped 映射到 CPU 地址空間直接在外部 Flash 上 XIP 執(zhí)行指令。1MB 內(nèi)部 Flash 不夠用的外擴(kuò)主線就是這里。2 路 FDCANCAN-FD 已經(jīng)是工業(yè)和車載的主流通信了H725 原生支持不用外掛 CAN 控制器。ADC 12bit 最高 5Msps雙 ADC 雙 DAC電機(jī)控制、儲能逆變、光模塊監(jiān)測這類需要高速采集場景很受用。DCMI 攝像頭接口 多路 SAI/I2S視覺檢測、音頻流的輸入輸出都有落點。3 路 SDMMC、多路 UART/USART其中帶 ISO7816 的 UART 可以直接懟智能卡支付和認(rèn)證場景省一顆專用芯片。這些外設(shè)組合起來看H725 的畫像非常清晰不給花哨的顯示和網(wǎng)絡(luò)但把工業(yè)控制、數(shù)據(jù)采集、音頻和連接這些干活的外設(shè)配得很滿。光模塊里的 DDM 監(jiān)測需要對 Tx/Rx 光功率做 ADC 采樣、溫度校準(zhǔn)、I2C 管理順便還要跑個小型的標(biāo)定算法H725 一顆芯片全包我見過不少方案直接用 H723/H725 做這個。4. 點亮一顆H725ZGT6從原理圖到IDE的實戰(zhàn)細(xì)節(jié)4.1 上電與復(fù)位VCAP、VDDUSB和電壓檔位H7 的電源設(shè)計和 F1/F4 不太一樣。芯片內(nèi)部有 LDO外部要給穩(wěn)壓器的輸出引腳VDD 或者專門的 LDO 輸出腳配上容量足夠的低 ESR 陶瓷電容。很多第一次畫 H7 板子的人VCAP 電容漏焊、少焊或者離芯片太遠(yuǎn)結(jié)果就是上電燒錄正常、跑大負(fù)載時莫名復(fù)位。這類問題用示波器看 VCAP 引腳的紋波最直觀別一上來懷疑代碼。VDDUSB 也要單獨說一句。用 USB 外設(shè)的時候VDDUSB 要按照手冊供電否則 USB 枚舉不穩(wěn)定時好時壞。我見過有工程師省事直接把 VDDUSB 接主電源結(jié)果插拔幾次后識別時有時無最后發(fā)現(xiàn)是這個引腳的濾波沒做。VDDA 模擬電源要做到干凈ADC 采樣準(zhǔn)不準(zhǔn)很大程度取決于 VDDA 和 VREF 的走線和電容布局。另一個和性能直接相關(guān)的坑是電壓檔位。H7 有多個 VOS電壓調(diào)節(jié)器檔位550MHz 全速運(yùn)行需要把 VOS 推到對應(yīng)的高檔。CubeMX 里配置時鐘時它會聯(lián)動設(shè)置 VOS但你手動改代碼時很容易漏。漏掉的結(jié)果是芯片能跑但主頻上不去或者高頻執(zhí)行時出錯。4.2 最小系統(tǒng)與CubeMX配置一次點亮550MHz從零開始點一顆 H725ZGT6我的步驟是這樣確認(rèn)最小系統(tǒng)VDD 3.3V、VCAP 電容、VDDA 模擬電源、VREF、復(fù)位電路、SWD 四根線SWDIO/SWCLK/GND/3.3V、一個外部晶振或者直接用 HSI。打開 STM32CubeMX選 STM32H725ZGT6。配置 RCCHSE 選擇外部晶振頻率填 25MHz。在 Clock Configuration 頁面點一下 SYSCLK填 550讓工具自動算 PLL。它通常會給出 PLLM5、PLLN110、PLLP1。調(diào)試接口選 Serial Wire避免 SWD 引腳被占用。生成 STM32CubeIDE 工程編譯下載點燈??雌饋砗?F4 差不多但第 4 步之后一定去生成的 SystemClock_Config 里檢查 VOS 設(shè)置和 Flash 等待周期確認(rèn) CubeMX 用的是高頻對應(yīng)檔位。這顆芯片不會因為你少寫一行就罷工但會在你追查 bug 的時候突然抽風(fēng)。4.3 開發(fā)環(huán)境雜談CubeIDE、VS Code與大模型輔助STM32CubeIDE 是官方 IDE開箱即用HAL、LL 庫都給你配好。但我身邊越來越多工程師換 VS Code CMake arm-none-eabi-gcc 的路線。CubeMX 本身支持生成 CMake 工程工程結(jié)構(gòu)干凈Git 友好CI 也能直接編譯。這兩年還有一個明顯趨勢用 VS Code 集成 Claude Code、GitHub Copilot 這類 AI 工具寫嵌入式代碼。實測下來讓它幫你搭 HAL 外設(shè)初始化、寫寄存器注釋、生成中斷處理的樣板代碼效率提升很明顯。但有一條底線AI 生成的外設(shè)配置必須對著參考手冊和 CubeMX 雙向核對。尤其 PLL 參數(shù)、Flash 等待、DMA 請求映射這些容易看起來對實際錯的地方AI 的幻覺概率并不低。我的習(xí)慣是讓 AI 先出代碼然后我在 CubeMX 里重新走一遍時鐘配置兩邊對不上就直接改掉。工具是加速器不是裁判。5. 別只盯跑分實測一次Cache與內(nèi)存延遲5.1 用DWT周期計數(shù)器實測Flash、SRAM、CCM的差距我建議每個拿到 H725 的人上電第一件事不是跑 CoreMark而是用 DWT 周期計數(shù)器測一下內(nèi)存在不同位置的執(zhí)行速度。代碼很簡單/* 使能DWT周期計數(shù)器 */ CoreDebug-DEMCR | CoreDebug_DEMCR_TRCENA_Msk; DWT-CTRL | DWT_CTRL_CYCCNTENA_Msk; DWT-CYCCNT 0; uint32_t start DWT-CYCCNT; hot_function(); // 同一個函數(shù)分別放在Flash、AXI SRAM、CCM uint32_t cycles DWT-CYCCNT - start;我在 H725 上的實測感受是一個純計算型函數(shù)放在 Flash 靠 I-Cache 跑表現(xiàn)還不錯但如果你把 Cache 關(guān)了Flash 等待狀態(tài)馬上原形畢露。把這個函數(shù)搬到 CCM再把 I-Cache 打開同樣的邏輯周期數(shù)能差出幾倍。這不是玄學(xué)而是 M7 的取指帶寬和等待狀態(tài)在硬件層面的真實差異。所以工程上有個硬建議任何對時間敏感的中斷服務(wù)函數(shù)、實時控制環(huán)、FFT 蝶形運(yùn)算優(yōu)先放到緊耦合內(nèi)存或者至少鎖定到 Cache 里。在分散加載文件里給這些函數(shù)單獨分一塊區(qū)域標(biāo)注屬性鏈接器會在啟動時搬到對應(yīng)地址。配置學(xué)習(xí)成本不高收益是確定性的。5.2 三個反直覺的慢錯用內(nèi)存、忽視緩存一致性、DMA踩CCM測完延遲你會遇到更多看著該快卻慢的情況我總結(jié)三個最常見的第一個是熱點數(shù)據(jù)放在了普通 SRAM頻繁被 DMA 和其他外設(shè)搶占總線帶寬。H7 的 AXI 總線矩陣比 F4 好但不是沒有仲裁延遲。DMA 大量搬運(yùn)時CPU 取指會有等待。正確做法是把數(shù)據(jù)分區(qū)讓大塊 DMA 走 AXICPU 熱點走 CCM。第二個是緩存一致性沒處理。DMA 接收數(shù)據(jù)到內(nèi)存CPU 直接從數(shù)組讀如果 D-Cache 里殘留舊數(shù)據(jù)你讀的是舊內(nèi)容。用 D-Cache 的 H7 項目DMA 接收前要 invalidate 該區(qū)域DMA 發(fā)送前要 clean 該區(qū)域。HAL 提供了HAL_DCACHE_Invalidate/HAL_DCACHE_Clean這類接口用之前想想放到調(diào)用鏈的哪個位置。第三個是DMA 摸不到 CCM。很多從 F4 遷移的人習(xí)慣把重要 buffer 放到 CCMF4 上 CCM 就有 DMA 訪問限制但 H7 的緊耦合內(nèi)存同樣不走通用 DMA 通路。你如果把 DMA buffer 放到 CCMDMA 外設(shè)根本寫不進(jìn)去表現(xiàn)是串口收不到數(shù)據(jù)、ADC 緩沖全零。排查這個問題的思路很簡單把 buffer 移到 AXI SRAM 再試立刻見分曉。6. 什么時候別選H725以及1MB不夠用怎么辦6.1 沒有以太網(wǎng)也沒有LTDC這兩處缺失要想清楚H725 強(qiáng)但沒有以太網(wǎng) MAC、沒有 LCD-TFT 控制器這兩個缺失在很多項目里是硬傷。要做聯(lián)網(wǎng)網(wǎng)關(guān)、協(xié)議轉(zhuǎn)換器H725 本身沒有 Ethernet你得外掛 SPI 轉(zhuǎn)以太網(wǎng)芯片如 W5500/CH395或者用 USB 轉(zhuǎn)以太網(wǎng)。外掛方案不是不行但吞吐和驅(qū)動復(fù)雜度都不如原生 MAC 來得痛快。要做 HMI 界面沒 LTDC 意味著只能靠 SPI 屏或者 RGB 屏外加控制器刷新性能和大分辨率下會吃虧。所以選型階段必須做反向選型把項目的顯示、網(wǎng)絡(luò)、存儲需求列出來如果這兩項里中了硬需求H743/H753 或者 H7A3 這類帶 LTDC/以太網(wǎng)的產(chǎn)品更合適。H725 的正確用法是當(dāng)高性能單核算力 豐富工業(yè)外設(shè) 安全來用不是當(dāng)萬金油。6.2 1MB Flash不夠用的外擴(kuò)方案OCTOSPI XIP路線1MB 內(nèi)部 Flash 是 H725 的一個上限但雙 OCTOSPI 給了很漂亮的解法外部接一顆 8 線 NOR Flash用 memory-mapped 方式映射到 CPU 地址空間直接在上面 XIP 執(zhí)行代碼。配合 H7 的 BSEL 啟動引腳甚至可以讓 CPU 從外部 Flash 啟動實現(xiàn)小內(nèi)部 Flash 大外部存儲的組合。我推薦的分工策略是啟動代碼、升級引導(dǎo)、關(guān)鍵驅(qū)動放內(nèi)部 Flash算法庫、字庫、用戶資源、不常改的模塊放外部 OCTOSPI Flash。這樣既享受從內(nèi)部 Flash 啟動的可靠性又能突破 1MB 的上限。需要注意的地方有兩點一是外部 Flash 的 wait state 和讀模式SDR/DDR要和 OCTOSPI 的頻率匹配好二是 XIP 執(zhí)行時要確保 I-Cache 打開否則外部存儲延遲比內(nèi)部 Flash 高不少跑起來會明顯肉。編程外部 Flash 時先退出 memory-mapped 模式擦寫完再重新映射不要邊執(zhí)行邊擦寫同一片地址。另外加外部 Flash 也要考慮代碼交付和燒錄。STM32CubeProgrammer 支持外部 Flash 的燒錄算法可以把整個鏡像一起燒進(jìn)去。量產(chǎn)的時候先燒外部 Flash 里的資源和算法再燒內(nèi)部 Flash 的引導(dǎo)程序順序反了會多踩不少坑。就我個人這幾塊 H725 板子調(diào)下來的體會這芯片屬于前期硬件設(shè)計要多花心思、后期軟件收益拉滿的類型。電源、電容、電壓檔位這些底子打好了550MHz 的 M7 能給你相當(dāng)兇的算力底子沒打好再強(qiáng)的核也會被一句莫名復(fù)位困住一整個晚上。如果你正在評估一顆 MCU 能不能扛住下一波算法負(fù)載H725ZGT6 值得放上你的測試臺把本章里那三個內(nèi)存區(qū)都實測一遍用數(shù)字說話比看多少宣傳頁都有用。