尧图精选

Linux 内核中的 STM32F429 平台支持解析:Cortex-M4 特性、设备树与驱动栈

🕒 发布时间:2026/9/12 13:52:41 📁 来源:尧图网络
Linux 内核中的 STM32F429 平台支持解析Cortex-M4 特性、设备树与驱动栈【免费下载链接】linuxLinux kernel source tree项目地址: https://gitcode.com/GitHub_Trending/li/linuxSTM32F429 是意法半导体STMicroelectronics面向工业、物联网与消费类应用推出的 Cortex-M4 微控制器本文以其在内核文档 Documentation/arch/arm/stm32/stm32f429-overview.rst 中的官方概述为骨架结合当前 Linux 内核源码树arch/arm、drivers、Documentation中的平台代码、设备树与默认内核配置全面解析 STM32F429 在 Linux 中的硬件能力、内核适配方式、设备树描述以及各外设驱动实现。读完本文你将掌握如何在 Linux 中定位 STM32F429 平台代码、理解其 device tree 描述结构、编译对应内核并追踪典型外设时钟、串口、LCD、触摸屏、USB OTG的驱动实现路径。STM32F429 硬件特性总览STM32F429 是 STM32F4 系列中的高性能成员官方概述文档stm32f429-overview.rst开篇即点明其核心定位一款面向多种应用场景的 Cortex-M4 微控制器。其关键特性如下特性说明处理器核心ARM Cortex-M4最高 180 MHz带硬件浮点单元FPU片内 Flash2 MB 内部 Flash 存储器外部存储器扩展通过 FMC 控制器支持 PSRAM、SDRAM、NOR、NAND通信接口I2C、SPI、SAI、CAN、USB OTG、以太网控制器显示与影像LCD 控制器与摄像头接口DCMI安全特性硬件加密处理器CRYP这一特性集合决定了它在 Linux 中的适配边界作为 ARMv7-MCortex-M架构的 MCUSTM32F429 运行 Linux 时没有 MMU属于无 MMU 的 ARM 单内核ARM_SINGLE_ARMV7M平台这一结论可以从平台 Kconfig 的依赖关系中得到印证见下文内核平台适配一节。内核平台适配arch/arm/mach-stm32 与 Kconfig平台代码组织文档 overview.rst 说明STM32 多个机器家族的平台代码统一位于arch/arm/mach-stm32其中包含一个支持 Flattened Device Tree扁平设备树的通用板文件。当前仓库中的具体实现为 arch/arm/mach-stm32/board-dt.c该文件通过DT_MACHINE_START(STM32DT, STM32 (Device Tree Support))注册了一个通用机器描述stm32_compat兼容字符串表包含st,stm32f429、st,stm32f469、st,stm32f746、st,stm32f769、st,stm32h743、st,stm32h747、st,stm32h750以及 STM32MP 系列在CONFIG_ARM_SINGLE_ARMV7M使能时将restart回调设置为armv7m_restart即无 MMU 的 Cortex-M 平台通过 v7-M 系统控制机制实现重启。这意味着任何 compatible 字符串匹配st,stm32f429的设备树都能被这个通用机器描述识别无需为每块板卡单独编写 mach 文件——这正是文档所述适用于任何 compatible 的设备树板卡的具体实现。配置选项与维护状态平台级配置定义在 arch/arm/mach-stm32/Kconfigmenuconfig ARCH_STM32 bool STMicroelectronics STM32 family depends on ARM_SINGLE_ARMV7M || ARCH_MULTI_V7 ... config MACH_STM32F429 bool STMicroelectronics STM32F429 (DEPRECATED) default y需要注意两点MACH_STM32F429等 Cortex-M 变体选项的文本明确标注了DEPRECATED已弃用Kconfig help 说明 Cortex-M 变体的支持计划在 2027 年初移除STM32 平台当前的发展重心已转向基于 Cortex-A7 的 STM32MP1/MP13 应用处理器ARCH_STM32同时依赖ARM_SINGLE_ARMV7MCortex-M无 MMU与ARCH_MULTI_V7Cortex-A有 MMU两条架构路径两条路径分别使能ARMV7M_SYSTICK、STM32_EXTI与ARM_GIC、ARM_PSCI等不同的基础设施。构建配置stm32_defconfig 与 multi_v7_defconfig文档 overview.rst 给出两条构建路径# MCUCortex-M含 STM32F429 make stm32_defconfig # MPUCortex-ASTM32MP 系列 make multi_v7_defconfig其中 arch/arm/configs/stm32_defconfig 与 STM32F429 平台直接相关从中可以看到官方默认使能的外设驱动子集关键条目节选CONFIG_ARCH_STM32y CONFIG_SERIAL_STM32y CONFIG_SERIAL_STM32_CONSOLEy CONFIG_I2Cy CONFIG_I2C_STM32F4y CONFIG_I2C_STM32F7y CONFIG_NEW_LEDSy CONFIG_LEDS_GPIOy CONFIG_LEDS_TRIGGER_HEARTBEATy CONFIG_RTC_DRV_STM32y CONFIG_STM32_DMAy CONFIG_STM32_DMAMUXy CONFIG_IIOy CONFIG_STM32_ADC_COREy CONFIG_STM32_ADCy这份配置勾勒出 STM32F429 在 Linux 中的典型部署形态串口控制台SERIAL_STM32、GPIO LED含 heartbeat 触发器、I2C 总线、RTC、DMA 以及基于 IIO 框架的 ADC 采样。SPI 与 DRMLCD等驱动虽未在截取片段中列出但设备树与驱动源码中均具备完整支持见下文。设备树描述SoC 级 stm32f429.dtsi 与板级 dtsSoC 级描述 stm32f429.dtsiSoC 级设备树 arch/arm/boot/dts/st/stm32f429.dtsi 是 STM32F429 所有板卡的公共骨架其结构如下引入../armv7-m.dtsiARMv7-M 无 MMU 公共设备树、dt-bindings/clock/stm32fx-clock.h与dt-bindings/mfd/stm32f4-rcc.h时钟绑定头文件定义四个固定时钟节点clk_hse外部高速晶振频率在板级覆盖、clk_lse32.768 kHz、clk_lsi32 kHz 内部低速 RC、clk_i2s_ckin在soc节点下描述全部片上外设例如efuse1fff7800 { compatible st,stm32f4-otp; reg 0x1fff7800 0x400; ts_cal1: calib22c { reg 0x22c 0x2; }; ts_cal2: calib22e { reg 0x22e 0x2; }; }; timers2: timers40000000 { compatible st,stm32-timers; reg 0x40000000 0x400; clocks rcc 0 STM32F4_APB1_CLOCK(TIM2); ... pwm { compatible st,stm32-pwm; ... }; timer1 { compatible st,stm32-timer-trigger; ... }; };值得注意的是 efuse 节点中的ts_cal1/ts_cal2它们指向 OTP 中出厂校准的温度传感器校准值内核温度传感器驱动可据此修正读数这是 MCU 平台设备树描述硬件出厂数据的典型例子。引脚复用描述 stm32f429-pinctrl.dtsiarch/arm/boot/dts/st/stm32f429-pinctrl.dtsi 描述了 STM32F429 的 GPIO 与引脚复用控制器pinctrl { compatible st,stm32f429-pinctrl; gpioa: gpio40020000 { gpio-ranges pinctrl 0 0 16; }; gpiob: gpio40020400 { gpio-ranges pinctrl 0 16 16; }; ... gpiok: gpio40022800 { gpio-ranges pinctrl 0 160 8; }; };GPIO A~K 共 11 个端口基址从 0x40020000 起每个端口寄存器块间隔 0x400gpio-ranges将每个 GPIO 引脚映射到 pinctrl 子系统的全局引脚编号空间如 gpioa 对应引脚 0~15、gpiob 对应 16~31……gpiok 对应 160~167仅 8 个引脚驱动实现位于 drivers/pinctrl/stm32/pinctrl-stm32f429.c由st,stm32f429-pinctrlcompatible 绑定。板级描述 stm32f429-disco.dts官方 Discovery 开发板arch/arm/boot/dts/st/stm32f429-disco.dts 是官方 STM32F429i-DISCO 开发板的完整设备树可作为 STM32F429 板卡移植的权威参考模板。其关键设计如下板级标识与内存compatible st,stm32f429i-disco, st,stm32f429memory90000000定义 8 MB 外部 SDRAM0x90000000 起始0x800000 大小启动参数root/dev/ram、stdout-path serial0:115200n8板载资源LEDPG13绿色heartbeat 触发器与 PG14红色两个 GPIO LED用户按键PA0映射为KEY_HOMEU-Boot 配置节点options/u-boot指定boot-led时钟配置clk_hse { clock-frequency 8000000; }覆盖板级 8 MHz 外部晶振频率触摸屏I2C3 总线上挂载 STMPE811 触摸控制器地址 0x41完整配置了 ADC 时钟、12 位模式、采样时间、触摸屏驱动电流与触摸检测延迟等参数显示链路ltdcLCD 控制器使能通过端点endpoint与 SPI 接口上的 ILI9341 面板st,sf-tc240t-9370-t连接成显示管道SPI5 同时挂载 L3GD20 三轴陀螺仪USB OTGusbotg_hs以dr_mode host运行并配置 vbus 供电稳压器由 PC4 控制时钟事件timers5被覆写为st,stm32-timer并配置中断 50作为系统 clockevent时钟事件源使用——在无 MMU 的 Cortex-M 平台上这通常依赖 ARMv7-M SysTick定时器覆写提供了额外的高精度时钟事件源。另一块参考板 arch/arm/boot/dts/st/stm32429i-eval.dts 对应更高配的 Eval 评估板。两块板卡的设备树均收录于 arch/arm/boot/dts/st/Makefile 的 dtb 构建列表。外设驱动实现从设备树到驱动源码STM32F429 的 Linux 支持不仅停留在设备树层面其外设驱动分布在 drivers 目录下可通过设备树 compatible 字符串定位外设compatible驱动路径节选时钟/RCCst,stm32f4-rccdrivers/clk/clk-stm32f4.c定义见 drivers/clk/Kconfig引脚复用st,stm32f429-pinctrldrivers/pinctrl/stm32/pinctrl-stm32f429.c串口st,stm32-usartdrivers/tty/serial/stm32-usart.cI2Cst,stm32f4-i2cdrivers/i2c/busses/i2c-stm32f4.cLCD 控制器st,stm32-ltdcdrivers/gpu/drm/stm/ltdc.cRTCst,stm32-rtcdrivers/rtc/rtc-stm32.cDMAst,stm32-dmadrivers/dma/stm32-dma.c温度传感器st,stm32-tsdrivers/iio/temperature/stm32-temp.c使用 dtsi 中的 ts_cal1/ts_cal2 校准值以时钟子系统为例drivers/clk/clk-stm32f4.c 解析st,stm32f4-rcc节点根据dt-bindings/clock/stm32fx-clock.h中的时钟 ID 与dt-bindings/mfd/stm32f4-rcc.h中的寄存器定义注册 PLL、系统时钟与各总线时钟板级设备树中的clk_hse频率覆盖值8 MHz即作为 PLL 倍频的参考输入。从源码结构看STM32F429 的 180 MHz 主频由 HSE PLL 链路配置产生具体倍频系数可在板级设备树或引导参数中按晶振实际频率调整。支持状态与移植注意事项综合文档与源码可以得出以下结论支持深度完整从 SoC 级 dtsi、板级 dts、默认内核配置到驱动源码STM32F429 拥有从boot 到 console再到 LCD/触摸/网络/USB 等完整外设的端到端 Linux 支持Cortex-M 平台的特殊性STM32F429 作为 ARMv7-M MCU 无 MMU运行的是精简 Linux 内核依赖 ARM_SINGLE_ARMV7M 配置路径重启通过armv7m_restart实现维护状态需关注Kconfig 已将MACH_STM32F429等 Cortex-M 选项标记为 DEPRECATED并注明计划在 2027 年初移除STM32 内核开发重心已转向 STM32MP 应用处理器系列对于长期产品建议关注主线内核的迁移公告移植新板卡的路径复制 stm32f429-disco.dts 或 stm32429i-eval.dts 作为起点修改 compatible、内存布局与板载外设引脚加入 arch/arm/boot/dts/st/Makefile 的 dtb 列表即可复用全部 SoC 级驱动。如需深入了解 STM32 平台整体布局、DMA/MDMA 链式传输等进阶主题可继续阅读 Documentation/arch/arm/stm32/overview.rst 与 Documentation/arch/arm/stm32/stm32-dma-mdma-chaining.rst。【免费下载链接】linuxLinux kernel source tree项目地址: https://gitcode.com/GitHub_Trending/li/linux创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →