
RT-Thread 在合宙 Air32F103 开发板上的 BSP 使用指南快速上手与进阶配置【免费下载链接】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/airm2m/air32f103 的 BSP板级支持包展开介绍基于 Cortex-M3 内核、主频最高 216MHz 的合宙 Air32F103CBT6 开发板资源、外设支持现状以及从编译下载、运行验证到借助 ENV 工具开启更多外设的完整流程。读完本文你将能够独立把 RT-Thread 系统跑在 Air32F103 开发板上并通过 menuconfig 按需启用 UART、SPI Flash、软件 I2C、ADC、定时器等板载外设。开发板与 BSP 简介该 BSP 由合宙airm2m开发团队为 Air32F103 开发板提供说明文档位于 bsp/airm2m/air32f103/README.md主要内容包括开发板资源介绍、BSP 快速上手、进阶使用方法。Air32F103 是一个系列芯片首发型号为Air32F103CBT6其外设与硬件设计兼容市场上一些主流的 F103 型号因此已有的 STM32F103 外设使用经验可以平滑迁移。该芯片的关键特性如下内核ARM Cortex-M3主频最高216MHz存储96KB RAM 128KB FlashGPIO每个 IO 都可以独立设置内部上拉/下拉电阻上述存储与内存参数在 bsp/airm2m/air32f103/board/board.h 中有直接对应定义Flash 起始地址0x08000000、容量 128KBSRAM 容量 96KB同时根据编译器MDK 的__ARMCC_VERSION、IAR 的__ICCARM__、GCC 的__bss_end分别确定堆起始地址HEAP_BEGIN并以AIR32_SRAM_END作为堆结束地址。板载资源资源说明MCUAir32F103CBT6主频 216MHz128KB FLASH96KB RAM调试下载DapLink 调试下载接口串口UART0 转 Type-C USB 接口同时承担调试串口与下载通道开发板的更多硬件细节可以参考合宙官方 LuatOS 文档中关于 Air32F103 开发板章节本文不再展开。外设支持情况本 BSP 当前对外设的支持情况如下表所示片上外设支持情况GPIO支持UART支持SPI支持I2C支持ADC支持TIM支持WDT支持这些外设驱动的实现都位于 bsp/airm2m/air32f103/libraries/rt_drivers 目录下包括drv_gpio.c、drv_usart.c、drv_spi.c、drv_adc.c、drv_timer.c、drv_wdt.c、drv_flash.c等底层依赖同目录下的 AIR32F10xLib 标准外设库与 CMSIS 支持包。使用说明使用说明分为两个章节快速上手面向刚接触 RT-Thread 的新手遵循简单步骤即可将 RT-Thread 操作系统运行在该开发板上看到实验效果进阶使用面向需要在 RT-Thread 上使用更多开发板资源的开发者通过 ENV 工具对 BSP 进行配置开启更多板载外设。快速上手本 BSP 为开发者提供了 MDK4、MDK5 工程并且支持 GCC 开发环境。下面以 MDK5 开发环境为例介绍如何将系统运行起来。硬件连接使用数据线连接开发板到 PC打开电源开关。编译下载双击 bsp/airm2m/air32f103/project.uvprojx 文件打开 MDK5 工程编译并下载程序到开发板。工程默认配置使用DapLink下载程序在通过 DapLink 连接开发板的基础上点击下载按钮即可将程序下载到开发板。此外工程目录还同时提供了 GCC 与 IAR 支持GCC 开发环境对应的工程脚本为 bsp/airm2m/air32f103/SConstruct 与 bsp/airm2m/air32f103/rtconfig.py可使用scons命令编译IAR 工程为 bsp/airm2m/air32f103/project.ewp。从 bsp/airm2m/air32f103/board/SConscript 的源码可以看到不同工具链下会链接不同的启动文件GCC 使用Startup/gcc/startup_air32f10x.sarmcc/armclangMDK使用Startup/arm/startup_air32f10x.siccarmIAR使用Startup/iar/startup_air32f10x.s工程模板对三种工具链的覆盖是完整的。运行结果下载程序成功之后系统会自动运行。观察开发板上 LED 的运行效果红色 LED0 会周期性闪烁。LED0 的引脚定义位于 bsp/airm2m/air32f103/applications/main.c/* defined the LED0 pin: PB2 */ #define LED0_PIN GET_PIN(B, 2)main函数将 PB2 配置为输出模式后在循环中以 500ms 间隔交替输出高低电平rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT); while (1) { rt_pin_write(LED0_PIN, PIN_HIGH); rt_thread_mdelay(500); rt_pin_write(LED0_PIN, PIN_LOW); rt_thread_mdelay(500); }main.c还会在启动时调用RCC_GetClocksFreq读取并打印系统各总线时钟频率用于确认 216MHz 主频配置是否生效。连接开发板对应串口到 PC在终端工具里打开相应的串口115200-8-1-N即波特率 115200、8 位数据、1 位停止位、无校验复位设备后可以看到 RT-Thread 的输出信息\ | / - RT - Thread Operating System / | \ 5.0.0 build Dec 27 2022 10:44:04 2006 - 2022 Copyright by RT-Thread team SYSCLK: 216Mhz, HCLK: 216Mhz, PCLK1: 108Mhz, PCLK2: 216Mhz, ADCCLK: 108Mhz msh 看到msh 命令行提示符后即表示 RT-Thread 已成功运行可以通过串口执行 msh 内置命令。时钟树配置的源码印证上述打印中的时钟数值由 bsp/airm2m/air32f103/board/board.c 中的SystemClock_Config()决定。该函数完成如下初始化序列RCC_DeInit()复位 RCC 寄存器使能 HSE外部高速晶振并等待就绪配置 PLLAIR_RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_27, FLASH_Div_2)即 8MHz HSE × 27 216MHz系统时钟选择 PLL 作为系统时钟源配置总线分频HCLK 不分频216MHz、PCLK1 二分频108MHz、PCLK2 不分频216MHz使能 LSI 与 HSI 内部时钟并等待就绪。从源码结构可以看出Air32F103 在沿用 STM32F103 标准外设库 API 风格的基础上通过AIR_RCC_PLLConfig这类专用接口实现了对 216MHz 高频的扩展支持。进阶使用此 BSP 默认只开启了GPIO和串口1uart1的功能。这一点在 bsp/airm2m/air32f103/rtconfig.h 中有直接体现#define SOC_AIR32F103 #define BSP_USING_GPIO #define BSP_USING_UART #define BSP_USING_UART1同时控制台设备默认绑定到uart1#define RT_CONSOLE_DEVICE_NAME uart1如需使用 SPI Flash、ADC、定时器等更多高级功能需要利用 ENV 工具对 BSP 进行配置步骤如下在bsp目录下打开 ENV 工具输入menuconfig命令配置工程配置好之后保存退出输入pkgs --update命令更新软件包输入scons --targetmdk4/mdk5/iar命令重新生成工程按实际使用的工具链选择mdk4、mdk5或iar生成对应 IDE 工程文件。可配置的外设选项bsp/airm2m/air32f103/board/Kconfig 定义了本 BSP 的硬件驱动配置菜单主要选项及其默认值如下菜单/选项含义默认值依赖SOC_AIR32F103芯片型号自动选中y自动选择ARCH_ARM_CORTEX_M3、RT_USING_COMPONENTS_INIT、RT_USING_USER_MAINBSP_USING_SHELL_TO_USART串口1 作为 msh 控制台y自动选中BSP_USING_UART、BSP_USING_UART1BSP_USING_SPI_FLASH板载 SPI FlashW25Q64挂在 SPI1n自动选中BSP_USING_SPI、RT_USING_SFUD、RT_SFUD_USING_SFDPBSP_USING_GPIO使能 GPIOPIN 设备y自动选中RT_USING_PINBSP_USING_UART1/2/3分别使能 UART1、UART2、UART3n需要BSP_USING_UART开启默认 yBSP_USING_SOFT_I2C1软件 I2C1 总线swi2c1nSCL 引脚默认 24PB0、SDA 引脚默认 25PB1BSP_USING_SPI1/2/3使能 SPI1、SPI2、SPI3 总线n需要BSP_USING_SPI开启BSP_USING_ADC1/2使能 ADC1、ADC2n需要BSP_USING_ADC开启BSP_USING_TIM2/3/4使能 TIM2、TIM3、TIM4时钟设备n需要BSP_USING_TIM开启BSP_USING_ON_CHIP_FLASH使能片内 Flashn—BSP_USING_WDT使能看门狗n自动选中RT_USING_WDT从 Kconfig 定义可以看出各外设的引脚映射约束在 bsp/airm2m/air32f103/board/board.c 中均有对应的初始化实现UARTUART1 → PA9(TX)/PA10(RX)UART2 → PA2(TX)/PA3(RX)UART3 → PC10(TX)/PC11(RX)其中 UART3 需要使能GPIO_PartialRemap_USART3部分重映射SPISPI1 → PA5/PA6/PA7时钟取自 PCLK2216MHz 总线SPI2 → PB13/PB14/PB15时钟取自 PCLK1108MHz 总线TIMTIM1 挂载于 APB2TIM2/3/4 挂载于 APB1定时器时钟统一按 HCLK 频率返回PWMTIM1 → PA8~PA11TIM2 → PA0~PA3TIM3 → PA6/PA7/PB0/PB1TIM4 → PB6~PB9。开启板载 SPI FlashW25Q64示例当在 menuconfig 中打开BSP_USING_SPI_FLASH后构建脚本 bsp/airm2m/air32f103/board/SConscript 会额外把 bsp/airm2m/air32f103/board/ports/spi_flash_init.c 纳入编译。该文件通过组件自动初始化机制完成 SPI Flash 挂载static int rt_hw_spi_flash_init(void) { rt_hw_spi_device_attach(spi1, spi10, GET_PIN(A, 4)); if (RT_NULL rt_sfud_flash_probe(W25Q64, spi10)) { return -RT_ERROR; }; return RT_EOK; } INIT_COMPONENT_EXPORT(rt_hw_spi_flash_init);即把 SPI1 总线上的设备命名为spi10片选 CS 为 PA4再通过 SFUD 组件探测 W25Q64 并注册为块设备随后即可配合 DFS 文件系统使用。片内 Flash 分区FAL当启用 FAL 组件且开启分区表配置FAL_PART_HAS_TABLE_CFG时bsp/airm2m/air32f103/board/ports/fal_cfg.h 提供了如下默认分区划分#define FAL_PART_TABLE \ { \ {FAL_PART_MAGIC_WROD, app, onchip_flash, 0, 112 * 1024, 0}, \ {FAL_PART_MAGIC_WROD, param, onchip_flash, 112* 1024 , 16 * 1024, 0}, \ }即 128KB 片内 Flash 被划分为app分区偏移 0112KB用于应用程序param分区偏移 112KB16KB用于参数存储便于后续结合 OTA 升级或掉电保存场景使用。注意事项工程默认通过 DapLink 下载程序首次使用前请确认 DapLink 驱动已正确安装串口参数必须为115200-8-1-N否则控制台输出会出现乱码默认配置仅开启 GPIO 与 uart1其余外设需通过 menuconfig 显式开启并重新生成工程Air32F103 主频最高可达 216MHz配置系统时钟时注意与 Flash 等待周期FLASH_Div_2匹配。目录结构与源码导读本 BSP 的核心目录结构如下便于读者按需深入路径说明bsp/airm2m/air32f103/applications应用入口main.cLED 闪烁示例与时钟打印bsp/airm2m/air32f103/board板级初始化board.c/board.h、外设引脚映射、FAL 与 SPI Flash 移植ports/bsp/airm2m/air32f103/librariesAIR32F10x 标准外设库、CMSIS、各工具链启动文件及 RT-Thread 设备驱动rt_drivers/bsp/airm2m/air32f103/rtconfig.h当前生效的 RT-Thread 配置由 menuconfig 生成bsp/airm2m/air32f103/rtconfig.pySCons 构建配置定义工具链与编译选项bsp/airm2m/air32f103/board/linker_scriptsIARlink.icf、GCClink.lds、MDKlink.sct三种链接脚本总结RT-Thread 为合宙 Air32F103 开发板提供了开箱即用的 BSP默认仅占用 GPIO 与 uart1 即可跑通系统串口输出 216MHz 主频下的完整启动日志借助 ENV 工具与menuconfig开发者可以按需开启 UART、SPI、软件 I2C、ADC、TIM、WDT、片内 Flash 等外设并通过scons --targetmdk4/mdk5/iar一键重生成工程。配合board.c中清晰的时钟树与引脚映射实现、ports/下的 SFUD/FAL 移植该 BSP 既适合新手快速体验 RT-Thread也适合作为开发者扩展板载外设驱动的参考模板。【免费下载链接】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创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考