Linux 内核中的 STM32H743 支持解析:Cortex-M7 高主频 MCU 的硬件特性、设备树与板级移植
2026/9/12 3:19:01 网站建设 项目流程

Linux 内核中的 STM32H743 支持解析:Cortex-M7 高主频 MCU 的硬件特性、设备树与板级移植

【免费下载链接】linuxLinux kernel source tree项目地址: https://gitcode.com/GitHub_Trending/li/linux

本文基于 Linux 内核源码树中的 STM32H743 Overview 文档,结合 stm32h743.dtsi 设备树、mach-stm32 平台代码与 stm32_defconfig 默认配置,系统梳理 STM32H743 这颗面向高性能嵌入式应用的 Cortex-M7 MCU 的硬件能力、Linux 内核对它的软件支持方式,以及如何基于设备树完成板级移植与内核构建。读完本文,你将理解 STM32H743 在 Linux 生态中的定位,并能独立解读其 SoC 级与板级设备树、定位外设使能方法。

STM32H743 硬件特性总览

STM32H743 是 STMicroelectronics 推出的一款面向各类高性能应用的 Cortex-M7 微控制器(MCU)。内核文档将其核心特征概括如下:

  • Cortex-M7 内核,最高运行频率400MHz
  • 2MB 内部 Flash,1MB 内部 RAM
  • FMC 控制器,可连接 SDRAM、NOR 与 NAND 存储器;
  • 双模式 QSPI(Dual mode QSPI);
  • SD/MMC/SDIO 支持
  • 以太网控制器
  • USB OTG FS 与 HS 控制器
  • I2C、SPI、CAN 总线支持
  • 多路 16 位与 32 位通用定时器
  • 串行音频接口(SAI)
  • LCD 控制器
  • HDMI-CEC
  • SPDIFRX
  • DFSDM(数字滤波 Sigma-Delta 调制器)。

从内核视角看,这颗芯片最突出的特点是"高主频 + 大容量存储接口":400MHz 的 Cortex-M7 配合 2MB Flash 与 1MB RAM,足以支撑图像处理、音频编解码、工业控制网关等复杂应用;而 FMC、双模式 QSPI、SD/MMC 等外部存储接口又为大数据量应用提供了灵活的扩展路径。

值得注意的是,同一系列还存在规格不同的姊妹型号 STM32H750(见 stm32h750-overview.rst):其内核运行频率提升至 480MHz,但内部 Flash 缩减为 128KB(其余外设与 H743 基本一致),二者共享同一套设备树基座,板级文件通过覆盖节点来区分。

Linux 内核对 STM32H743 的平台支持

STM32 家族(包括 Cortex-A 微处理器 MPU 与 Cortex-M 微控制器 MCU)在 ARM Linux 中由STM32平台统一承载,平台代码集中在 arch/arm/mach-stm32。

其中 board-dt.c 是支持 Flattened Device Tree(扁平设备树)的通用板级文件,只要板卡的compatible字符串命中其stm32_compat列表即可引导。该列表明确包含了"st,stm32h743"

static const char *const stm32_compat[] __initconst = { "st,stm32f429", "st,stm32f469", "st,stm32f746", "st,stm32f769", "st,stm32h743", "st,stm32h747", "st,stm32h750", "st,stm32mp131", "st,stm32mp133", "st,stm32mp135", "st,stm32mp151", "st,stm32mp157", NULL };

这意味着 H743 的移植完全走设备树驱动模型:DT_MACHINE_START(STM32DT, ...)定义了通用的 DT machine 描述,配合CONFIG_ARM_SINGLE_ARMV7M时通过armv7m_restart提供无 MMU 的 Cortex-M 重启路径。从源码结构看,STM32H743 属于 MCU(Cortex-M7,无 MMU)阵营,因此在总览文档中,构建 MCU 内核使用make stm32_defconfig,而非 MPU 的multi_v7_defconfig

从 SoC 设备树看 STM32H743 外设布局

Linux 通过 arch/arm/boot/dts/st/stm32h743.dtsi 描述 H743 的 SoC 级外设资源。该文件以#include "armv7-m.dtsi"引入 Cortex-M 基础节点,并引用 include/dt-bindings/clock/stm32h7-clks.h 与 include/dt-bindings/mfd/stm32h7-rcc.h 中的时钟/复位宏。逐个节点对照官方文档中的特性清单,可以一一印证:

时钟与复位

  • clk_hseclk_lseclk_i2s三个fixed-clock作为外部时钟源,频率由板级文件覆盖(如 EVAL 板将 HSE 配置为 25MHz);
  • rcc: reset-clock-controller@58024400compatible = "st,stm32h743-rcc", "st,stm32-rcc"提供#clock-cells = <1>#reset-cells = <1>,驱动整个 SoC 的时钟树与复位管理;
  • pwrcfg: power-config@58024800st,stm32-power-config)承担电源域配置,rtc节点通过st,syscfg = <&pwrcfg 0x00 0x100>与之协作。

存储与外部存储器接口

  • sdmmc1: mmc@52007000sdmmc2: mmc@48022400:使用arm,pl18x/arm,primecell兼容串,声明cap-sd-highspeedcap-mmc-highspeed并将max-frequency设为 120MHz,对应文档中的 SD/MMC/SDIO 支持;
  • FMC(SDRAM/NOR/NAND)与双模式 QSPI 由对应驱动在板级配置中使能,为大数据量存储与"XIP 执行"提供硬件基础。

网络与 USB

  • mac: ethernet@40028000:兼容"st,stm32-dwmac", "snps,dwmac-4.10a",即 DesignWare 以太网 MAC,时钟名stmmaceth/mac-clk-tx/mac-clk-rx对应 ETH1MAC/ETH1TX/ETH1RX,并通过st,syscon = <&syscfg 0x4>关联 SYSCFG 寄存器;
  • usbotg_hs: usb@40040000st,stm32f7-hsotg)与usbotg_fs: usb@40080000st,stm32f4x9-fsotg)分别对应 HS 与 FS 两套 OTG 控制器,HS 节点还配置了g-rx-fifo-sizeg-np-tx-fifo-sizeg-tx-fifo-size等 FIFO 参数。

总线外设

  • SPI:spi1~spi6,兼容"st,stm32h7-spi",分布于 APB1/APB2/APB4 总线域,均带resets属性;
  • I2C:i2c1~i2c4,兼容"st,stm32f7-i2c"
  • U(S)ART:usart1/usart2/usart3/uart4/uart8,兼容"st,stm32h7-uart"
  • 定时器:timer5(通用定时器)与lptimer1~lptimer5(低功耗定时器,各自带st,stm32-pwm-lpst,stm32-lptimer-triggerst,stm32-lptimer-counter子节点);
  • 转换器:dacdac1/dac2)、adc_12adc1/adc2)与adc_3adc3),ADC 采用st,stm32h7-adc-core+st,stm32h7-adc的分层描述。

DMA 与显示

  • dma1dma2st,stm32-dma,各 8 通道,dma-requests = <8>)与dmamux1st,stm32h7-dmamux,16 通道、128 请求、可路由至两个 DMA 主机),构成灵活的 DMA 请求路由矩阵;
  • mdma1: dma-controller@52000000st,stm32h7-mdma)提供 16 通道、32 请求的主 DMA,用于大块内存搬运;
  • ltdc: display-controller@50001000st,stm32-ltdc)即 LCD 控制器(TFT-LCD Display Controller),带两个中断号并关联LTDC_CK时钟,对应文档中的 LCD 控制器特性。

GPIO 与中断

  • pinctrl: pinctrl@58020000st,stm32h743-pinctrl)下挂gpioa~gpiok共 11 个 GPIO 组:GPIOA~GPIOJ 各 16 脚、GPIOK 8 脚,每个 bank 均声明gpio-rangesngpios与 bank 名,并通过extist,stm32h7-exti,中断控制器)支持引脚中断;
  • systick被配置为clock-frequency = <250000000>(250MHz)并置为status = "okay",作为 Cortex-M7 系统节拍时钟。

可以看到,dtsi 中绝大部分外设节点默认status = "disabled",只有板级设备树显式置为"okay"才会真正使能——这是 Linux 设备树"描述硬件、板级激活"的经典分层设计。

板级移植实例:EVAL 与 Discovery

仓库在 arch/arm/boot/dts/st 目录提供了两块官方评估板的完整设备树:

STM32H743i-EVAL(stm32h743i-eval.dts)

  • model = "STMicroelectronics STM32H743i-EVAL board"compatible = "st,stm32h743i-eval", "st,stm32h743"
  • chosen指定stdout-path = "serial0:115200n8"aliasesserial0指向usart1,即调试串口为 USART1、波特率 115200、8N1;
  • 内存节点memory@d0000000声明 32MB(0x2000000)外部存储器区;
  • LED 采用gpio-leds:绿色心跳灯接gpiof 10(低有效,linux,default-trigger = "heartbeat"),红色灯接gpioa 4
  • &clk_hse覆盖为clock-frequency = <25000000>(板载 25MHz 晶振);
  • &i2c1使能并配置i2c-scl-rising-time-ns = <185>i2c-scl-falling-time-ns = <20>
  • &mac预留 RMII 模式 PHY 描述(当前status = "disabled");
  • &sdmmc1使能 4 线 SD 卡,带broken-cdst,sig-dirst,neg-edge等 ST 私有属性与vmmc-supply(2.9V);
  • &usbotg_hs使能并配置dr_mode = "otg",关联usb-nop-xceiv无源 PHY;
  • &adc_12使能并开放adc1通道 0(板载电位器采样)。

STM32H743i-Discovery(stm32h743i-disco.dts)

  • compatible = "st,stm32h743i-disco", "st,stm32h743",调试串口改用usart2
  • 4 颗板载 LED(绿/橙/红/蓝)挂在gpioi 12~15,绿色 LED 同样作为心跳触发;
  • 使能sdmmc1(4 线、broken-cdst,neg-edgevmmc-supply3.3V);
  • 使能usart2,并预留 RMII 以太网 PHY 节点。

两块板共用stm32h743.dtsi作为 SoC 基座,通过#include "stm32h743.dtsi"+#include "stm32h7-pinctrl.dtsi"组合,再以&node覆盖语法激活各自外设——这正是将"芯片级描述"与"板级差异"解耦的标准做法,读者在移植自研 H743 板卡时,照此模式新建一个 dts 并覆盖所需节点即可。

内核构建与启动配置

按总览文档的指引,针对 MCU(含 STM32H743)构建内核只需:

make stm32_defconfig

arch/arm/configs/stm32_defconfig 中与 H743 直接相关的关键配置包括:

  • CONFIG_ARCH_STM32=y:启用 STM32 平台(对应 arch/arm/mach-stm32/Kconfig);
  • CONFIG_CPU_V7M_NUM_IRQ=240:Cortex-M7 的 240 个中断号;
  • CONFIG_SET_MEM_PARAM=yCONFIG_DRAM_BASE=0x90000000:以参数方式指定内存基址(H743 无 MMU,内存映射由硬件决定);
  • CONFIG_XIP_KERNEL=yCONFIG_XIP_PHYS_ADDR=0x08008000:支持XIP(eXecute In Place,就地执行)——内核直接从内部 Flash(0x08000000 段偏移 0x8000 处)运行,无需先拷贝到 RAM,这正契合 H743 2MB 内部 Flash 的容量优势;
  • # CONFIG_MMU is not set:Cortex-M 内核无 MMU;
  • CONFIG_SERIAL_STM32=yCONFIG_SERIAL_STM32_CONSOLE=y:STM32 USART 串口驱动与控制台;
  • CONFIG_I2C_STM32F7=y:F7/H7 系 I2C 驱动(H743 的 i2c1~i2c4 兼容st,stm32f7-i2c);
  • CONFIG_MMC=yCONFIG_MMC_ARMMMCI=y:MMC 子系统与 PrimeCell PL18x 驱动(对应 sdmmc1/sdmmc2);
  • CONFIG_LEDS_GPIO=yCONFIG_LEDS_TRIGGER_HEARTBEAT=y:GPIO LED 与心跳触发(两块官方板均使用)。

启动时,板载设备树通过chosen节点的bootargs(如root=/dev/ram)与stdout-pathserial0:115200n8)完成内核参数与控制台初始化;对无 MMU 的 MCU 内核,设备树描述的外设会由各自驱动在probe阶段按status属性决定是否注册。

小结与延伸阅读

综上所述,STM32H743 在 Linux 内核中的支持是一套完整的"文档 + 平台代码 + 设备树"体系:内核文档给出硬件特性基线,board-dt.c 提供通用 DT machine,stm32h743.dtsi 描述全部 SoC 外设,而 stm32h743i-eval.dts 与 stm32h743i-disco.dts 给出可直接编译运行的官方板级范例。芯片的数据手册与参考手册由 ST 官方公开提供(原文档已在 Resources 一节给出 ST 官网入口),内核侧的行为细节则以本仓库源码为准。

如需进一步深入,可继续阅读同目录下的 STM32 平台总览(MCU/MPU 构建方式与平台布局)、stm32h750-overview.rst(H750 变体差异),以及 DMA 相关的 stm32-dma-mdma-chaining.rst;H743 的时钟/复位宏定义可查阅 include/dt-bindings/clock/stm32h7-clks.h 与 include/dt-bindings/mfd/stm32h7-rcc.h。

【免费下载链接】linuxLinux kernel source tree项目地址: https://gitcode.com/GitHub_Trending/li/linux

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询