
操作系统嵌入式物联网嵌入式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/synwit/swm341-mini/README.md 为骨架系统讲解如何在华芯微特SYNWITSWM341 开发板上将 RT-Thread 运行起来从芯片资源摸底、MDK5 / env 双工具链编译到烧写执行与串口验证再到外设驱动的启用方式与示例代码并结合仓库内真实源码板级初始化、驱动层、示例程序、Kconfig 配置给出源码级佐证。读者读完可独立完成该 BSP 的编译、烧写、运行和常用外设驱动裁剪配置。一、BSP 概览与芯片资源该 BSP板级支持包位于仓库 bsp/synwit/swm341-mini 目录面向 SYNWIT 的 SWM341 系列开发板是 RT-Thread 官方支持国产 MCU 的典型示例之一。其标签为SYNWIT、Cortex-M33、SWM341、国产MCU。BSP 目录中同时提供了 MDK5 工程project.uvprojx、IAR 工程project.ewp以及基于 SCons 的编译脚本SConstruct、SConscript并配套了完整的板级初始化代码 board.c 与应用示例 main.c。1.1 内核与存储内核32 位 ARM Cortex-M33 内核带硬件单周期乘法工作频率最高150MHz24 位系统定时器集成 NVIC最多104 个中断、8 级可配置优先级通过 SWD 接口烧录。内置 LDO供电电压范围 2.0V ~ 3.6V。片上 SRAM64KBSRAM_BASE 0x20000000、SRAM_SIZE 0x10000见 board.h。片上 FLASH512KB支持用户定制 ISP在系统编程更新用户程序自带 Cache。1.2 关键外设资源SDRAMC 模块支持 16Bit 位宽、兼容 PC133 标准的 SDRAM 颗粒容量 2MB ~ 32MB。SFC 模块最大支持外置 16MB SPI NOR FLASH。GPIO多达 7 组共112 个 GPIO每个 IO 均支持位带操作中断触发可配置边沿检测/电平检测、高/低电平、上升/下降/双边沿。串行接口4 路 UART独立 8 字节 FIFO、2 路 SPI8 字节独立 FIFO支持 SPI/SSI 协议与 Master/Slave、2 路 I2C7/10 位地址Master/Slave、2 路 CAN协议 2.0A 11Bit 与 2.0B 29Bit 标识符、1 路 SDIO、1 路 USB OTG。TFT-LCD 驱动模块支持 SYNC 接口与 MPU 接口外部 LCD最高分辨率 1024×768实际可配置RGB565 / RGB888 格式可选。PWM 控制模块5 组 16 位 PWM 发生器每组 4 路输出支持新周期开始中断、高电平结束中断、刹车中断、中心对称半周期中断、死区控制并可硬件自动触发 ADC 采样。定时器模块5 路 32 位通用定时器、12 路 32 位基本定时器、32 位看门狗定时器溢出后可配置触发中断或复位。RTC 模块可自由设置日期年、月、周、日与时间时、分、秒及闹钟自动识别闰年支持 RTC 中断从 Sleep 模式唤醒芯片。DMA 模块4 路 DMA支持特定外设与存储器之间或存储器与存储器之间的数据搬运。模拟外设2 路 12 位 SAR ADC、1 路 12 位 DAC、3 路比较器、4 路运算放大器。欠压检测BOD支持欠压检测、欠压中断与复位选择。时钟源20MHz/40MHz 精度达 1% 的片内时钟源、32K 片内时钟源、2~32MHz 片外晶振。二、编译说明MDK5 与 env 双方案本 BSP 为开发者提供 MDK5 工程同时也完整支持 RT-Thread 标准的 envSCons构建体系两者产出的烧写镜像一致。2.1 方案一MDK5 图形化编译双击 project.uvprojx 打开 MDK5 工程直接编译并下载程序到开发板即可。工程默认配置使用Jlink 仿真器下载程序在通过 Jlink 连接开发板到 PC 的基础上点击下载按钮即可将程序下载到开发板。工程中还提供了模板工程 template.uvprojx 与 template.uvoptx便于开发者基于干净模板二次开发。2.2 方案二env 工具 scons 命令行编译推荐熟悉 RT-Thread 的开发者使用 env 工具在 console 下进入 BSP 目录后运行scons编译正确无误后会生成rtthread.elf与rtthread.bin两个文件其中rtthread.bin即为可烧写到设备运行的镜像。从源码层面看该 BSP 的 SCons 构建配置由 rtconfig.py 驱动其中定义了三种工具链选择工具链平台编译器路径变量说明gccgccEXEC_PATH rC:\Users\XXYYZZ前缀arm-none-eabi-CPU 为cortex-m33keilarmclangEXEC_PATH rC:/Keil_v5使用 ARMCLANGiariccarmEXEC_PATH rC:/Program Files (x86)/IAR Systems/...使用 IAR EWrtconfig.py中 GCC 工具的编译参数为-mcpucortex-m33 -mthumb -mfpufpv4-sp-d16 -mfloat-abihard -ffunction-sections -fdata-sections链接时使用board/linker_scripts/link.lds链接脚本并在编译后通过 POST_ACTION 自动调用objcopy生成rtthread.bin并打印镜像尺寸。环境变量约定RTT_CC覆盖编译器类型、RTT_ROOT指定 RT-Thread 源码根目录、RTT_EXEC_PATH指定编译器实际安装路径。若在无 env 的纯命令行环境可先设置这三个环境变量再执行scons。三、烧写与执行3.1 硬件连接使用USB 数据线连接开发板到 PC。注意需要下载安装串口驱动以支持CH340芯片使用 MDK5 需要安装 SWM341 相关的 pack。USB 数据线同时承担串口通讯与供电。使用Jlink连接开发板到 PC需要安装 Jlink 驱动。将串口 0引脚[PM0/PM1]与板上 USB 转串口模块J8相连串口配置方式为115200-N-8-1波特率 115200、无校验、8 数据位、1 停止位。从驱动源码看串口设备名在 drv_uart.c 中注册为uart0、uart1、uart2、uart3而 BSP 默认将控制台绑定到 uart0RT_CONSOLE_DEVICE_NAME uart0见 rtconfig.h与上述接线一致。3.2 烧写方式推荐方式使用 Keil 软件直接下载工程默认配置 Jlink 下载。备选方式使用 env 工具正确编译产生rtthread.bin后可通过 ISP 方式烧写到设备中。建议使用 Keil 直接下载ISP 下载较复杂。3.3 运行结果如果编译与烧写无误复位设备后可以看到板载蓝色 LED 闪烁对应 main.c 中GET_PIN(B,0)引脚以 500ms 周期翻转串口上打印 RT-Thread 启动 logo\ | / - RT - Thread Operating System / | \ 4.1.1 build May 13 2022 10:16:43 2006 - 2022 Copyright by RT-Thread team msh 出现msh 提示符即代表 RT-Thread 内核已成功运行可输入 RT-Thread 命令交互。3.4 板级启动流程源码解析为什么复位后系统能跑起来关键在 board.c 的rt_hw_board_init()其执行顺序为bsp_clock_config()调用SystemInit()完成时钟初始化再用SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND)配置系统节拍默认RT_TICK_PER_SECOND 1000即 1ms 一个 tick并开启 SysTick 中断SysTick_Handler中调用rt_tick_increase()驱动内核心跳。堆初始化通过rt_system_heap_init(HEAP_BEGIN, HEAP_END)建立内存堆其中HEAP_END为 64KB SRAM 末尾见 board.h。SDRAM 可选堆若开启BSP_USING_SDRAM且使用RT_USING_MEMHEAP_AS_HEAP则调用swm_sdram_init()并将 SDRAM 初始化为 memheap。引脚驱动初始化swm_pin_init()默认开启。串口驱动初始化swm_uart_init()默认开启并将控制台设备设为RT_CONSOLE_DEVICE_NAME。最后调用rt_components_board_init()完成板级组件初始化。四、外设支持与驱动裁剪本 BSP 目前对外设的支持情况如下表片上外设支持情况备注GPIO支持共112个UART支持UART0/1/2/3ADC支持ADC0/1DAC支持DACCAN支持CAN0/1TIM支持TIM0/1/2/3/4,BTIM0/1/2/3/4/5/6/7/8/9/10/11I2C支持软件 I2C0/1PWM支持PWM0/1/2/3/4RTC支持RTCSPI支持SPI0/1WDT支持WDTCRC/RNG支持CRC/RNGSDIO支持SDIOSDRAM支持SDRAM外设驱动的注册与硬件抽象实现位于 bsp/synwit/libraries/SWM341_drivers 目录drv_gpio.c、drv_uart.c、drv_adc.c、drv_can.c、drv_pwm.c、drv_rtc.c、drv_spi.c、drv_wdt.c、drv_sdio.c、drv_sdram.c、drv_crypto.c、drv_timer.c等底层依赖华芯微特官方 CSL 外设库 bsp/synwit/libraries/SWM341_CSL。4.1 外设开关board/Kconfig 与 menuconfig各外设的启用与否由 board/Kconfig 控制可通过 env 工具执行menuconfig勾选。关键配置项及其引脚映射如下UART默认开启 UART0BSP_USING_UART0 (M0/RX, M1/TX)UART1(D4/RX, D3/TX)、UART2(C1/RX, C0/TX)、UART3(C2/RX, C3/TX)默认关闭。GPIO默认开启自动选择RT_USING_PIN。ADCADC0 提供 CHN0~CHN11引脚 C6/C5/C4/C3/C2/C1/C0/A15/A14/A13/A12/A10ADC1 提供 CHN0~CHN6引脚 D1/D0/C13/C12/C11/C10/C9。DACBSP_USING_DAC。CANCAN0(TX/B4, RX/B5)、CAN1(TX/B2, RX/B3)。TIMTIM0~TIM4 及 BTIM0~BTIM11。软件 I2CBSP_USING_SOFT_I2C0默认 SCL1、SDA0、BSP_USING_SOFT_I2C1默认 SCL37、SDA36。PWMPWM0~PWM4每组含 A/AN/B/BN 四个通道如 PWM0A(M1)、PWM0AN(M4)、PWM0B(M2)、PWM0BN(M5)。Kconfig 中特别注释PWMA、PWMAN、PWMB、PWMBN 均为 channel0性能相同。注意 PWM4AN(B14) 与 PWM4BN(B12) 分别占用 SWDIO 与 SWDCK开启后会影响 SWD 调试。SPISPI0(CS/M3, MISO/M4, MOSI/M5, CLK/M2)、SPI1(CS/B5, MISO/B3, MOSI/B4, CLK/B2)。RTCBSP_USING_RTC。WDTBSP_USING_WDT。CRC/RNGBSP_USING_CRC、BSP_USING_RNG均选择RT_USING_HWCRYPTO。SDIOSD 卡BSP_USING_SDIO自动选择 DFS 与 elmfat 文件系统。SDRAMBSP_USING_SDRAM默认容量BSP_SDRAM_SIZE 0x8000008MB自动选择RT_USING_MEMHEAP_AS_HEAP使 SDRAM 作为系统大容量堆。GT9147 电容触摸BSP_USING_GT9147复用 swi2c0默认 RST39、IRQ48自动拉取 gt9147 软件包。RGB LCDBSP_USING_RGB_LCD自动选择BSP_USING_SDRAM可选BSP_USING_LVGL开启 LVGL 图形库。当前仓库默认 rtconfig.h 仅开启了BSP_USING_UARTUART0与BSP_USING_GPIO两项片上外设其余外设需在 menuconfig 中按需勾选后重新编译。4.2 内核与组件默认配置rtconfig.h 中值得关注的默认配置包括内核RT_THREAD_PRIORITY_MAX 32、RT_TICK_PER_SECOND 1000、RT_USING_HOOK、软件定时器RT_USING_TIMER_SOFT优先级 4、栈 512、RT_USING_OVERFLOW_CHECK。IPC信号量、互斥量、事件、邮箱、消息队列全部开启。内存管理小内存管理算法RT_USING_SMALL_MEM、RT_USING_MEMHEAP、RT_MEMHEAP_FAST_MODE、RT_USING_MEMHEAP_AS_HEAP为 SDRAM 堆预留。控制台RT_CONSOLE_DEVICE_NAME uart0、RT_CONSOLEBUF_SIZE 128。ShellMSH FinshFINSH_THREAD_STACK_SIZE 4096、历史记录 5 行、支持命令补全。架构ARCH_ARM_CORTEX_M33启用硬件原子操作RT_USING_HW_ATOMIC、8/16 位原子。五、示例程序从 LED 闪烁到外设验证main.c 内置了大量以MSH_CMD_EXPORT导出的 msh 命令示例编译对应外设选项后即可在串口 shell 中直接调用验证。5.1 基础 LED 闪烁#define LED_PIN GET_PIN(B,0) int main(void) { int count 1; rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT); while (count) { rt_pin_write(LED_PIN, PIN_HIGH); rt_thread_mdelay(500); rt_pin_write(LED_PIN, PIN_LOW); rt_thread_mdelay(500); } return RT_EOK; }5.2 常用验证命令一览msh 命令功能依赖配置pin_sample配置 KEY1A8下降沿中断按下打印key1 irq!BSP_USING_GPIOadc_vol_sample读取 adc0 通道 0 原始值与电压参考电压 3.3V、12 位转换BSP_USING_ADCdac_vol_sample value向 dac 通道 0 写入值并打印对应电压BSP_USING_DACcan_sample [dev]创建接收线程并以中断方式收发 CAN 帧标准帧 ID 0x788 字节数据BSP_USING_CANclock_timer_sample周期模式定时器2 秒超时回调打印 tickBSP_USING_TIMpwm_sample周期 0.5ms、脉宽 100us 输出BSP_USING_PWMrtc_sample设置 2000-02-28 23:59:553 秒后读取并打印BSP_USING_RTCwdt_sample设置 5 秒看门狗超时并启动BSP_USING_WDTspi_w25q_sample通过rt_spi_send_then_recv()与rt_spi_transfer_message()两种方式读取 W25Q 系列 SPI Flash 的 ID0x90 命令BSP_USING_SPI SFUDelmfat_sample在 SPI Flash / SD 卡上创建 elmfat 文件系统、挂载、读写/user/test.txtRT_USING_DFS_ELMFAT或BSP_USING_SDIOdynmem_sample线程内循环分配/释放指数增长的内存块验证 SDRAM memheapBSP_USING_SDRAMcrypto_sampleCRC32 计算与 20 次随机数输出BSP_USING_CRC/BSP_USING_RNGgt9147_sample中断方式读取 GT9147 触摸点最多 5 点坐标信息BSP_USING_GT9147以 SPI 示例为例其 SPI Flash 挂载过程在rt_hw_spi_flash_init()中完成先通过rt_hw_spi_device_attach(spi0, spi00, GPIOM, PIN3)将设备挂到 SPI0 总线并指定片选引脚再调用rt_sfud_flash_probe(norflash0, spi00)探测 Flash并通过INIT_COMPONENT_EXPORT自动初始化体现了 RT-Thread 组件自动初始化机制的典型用法。六、参考资料同系列 SWM320 BSP 可参考 bsp/synwit/swm320-mini/README.md其芯片库SWM320_CSL与 SWM341 版本并存于仓库便于对比移植。华芯微特驱动实现细节可查阅 bsp/synwit/libraries/SWM341_drivers 下的各drv_*.c文件以及 bsp/synwit/libraries/注意事项.md。RT-Thread 通用开发文档内核、MSH、设备驱动框架、文件系统等位于仓库 documentation 目录组件源码位于 components内核源码位于 src 与 include。芯片数据手册与更多 SWM341 细节请以华芯微特官方技术资料为准。赞分享操作系统嵌入式物联网嵌入式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 MM32F5265-OB 开发板 BSP 适配指南Cortex-M33 国产 MCU 从编译到驱动开发RT Thread MM32F5265 OB 开发板 BSP 适配指南Cortex M33 国产 MCU 从编译到驱动开发 MM32F5265 OB 是灵动微操作系统嵌入式物联网嵌入式OSRTOSRT-Thread 在 Microchip SAME70Q21B 上的 BSP 实践300MHz Cortex-M7 芯片特性、工程结构与构建指南RT Thread 在 Microchip SAME70Q21B 上的 BSP 实践300MHz Cortex M7 芯片特性、工程结构与构建指南 SAME7操作系统嵌入式物联网嵌入式OSRTOSRT-Thread EK-RA4E2 开发板 BSP 实战在瑞萨 RA4E2Cortex-M33上构建、烧录并扩展外设RT Thread EK RA4E2 开发板 BSP 实战在瑞萨 RA4E2Cortex M33上构建、烧录并扩展外设 本文以 RT Thread 仓库中操作系统嵌入式物联网嵌入式OSRTOS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考