ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Linux 内核中的 STM32F746 支持概览:Cortex-M7 MCU 的架构特性与设备树实现

Linux 内核中的 STM32F746 支持概览:Cortex-M7 MCU 的架构特性与设备树实现 Linux 内核中的 STM32F746 支持概览Cortex-M7 MCU 的架构特性与设备树实现【免费下载链接】linuxLinux kernel source tree项目地址: https://gitcode.com/GitHub_Trending/li/linux导读本文基于 Linux 内核仓库中 Documentation/arch/arm/stm32/stm32f746-overview.rst 文档系统梳理 STMicroelectronics STM32F746 微控制器Cortex-M7 内核 MCU的硬件资源并结合内核源码中的平台代码arch/arm/mach-stm32、设备树arch/arm/boot/dts/st/stm32f746.dtsi、arch/arm/boot/dts/st/stm32f746-disco.dts与默认内核配置arch/arm/configs/stm32_defconfig逐项印证每个外设在内核中的落地方式。读完本文你将理解 STM32F746 在 Linux 内核中的支持现状、各外设节点的设备树描述方式以及如何在 ARMv7-M 平台上编译并引导该内核。STM32F746 芯片概览STM32F746 是面向多种应用场景的 Cortex-M7 微控制器。文档列出的核心特性如下Cortex-M7 内核主频最高可达216MHz1MB 内部 Flash、320KB 内部 RAM另有 4KB 备份 SRAMFMC 控制器用于连接 SDRAM、NOR 与 NAND 存储器双模式 QSPIDual mode QSPISD/MMC/SDIO支持以太网控制器Ethernet controllerUSB OTG FS 与 HS 控制器I2C、SPI、CAN 总线支持多个 16 位与 32 位通用定时器串行音频接口Serial Audio InterfaceSAILCD 控制器LTDCHDMI-CECSPDIFRXS/PDIF 数字音频接收。这些特性共同决定了 STM32F746 的定位一颗集成显示、音频、网络与存储接口的高性能 MCU常见于带屏的人机交互设备与工业控制面板。文档署名作者为 Alexandre Torguealexandre.torguest.com并注明芯片的 Datasheet 与参考手册在 ST 官网公开获取原文档中的 STM32F746 链接指向 st.com 产品页。内核中的 STM32F746 平台支持平台代码与机器描述STM32F746 属于 STM32 家族中的 Cortex-MMCU分支其平台支持位于 arch/arm/mach-stm32。平台入口 board-dt.c 的DT_MACHINE_START描述中注册了st,stm32f746兼容字符串说明该平台采用 Flattened Device Tree扁平设备树通用板级支持即任意 compatible 匹配的板卡均可通过设备树直接启动无需为每块板子编写独立机器代码。在 arch/arm/mach-stm32/Kconfig 中STM32F746 以MACH_STM32F746配置项呈现默认开启default y但已被明确标记为 DEPRECATED弃用Kconfig 的 help 文本说明基于 Cortex-M 的早期变体支持已废弃计划于 2027 年初移除。这意味着使用 STM32F746 进行新项目选型时应关注该时间线后续移植应优先考虑 STM32MP1 系列Cortex-A平台。内核配置对于 MCUCortex-M变体文档说明使用默认配置编译内核make stm32_defconfig在 arch/arm/configs/stm32_defconfig 中可以看到为 STM32 平台启用的关键子系统CONFIG_ARCH_STM32y平台总开关CONFIG_SERIAL_STM32y、CONFIG_SERIAL_STM32_CONSOLEySTM32 USART 串口驱动与内核控制台CONFIG_I2Cy、CONFIG_I2C_STM32F4y、CONFIG_I2C_STM32F7yI2C 总线及 F4/F7 两代控制器驱动CONFIG_MMCy、CONFIG_MMC_ARMMMCIySD/MMC 卡支持对应 SDMMC 外设CONFIG_RTC_DRV_STM32ySTM32 RTC 驱动CONFIG_STM32_DMAy、CONFIG_STM32_DMAMUXy、CONFIG_STM32_MDMAyDMA 控制器与 DMA 请求复用器CONFIG_STM32_ADC_COREy、CONFIG_STM32_ADCyADC 核心与驱动。设备树中的外设节点从芯片手册到内核描述arch/arm/boot/dts/st/stm32f746.dtsi 是 STM32F746 SoC 级设备树包含文件把文档列举的每类外设映射为内核可解析的设备节点。下面按文档特性逐类对照。存储器控制器FMC 与 QSPI文档提到的FMC 控制器连接 SDRAM、NOR、NAND与双模式 QSPI属于芯片级存储接口。从当前 stm32f746.dtsi 的节点清单看这些控制器未在该 SoC 包含文件中显式建模为独立节点其支持更多依赖驱动框架与板级扩展。这是设备树建模颗粒度的体现SoC 级文件仅收录内核驱动实际使用的外设未建模的控制器不代表芯片不具备该能力。定时器16 位与 32 位通用定时器文档列出的多个 16 位与 32 位通用定时器在设备树中有着最完整的映射。SoC 文件为TIM2~TIM14逐个声明了节点统一使用st,stm32-timers兼容字符串基地址从0x40000000TIM2到0x40014800TIM11按 0x400 步进排布并挂载在 RCC 的 APB1/APB2 时钟域上timers2: timers40000000 { compatible st,stm32-timers; reg 0x40000000 0x400; clocks rcc 0 STM32F7_APB1_CLOCK(TIM2); clock-names int; status disabled; pwm { compatible st,stm32-pwm; #pwm-cells 3; status disabled; }; timer1 { compatible st,stm32-timer-trigger; reg 1; status disabled; }; };从源码结构可以推断每个 timers 节点内嵌pwm子节点st,stm32-pwm用于输出比较/PWM和timer-trigger子节点用于触发 ADC 等外设体现出定时器在 Linux 中通过 PWM 子系统、时钟事件等框架复用的设计。其中 LPTIMER低功耗定时器单独建模为 lptimer1包含st,stm32-pwm-lp、st,stm32-lptimer-trigger、st,stm32-lptimer-counter、st,stm32-lptimer-timer四个子功能并通过 EXTI 23 边沿触发中断。在板级文件 stm32f746-disco.dts 中TIM5 被覆盖override为st,stm32-timer并启用中断 50用作clockevent时钟事件设备——这是无 MMU 的 ARMv7-M 平台上内核调度时钟的关键来源同时删除了其 PWM 与 trigger 子节点以简化功能。I2C / SPI / CAN 总线I2C文档列的 I2C 总线支持对应设备树中的i2c140005400~i2c440006000四个节点兼容st,stm32f7-i2c各带两个中断事件/错误与 RCC 复位控制如resets rcc STM32F7_APB1_RESET(I2C1)。驱动对应CONFIG_I2C_STM32F7。SPIspi1~spi6六个节点基址0x40003800~0x40015400兼容st,stm32f7-spi分布于 APB1/APB2 两个时钟域。CANcan1与can2两个节点兼容st,stm32f4-bxcan每个节点带 tx/rx0/rx1/sce 四路命名中断并通过st,can-primary/st,can-secondary属性与共享的gcan1st,stm32f4-gcansyscon关联体现 CAN 双实例共享控制块bxCAN 架构的内核建模方式。SD/MMC/SDIO文档的 SD/MMC/SDIO 支持对应sdio1: mmc40012c00与sdio2: mmc40011c00两个节点。它们采用 ARM PrimeCell PL180 兼容描述sdio1: mmc40012c00 { compatible arm,pl180, arm,primecell; arm,primecell-periphid 0x00880180; reg 0x40012c00 0x400; clocks rcc 0 STM32F7_APB2_CLOCK(SDMMC1); clock-names apb_pclk; interrupts 49; max-frequency 48000000; status disabled; };在 stm32f746-disco.dts 板级文件中sdio1被启用并配置为 4 位总线bus-width 4、vmmc-supply vcc_3v3供电、cd-gpios卡检测引脚GPIOC13低电平有效以及 default/opendrain/sleep 三套 pinctrl 状态对应内核中CONFIG_MMC_ARMMMCIarm,pl180 驱动。USB OTG FS 与 HS文档列的 USB OTG FS HS 控制器在设备树中分别为usbotg_fs: usb50000000兼容st,stm32f4x9-fsotg对应内核 dwc2 驱动框架挂 AHB2 时钟域STM32F7_AHB2_CLOCK(OTGFS)usbotg_hs: usb40040000兼容st,stm32f7-hsotg对应内核 dwc2/dwc3 高速 OTG 驱动挂 AHB1 时钟域STM32F7_AHB1_CLOCK(OTGHS)并预设了 FIFO 尺寸g-rx-fifo-size 256、g-np-tx-fifo-size 32、g-tx-fifo-size 128 128 64 64 64 64 32 32这些参数直接决定 dwc2 gadget 模式下各端点的缓冲分配。板级文件 stm32f746-disco.dts 将两个控制器均配置为dr_mode hostHS 控制器通过usb-nop-xceiv假 PHY 节点usbotg_hs_phy接 ULPI 时钟FS 控制器则通过固定稳压器vcc5v_otg_fsGPIO PD5 控制 VBUS供电——这正是 STM32F746-DISCO 板载 USB Host 端口的实际启用方式。串口USART/UART设备树中声明了usart1/usart2/usart3含st,stm32f7-uart兼容以及usart4~usart8、uart4/uart5/uart7/uart8等节点覆盖 8 个串行口分别挂载CLK_USARTx/CLK_UARTx时钟。板级文件中将usart1作为默认调试串口stdout-path serial0:115200n8aliases { serial0 usart1; }对应CONFIG_SERIAL_STM32_CONSOLE。LCD 控制器LTDC文档列的 LCD 控制器对应ltdc: display-controller40016800节点兼容st,stm32-ltdc带两路中断88/89分别为全局与寄存器错误时钟CLK_LCD挂 APB2 复位域LTDC。在 stm32f746-disco.dts 板级实现中LTDC 通过ltdc_out_rgb端点与panel-rgbRocktech RK043FN48H 4.3 寸 RGB 屏的panel_in_rgb端点建立remote-endpoint连接配合gpio-backlightGPIO PK3与 I2C3 上的edt,edt-ft5306电容触摸屏分辨率 480x272i2c3以 400kHz 快速模式运行构成一套完整的内核 DRM/KMS 显示链路。这正是带屏 HMI 应用在内核中的典型落地方案。HDMI-CEC文档列的 HDMI-CEC 对应cec: cec40006c00节点兼容st,stm32-cec挂两个时钟源cec与hdmi-cec中断 94。它通常与 LTDC 显示链路配套用于消费类显示设备间的 CEC 控制协议。其他关键基础设施节点除文档直接列举的外设外stm32f746.dtsi 还包含支撑整机运行的基础设施节点可一并了解RCCrcc40023800兼容st,stm32f746-rcc#clock-cells 2、#reset-cells 1是所有外设时钟与复位引用的源头节点中通过assigned-clock-rates 1000000将CLK_HSE_RTC配置为 1MHzDMA1/DMA2dma-controller40026000/40026400兼容st,stm32-dma#dma-cells 4DMA2 额外带st,mem2mem属性支持内存到内存搬运EXTIinterrupt-controller40013c00兼容st,stm32-exti以interrupts 1, 2, 3, ...将 14 条 EXTI 线汇聚到 NVICRTCrtc40002800兼容st,stm32-rtc通过assigned-clock-parents rcc 1 CLK_LSE选择 LSE 时钟源CRCcrc40023000兼容st,stm32f7-crcSYSCFGsyscon40013800与PWRCfgpower-config40007000作为 syscon 提供寄存器级共享访问。时钟源方面SoC 文件声明了 HSE频率由板级覆盖、LSE32.768kHz、LSI32kHz、I2S_CKIN48MHz等 fixed-clock板级文件 stm32f746-disco.dts 将 HSE 设为 25MHz。参考板卡与启动路径文档以 STM32F746 为通用 MCU 视角介绍内核仓库中还包含两块基于该芯片的参考板设备树可直接对照stm32f746-disco.dts对应STM32F746-DISCO 评估板model STMicroelectronics STM32F746-DISCO boardcompatible st,stm32f746-disco, st,stm32f746stm32746g-eval.dts对应STM32746G-EVAL 评估板。两块板在 arch/arm/boot/dts/st/Makefile 中均被编译进 dtb 目标。板级文件还展示了 STM32F746-DISCO 的完整板载外设布局内存节点memoryc00000008MB SDRAM 映射于 0xC0000000、CMA 保留内存512KBshared-dma-pool、GPIO LEDheartbeat 触发、gpio-keys 用户按键、以及上文提到的 SD 卡、USB Host、LCD触摸屏。启动路径上板级chosen节点指定bootargs root/dev/raminitramfs 根文件系统与stdout-path serial0:115200n8。结合 arch/arm/mach-stm32/Kconfig 中ARM_SINGLE_ARMV7M分支选择ARMV7M_SYSTICK、STM32_EXTI以及 stm32f746.dtsi 末尾对systick的启用可以看出该平台依赖 SysTick 与 TIM5 clockevent 提供节拍属于典型的 ARMv7-M 无 MMU 启动模型配合CONFIG_ARM_SINGLE_ARMV7M。构建与启用要点结合文档与源码在 Linux 内核中启用 STM32F746 支持的关键步骤可归纳为配置内核使用默认配置make stm32_defconfigMCU 平台。该配置已在 arch/arm/configs/stm32_defconfig 中预置串口控制台、I2C、MMC、RTC、DMA、ADC 等驱动开关。选择机器确认CONFIG_ARCH_STM32y且MACH_STM32F746arch/arm/mach-stm32/Kconfig为开启状态默认开启。提供设备树板级设备树需包含st,stm32f746compatible可参考 stm32f746-disco.dts 组织 memory、aliases、外设 pinctrl 与 status。引导通过 u-boot 加载内核与 dtb控制台默认在 USART1115200 8N1根文件系统可置于 initramfsroot/dev/ram。结语STM32F746 的官方内核文档虽以简短的特性清单呈现但其背后是 arch/arm/mach-stm32 平台代码、stm32f746.dtsi SoC 级设备树与两块参考板设备树共同支撑的完整软件栈。从本文的对照可以看到文档中每一类外设——定时器、I2C/SPI/CAN、SDIO、USB OTG、LTDC、HDMI-CEC——都能在内核源码中找到对应的节点与驱动痕迹。同时需要提醒的是该平台已进入弃用周期计划 2027 年初移除评估新设计时应将此纳入考量。如需深入某个具体外设的驱动实现可直接在内核源码树中检索对应的st,stm32-*兼容字符串及CONFIG_*_STM32*配置项。【免费下载链接】linuxLinux kernel source tree项目地址: https://gitcode.com/GitHub_Trending/li/linux创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表