RT-Thread 移植小华 HC32F4A0 EV_F4A0_LQ176 开发板 BSP 快速上手与进阶配置指南
发布时间:2026/9/24 15:50:00 作者:尧图编辑部 阅读量:1,286

操作系统嵌入式物联网嵌入式OSRTOS【免费下载链接】rt-threadRT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/项目地址https://gitcode.com/gh_mirrors/rt/rt-thread点击查看免费下载本文是基于 RT-Thread 开源仓库中bsp/hc32/ev_hc32f4a0_lqfp176板级支持包BSP编写的完整技术指南面向希望将 RT-Thread 物联网操作系统运行在小华半导体XHSCHC32F4A0 系列芯片上的嵌入式开发者。读完本文你将掌握 EV_F4A0_LQ176 开发板的板载资源全貌、用 MDK5/IAR/GCC 三种工具链快速编译下载并跑通首个 LED 闪烁例程的方法以及通过 ENV 工具与 menuconfig 开启以太网、NAND、SDRAM、USB、CAN、硬件加解密等高级外设的完整配置流程与工程注意事项。开发板与 BSP 简介EV_F4A0_LQ176 是 XHSC小华半导体官方推出的评估开发板搭载HC32F4A0SITB芯片。该芯片基于 ARM Cortex-M4 内核最高主频 240 MHz具备 2048 KB2 MB片上 FLASH 与 512 KB SRAM是 HC32F4 系列中的高性能型号。RT-Thread 仓库中提供的这份 BSPbsp/hc32/ev_hc32f4a0_lqfp176/README.md即为该开发板的一站式板级支持包涵盖工程模板、外设驱动、链接脚本与配置菜单。BSP 说明文档的主体内容分为三块开发板资源介绍、BSP 快速上手、进阶使用方法。通过快速上手章节开发者可以立即将 RT-Thread 运行在开发板上通过进阶使用章节则可以借助 ENV 工具驱动更多板载资源发挥 HC32F4A0SITB 的完整芯片性能。开发板板载资源总览EV_F4A0_LQ176 开发板的板载资源非常丰富可以从存储、常用外设、接口与调试三方面来梳理MCUHC32F4A0SITB主频 240 MHz2048 KB FLASH512 KB RAM外部 RAMIS62WV51216SRAM1 MB、IS42S16400JSDRAM8 MB外部 FLASHMT29F2G08ABNAND256 MB、W25Q64SPI NOR8 MB常用外设LED3 个User LEDLED0、LED1、LED2按键11 个包括矩阵键盘K1~K9、WAKEUPK10、RESETK11常用接口SD 卡接口、以太网接口、LCD 接口、USB FS/HS 接口、DVP 接口、3.5 mm 耳机接口、Line in 接口、CAN 接口、LIN 接口调试接口板载 DAP 调试器含 USB 转串口、标准 JTAG/SWD外设支持矩阵本 BSP 对板载外设与片上外设的支持情况如下表所示。板载外设的“支持”意味着 BSP 中已包含对应的驱动移植与初始化代码片上外设则通过 Kconfig 配置按需开启。板载外设支持情况板载外设支持情况备注ETH支持RTL8201FNand支持MT29F2G08ABSDRAM支持IS42S16400JUSB 转串口支持使用 UART1片上外设支持情况片上外设支持情况备注ADC支持CAN支持Crypto支持AESCRCHASHRNGDAC支持FLASH支持GPIO支持PA0PA1...PI13 --- PIN01...141CLOCK_TIMER支持I2C支持软件、硬件 I2CInputCapture支持PM支持PulseEncoder支持PWM支持QSPI支持RTC支持闹钟精度为 1 分钟SDIO支持SPI支持UART V1 V2支持USB支持USBFS/HS Coredevice/host 模式WDT支持从源码看GPIO 外设的引脚编号映射关系为PA0、PA1 … PI13 依次对应 RT-Thread PIN 编号 0、1 … 141共 142 个引脚编号。这一定义在 BSP 的驱动初始化与applications/main.c示例中均有体现——例如示例中 LED 使用GET_PIN(C, 9)宏将 PC9 映射为 PIN 编号。BSP 工程结构与关键文件在进入上手步骤之前先了解 BSP 的目录结构有助于后续定位配置与源码bsp/hc32/ev_hc32f4a0_lqfp176/ ├── applications/ # 应用层main.cLED 闪烁示例、xtal32_fcm.c ├── board/ │ ├── config/ # 各外设引脚/参数配置文件adc/uart/spi/i2c/usb 等 *_config.h │ ├── linker_scripts/ # IAR(icf)、GCC(ld)、MDK(sct) 三种链接脚本 │ ├── ports/ # 移植适配层fal_cfg.h、nand_port.h、sdram_port.h、usb_config.h 等 │ ├── Kconfig # 板级硬件配置菜单 │ ├── board.c # 系统时钟/外设时钟/寄存器解锁配置 │ ├── board_config.c # 各外设的板级引脚初始化GPIO_SetFunc 等 │ └── board.h # 内存、堆边界等宏定义 ├── figures/ # 文档配图 ├── jlink/ # J-Link 调试启动配置 ├── project.uvprojx # MDK5 工程 ├── project.ewp/.eww # IAR 工程 ├── SConscript / SConstruct# scons 构建脚本GCC 环境 └── rtconfig.h / rtconfig.py其中 board/board.c 负责三件核心事SystemBase_Config()使能片上 FLASH 的 ICODE/DCODE Cache 与预取SystemClock_Config()完成时钟树配置XTAL PLLH 倍频到 240 MHz 系统主频USB 场景额外使能 PLLX 提供 480 MHz USB 时钟PeripheralRegister_Unlock()完成外设寄存器写保护解锁。所有外设的引脚复用如 UART1 的 RX/TX、I2C1 的 SDA/SCL、ETH 的 MII/RMII 全引脚组都在 board/board_config.c 中通过GPIO_SetFunc()按#if defined(BSP_USING_xxx)条件编译完成。快速上手让 RT-Thread 在开发板上跑起来本 BSP 同时提供 MDK5 和 IAR 工程并支持 GCC 开发环境。下面以 MDK5 为例说明完整的上手流程IAR 与 GCC 流程完全一致只是打开的工程/命令不同。硬件连接使用 Type-A 转 Micro-USB 线连接开发板和 PC为开发板供电。板载 DAP 调试器同时承担下载器与 USB 转串口两种角色因此单根 USB 线即可完成供电、下载与串口通信。编译下载双击 BSP 根目录下的project.uvprojx用 MDK5 打开工程编译工程点击下载按钮烧录程序。工程默认配置使用板载 DAP 下载程序无需额外设置调试器点击下载按钮即可将程序写入开发板。运行结果下载成功之后系统自动运行此时观察开发板上的 LED绿色 LED11 会周期性闪烁。USB 虚拟 COM 端口默认连接串口 1UART1。在终端工具中打开对应串口波特率默认 115200可参考 rtconfig.h 中控制台相关配置复位设备后可以看到 RT-Thread 的启动输出\ | / - RT - Thread Operating System / | \ 4.1.0 build Apr 24 2022 13:32:39 2006 - 2022 Copyright by RT-Thread team msh 出现msh 提示符即代表 RT-Thread 已成功运行可以开始输入 finsh/msh 命令进行交互。LED 闪烁例程源码解读快速上手阶段看到的 LED 闪烁效果其实现就在 applications/main.c 中#include rtthread.h #include rtdevice.h #include board.h /* defined the LED_GREEN pin: PC9 */ #define LED_GREEN_PIN GET_PIN(C, 9) int main(void) { /* set LED_GREEN_PIN pin mode to output */ rt_pin_mode(LED_GREEN_PIN, PIN_MODE_OUTPUT); while (1) { rt_pin_write(LED_GREEN_PIN, PIN_HIGH); rt_thread_mdelay(500); rt_pin_write(LED_GREEN_PIN, PIN_LOW); rt_thread_mdelay(500); } }这个例程展示了 RT-Thread PIN 设备框架的标准用法GET_PIN(C, 9)宏将端口-引脚转换为全局 PIN 编号rt_pin_mode()配置输出模式rt_pin_write()配合rt_thread_mdelay(500)实现 500 ms 周期的电平翻转最终呈现绿色 LED 以 1 Hz 频率闪烁。进阶使用用 ENV 工具开启更多外设此 BSP默认只开启了 GPIO 和串口 1UART1这一结论可以从 rtconfig.h 得到印证——其中仅定义了BSP_USING_GPIO、BSP_USING_UART、BSP_USING_UART1、BSP_USING_I2C、BSP_USING_I2C1以及片上 FLASH Cache 相关选项其余外设均未使能。更多高级功能需要利用 ENV 工具对 BSP 进行配置步骤如下在 bsp 目录下打开 ENV 工具输入menuconfig命令配置工程配置好之后保存退出输入pkgs --update命令更新软件包输入scons --targetmdk5或scons --targetiar命令重新生成工程。执行完以上步骤后重新打开 MDK5/IAR 工程即可看到新增的外设驱动代码与配置。Kconfig 菜单结构解析BSP 的配置菜单由 board/Kconfig 定义顶层菜单Hardware Drivers Config下分为四大类On-chip Drivers片上 FLASH CacheICODE Cache、DCODE Cache、ICODE Prefetch默认全部开启可显著提升从 FLASH 取指与取数的性能Onboard Peripheral Drivers以太网ETH、外部存储器控制器EXMC用于 NAND/SDRAM 二选一、SPI FLASHW25Q64、TCA9539 IO 扩展芯片等On-chip Peripheral DriversGPIO、UART1~UART10、I2C1~I2C6含软件 I2C、SPI1~SPI4、ADC1~ADC3、DAC1/DAC2、CAN1/CAN2、看门狗SWDT/WDT、RTC、SDIO1/SDIO2、PM、硬件加解密HWCRYPTO、PWMTimerA/TMR4/TMR6、USBUSBFS/USBHS、QSPI、脉冲编码器、时钟定时器、输入捕获等Board extended module Drivers扩展模块驱动当前为空菜单为后续扩展预留。各外设配置要点与默认值以下结合 board/Kconfig 中的实际选项梳理几个典型外设的配置要点UART 串口BSP_USING_UART1默认使能。开启后还可配置BSP_UART1_RX_USING_DMA/BSP_UART1_TX_USING_DMA需依赖RT_SERIAL_USING_DMA。若使用串口 V2 框架可进一步设置 RX/TX 缓冲区大小RX 范围 64~65535默认 256以及 DMA ping-pong 缓冲区大小范围 32~65535默认 64。UART2~UART10 默认关闭按需开启部分串口同样支持 DMA 配置。以太网 ETHBSP_USING_ETH默认关闭开启后自动选择 lwIP 协议栈与硬件校验和。可选 PHY 类型默认 RTL8201F会连带开启 I2C 与 TCA9539以及通信接口MII / RMII 二选一默认 MII。若使用 PHY 中断模式可配置中断引脚号范围 1~176默认 16。对应的 PHY 复位与 MII/RMII 引脚初始化实现在 board/board_config.c 的rt_hw_eth_phy_reset()与rt_hw_eth_board_init()中复位延时为 0x40 个系统节拍。EXMC 外部存储BSP_USING_EXMC开启后可选择NANDMT29F2G08AB会联动RT_USING_MTD_NAND或SDRAMIS42S16400J7TLI。SDRAM 的初始化涉及 16 位数据线、12 位地址线及 CKE/CLK/DQM/BA/CAS/RAS/WE 等全部引脚的驱动能力配置与复用设置同样在 board_config.c 中实现。NAND 的 FAL 分区表可参考 board/ports/fal_cfg.happ分区占用片上 2 MB FLASHfilesystem分区占用 W25Q64 全部 8 MB。SPI FLASHW25Q64BSP_USING_SPI_FLASH开启后会自动选择 SPI1、片上 FLASH、SFUD、DFS、FAL、MTD NOR 等组件是文件系统方案的典型组合。USBBSP_USING_USB默认关闭且依赖!RT_USING_CHERRYUSB即与 CherryUSB 组件互斥。开启后可选 USBFS Core 或 USBHS Core各自再选择 Device/Host 模式。USBHS 还支持嵌入式 PHY 或外部 PHY外部 PHY 会连带开启 I2C1 与 TCA9539。Host 模式下可开启 U 盘驱动RT_USBH_MSTORAGE并配置挂载目录默认/。硬件加解密 HWCRYPTO开启后可分别使能 UQID唯一 ID、硬件 RNG、硬件 CRC、硬件 AES目前支持 ECB 模式与硬件 HASHSHA2-256对应RT_HWCRYPTO_USING_*系列宏。RTCBSP_USING_RTC开启后可选时钟源 XTAL32 或 LRC。注意文档说明 RTC 闹钟精度为 1 分钟。对应地BSP 根目录下applications/xtal32_fcm.c提供 32.768 kHz 晶振失效监控FCM的处理实现。看门狗 WDTBSP_USING_WDT_TMR开启后可选择 SWDT软件看门狗最长 3.72 小时或 WDT最长 10.7 秒并可选低功耗模式下继续计数。PM 电源管理BSP_USING_PM开启后可选唤醒定时器时钟源XTAL32/LRC且在使用 XTAL32 并运行 RTC 时可启用 64 Hz 选项。board/board_config.c 中的rt_hw_board_pm_sysclk_cfg()展示了 PM 运行模式切换的实现高速/正常模式切换回 PLL 时钟源低速模式则切换为 XTAL 以保证系统时钟低于 8 MHz。软件包与 DDL 驱动依赖BSP 依赖小华官方的 HC32F4 系列 DDLDevice Driver Library驱动包在 rtconfig.h 中体现为PKG_USING_HC32F4_CMSIS_DRIVER与PKG_USING_HC32F4_SERIES_DRIVER均使用 LATEST_VERSION。因此首次配置时执行pkgs --update步骤是必须的它会从软件包仓库拉取 HC32F4 的 CMSIS 与 DDL 源码到本地packages目录工程才能完整编译。注意事项与常见坑这是本 BSP 使用中最容易踩坑的部分原文档以表格形式给出了系统性提醒全部与 USB 的配置强相关务必仔细阅读板载外设模式协议栈注意事项USBdeviceALL由于协议栈的设计当配置为 CDC 设备时打开 USB 虚拟串口需使能流控的 DTR 信号。如使用 SSCOM 串口助手打开 USB 虚拟串口时勾选 DTR 选框USBdeviceALL由于外部 PHY 管脚复用的原因当配置使用 USBHS Core 并且使用外部 PHY 时需先通过 J14 连接到主机如 PC再复位 MCU 运行程序或者将 J24 跳帽先短接再复位 MCU 运行程序。USBALLALL由于 main() 函数中的 LED 闪烁示例使用的是 USBFS 主机的供电控制管脚因而当配置为使用 USBFS Core 时需要将 main() 函数中的 LED 示例代码手动屏蔽。USBhostALL为确保 USB 主机对外供电充足建议通过 J35 外接 5V 电源供电并短接 J32 的 EXT 跳帽。USBhostALL由于外部 PHY 管脚复用的原因当配置使用 USBHS Core 并且使用外部 PHY 时需通过 J14 先连接好 OTG 线再复位 MCU 运行程序或者将 J24 跳帽先短接再复位 MCU 运行程序。USBhostRTT legacy USB目前仅实现并测试了对 U 盘的支持。USBhostRTT legacy USB若配置为 U 盘主机模式出现部分 U 盘无法识别或者写入失败时可以尝试将 RTT 抽象层中rt_udisk_run()函数的rt_usbh_storage_reset()操作注释掉测试是否可以获得更好的兼容性。USBALLALL由于管脚复用的原因当配置使用 USBHS Core 时无法同时使用板载 SPI FLASH。USBALLALLCherryUSB 与 RTT legacy USB 组件不可同时使用CherryUSB 与 On-Chip Peripheral Driver---[] Enable USB 不可同时使能及配置。USBALLRTT legacy USB通过board/config/usb_config/usb_app_conf.h进行应用个性化配置主要为 FIFO 分配。USBALLCherryUSB通过board/ports/usb_config.h进行应用个性化配置如 FIFO 分配、是否使用 DMA[Device]、是否使用高速 PHY 等。除 USB 外还有几个从源码中可确认的约束值得注意USB 时钟依赖从 board/board.c 可以看到只要定义了BSP_USING_USBD/BSP_USING_USBH或启用了 CherryUSB系统时钟配置就会额外初始化 PLLXVCO (8/2)×120 480 MHz并将 USB 时钟源设置为CLK_USBCLK_PLLXP这是 USB 正常工作的前提。串口控制台默认绑定rtconfig.h 中RT_CONSOLE_DEVICE_NAME为uart1即 msh 控制台默认走 UART1板载 USB 转串口修改控制台串口需同步修改该宏。堆内存边界board/board.h 定义了HC32_SRAM_END为0x1FFE0000 512KB堆顶HEAP_END即 SRAM 末尾堆起始地址按工具链区分MDK 取Image$$RW_IRAM2$$ZI$$LimitIAR 取__segment_end(HEAP)GCC 取__bss_end。维护与支持本 BSP 由小华半导体官方维护维护人小华半导体 MCU 团队邮箱xhsc_ae_cd_apxhsc.com.cn如需了解芯片与开发板的更多硬件细节可查阅小华半导体官方网站的 EV_F4A0_LQ176 开发板资料如需深入研究驱动实现可直接阅读本仓库bsp/hc32/ev_hc32f4a0_lqfp176/board/目录下的源码以及bsp/hc32/libraries/中的 HC32F4 系列 DDL 驱动库。赞分享操作系统嵌入式物联网嵌入式OSRTOS【免费下载链接】rt-threadRT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/项目地址https://gitcode.com/gh_mirrors/rt/rt-thread点击查看免费下载相关推荐Vorssaint 权限体系全解macOS TCC 权限如何按需申请、动态刷新与一键重置Vorssaint 权限体系全解macOS TCC 权限如何按需申请、动态刷新与一键重置 Vorssaint 是一个免费开源的 macOS 菜单栏工具集它在操作系统嵌入式物联网嵌入式OSRTOSPostHog Person Property Reconciliation修复 ASSERT_VERSION 属性丢失的 ClickHouse 对账作业实战指南PostHog Person Property Reconciliation修复 ASSERT_VERSION 属性丢失的 ClickHouse 对账作业实战操作系统嵌入式物联网嵌入式OSRTOSCilium 文档本地渲染与测试指南从 make render-docs 到 make test-docs 的完整实践Cilium 文档本地渲染与测试指南从 make render docs 到 make test docs 的完整实践 本文基于 Cilium 仓库的 Doc操作系统嵌入式物联网嵌入式OSRTOS上一篇如何用SPT-AKI存档编辑器解决单机塔科夫进度管理难题下一篇掌握SPT-AKI存档编辑器的5大核心技术全面定制你的塔科夫单机体验创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考