RT-Thread YC3121-pos 板级支持包(BSP)开发上手指南
发布时间:2026/10/4 2:55:24 作者:尧图编辑部 阅读量: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点击查看免费下载YC3121-pos 是易兆微YICHIP推出的国产 MCU 开发板其 BSP 已完整集成于 RT-Thread 仓库开发者可在其上直接运行 RT-Thread 内核、MSH 命令行finsh与 GPIO/UART 驱动框架。本文以 bsp/yichip/yc3121-pos/README.md 为骨架结合该 BSP 的源码、配置与工程文件系统讲解板级资源、目录结构、工具链编译、菜单配置、板级初始化流程与驱动实现要点帮助你快速把 RT-Thread 跑起来并在此平台上进行二次开发。YC3121-pos 开发板1. BSP 概览YC3121-pos 是什么本文档描述的 YC3121-pos 板级支持包位于仓库bsp/yichip/yc3121-pos目录是让 RT-Thread 运行于 YC3121-pos 开发板的完整工程套件包含板级初始化与时钟配置drivers/board.cGPIO 与 UART 设备驱动drivers/drv_gpio.c、drivers/drv_uart.c适配 GCC / Keil (ARMCC) / IAR 三套工具链的构建脚本与链接脚本drivers/linker_scripts/link.lds、link.sct、link.icf芯片寄存器定义与 SDK 底层库libraries/core、libraries/sdkKeilproject.uvprojx与 IARproject.eww、project.ewp工程模板。阅读本文后你可以完成环境准备 → 编译固件 → 下载运行 → 通过 MSH 控制台验证系统并在此基础上移植或裁剪外设驱动。2. 开发板与 MCU 资源2.1 核心 MCUYC3121-pos 搭载 YC3121 主控芯片核心规格如下项目规格内核ARM 32-bit Cortex-M0主频96 MHz存储512 KB FLASH64 KB SRAM调试接口SWD / ICE注意BSP 源码 drivers/board.c 中将SystemCoreClock定义为 48 MHz 用于 SysTick 分频计算与 README 标称的 96 MHz 存在差异具体时钟树以芯片手册为准如需调整系统主频请同步修改该宏与 rtconfig.h 中的相关配置。2.2 板载外设开发板板载资源如下LED4 个梯形矩阵键盘用于按键矩阵扫描输入蜂鸣器可编程发声USB提供 USB 接口UART串口通信SPI LCDSPI 接口液晶屏SPI NFCSPI 接口 NFC 模块7816 接口接触 IC 卡支持 3V、1.8V 电平7811 接口三轨磁条卡解码模块支持 ISO/ABA AAMVA 及 IBM 等标准卡TIMER9 个 32 位定时器支持 PWMTRNG1 个真随机数发生器。3. 安全加密算法能力YC3121 内置硬件安全引擎覆盖对称、非对称与摘要校验三大类算法适合 POS、金融支付等安全敏感场景对称算法DES、TDES、AES-128/192/256、国密 IVSM4非对称算法RSA-1024/2048、国密 IISM2、ECCHASH 校验算法SHA-1/224/256/384/512、国密 IIISM3。从仓库源码结构看BSP 的 libraries/sdk 提供了 DMA、GPIO、SysTick、UART、WDT 等基础外设的底层驱动安全引擎相关的寄存器与接口定义可进一步查阅 libraries/core/yc3121.h 与 libraries/core/rom_api.hROM API 声明应用层可按芯片数据手册调用对应硬件加速接口。4. BSP 目录结构解析bsp/yichip/yc3121-pos/ ├── applications/ # 用户应用层 │ ├── main.c # 入口 main()默认 LED 闪烁示例 │ └── SConscript ├── drivers/ # 板级驱动层 │ ├── board.c # 时钟/SysTick/堆/控制台初始化 │ ├── board.h # SRAM 布局与堆边界定义 │ ├── drv_gpio.c/h # GPIO 驱动PIN 框架 │ ├── drv_uart.c/h # UART 驱动串口框架 │ ├── Kconfig # 硬件驱动菜单配置 │ ├── SConscript │ └── linker_scripts/ # GCC/Keil/IAR 链接脚本 ├── libraries/ │ ├── core/ # 芯片头文件、system 与 ROM API │ ├── sdk/ # yc_dma/yc_gpio/yc_systick/yc_uart/yc_wdt │ ├── startup/ # 各工具链启动文件flash_start*.s、startup.s │ └── SConscript ├── figures/ # README 配图开发板外观 ├── Kconfig # BSP 顶层菜单 ├── SConstruct # scons 构建入口 ├── rtconfig.h # 内核/组件/驱动配置头文件 ├── rtconfig.py # 工具链与编译选项 ├── project.uvprojx # Keil 工程 ├── project.eww / project.ewp # IAR 工程 └── template.* # 工程模板5. 快速上手编译与构建5.1 获取 RT-Thread 源码RT-Thread 根目录即当前仓库BSP 位于bsp/yichip/yc3121-pos。构建时SConstruct会优先读取环境变量RTT_ROOT若未设置则默认按os.getcwd() /../../..推导根目录参见 SConstruct因此直接在 BSP 目录下执行 scons 即可定位到仓库根。5.2 工具链配置rtconfig.pyrtconfig.py 中声明了ARCHarm、CPUcortex-m0并支持三种工具链切换CROSS_TOOL可通过环境变量RTT_CC覆盖CROSS_TOOLPLATFORM工具EXEC_PATH 默认值gccgccarm-none-eabi-gccC:\gcc-arm-none-eabi-7-2018-q2-update-win32keilarmccarmcc/armasm/armlinkC:/Keil_v5iariccarmiccarm/iasmarm/ilinkarmC:/Program Files (x86)/IAR Systems/Embedded Workbench 7.2各工具链对应不同的输出格式与链接脚本GCCTARGET_EXTelf链接脚本drivers/linker_scripts/link.lds入口Reset_Handler编译选项-mcpucortex-m0 -mthumb -ffunction-sections -fdata-sectionsdebug 构建带-O0 -gdwarf-2 -grelease 为-O2构建后通过objcopy生成rtthread.binKeilTARGET_EXTaxf散射文件drivers\linker_scripts\link.sct使用 MicroLIB--library_typemicrolib构建后通过fromelf输出反汇编与镜像信息IARTARGET_EXTout配置脚本drivers/linker_scripts/link.icf入口__iar_program_start构建后由ielftool生成rtthread.bin。EXEC_PATH均可用环境变量RTT_EXEC_PATH覆盖便于接入自定路径的交叉编译器。5.3 编译步骤# 在 BSP 目录下执行 scons -j4 # 按 rtconfig.py 中默认工具链gcc构建 scons -c # 清理构建产物构建成功后生成的rtthread.bin可通过 SWD / ICE 调试接口下载到板卡运行。使用 Keil / IAR 的开发者可直接打开project.uvprojx或project.eww进行编译与在线调试。6. 配置系统Kconfig 与 rtconfig.h6.1 BSP 顶层 Kconfigbsp/yichip/yc3121-pos/Kconfig 定义了 BSP 菜单入口source $(RTT_DIR)/Kconfig引入 RT-Thread 全局配置并rsource drivers/Kconfig引入硬件驱动菜单同时声明SOC_SWM320VET7符号并默认选中RT_USING_COMPONENTS_INIT与RT_USING_USER_MAIN保证组件自动初始化与用户main()入口生效。6.2 硬件驱动菜单drivers/Kconfig 提供如下开关BSP_USING_GPIO启用 GPIO自动select RT_USING_PINPIN 设备框架默认yBSP_USING_UART0启用 UART0PA2/3 R/T自动select RT_USING_SERIAL默认yBSP_USING_UART1启用 UART1PC2/3 R/T默认n。使用 menuconfig 可视化配置时执行scons --menuconfig6.3 关键内核配置rtconfig.hrtconfig.h 为当前生效的配置快照核心项包括配置项值说明RT_NAME_MAX12内核对象名最大长度RT_TICK_PER_SECOND100系统时钟节拍100 tick/秒RT_THREAD_PRIORITY_MAX32线程最大优先级数IDLE_THREAD_STACK_SIZE256空闲线程栈大小字RT_MAIN_THREAD_STACK_SIZE2048main 线程栈大小RT_CONSOLE_DEVICE_NAMEuart0控制台设备名RT_CONSOLEBUF_SIZE128控制台缓冲区大小FINSH_THREAD_STACK_SIZE4096finsh/MSH 线程栈大小RT_VER_NUM0x50300RT-Thread 版本号5.3.0配置同时启用了信号量/互斥量/事件/邮箱/消息队列IPC、内存池/小内存管理/内存堆RT_USING_SMALL_MEM_AS_HEAP、串口设备框架RT_USING_SERIAL_V1环形缓冲 64 字节、PIN 框架RT_USING_PIN、MSHFINSH_USING_MSH与历史命令、符号表补全等能力并内置时区默认值东八区RT_LIBC_TZ_DEFAULT_HOUR 8。7. 板级初始化流程drivers/board.c 中的rt_hw_board_init()是 BSP 的板级初始化入口流程如下bsp_clock_config()调用SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND)按系统节拍配置 SysTick 定时中断board.crt_system_heap_init(HEAP_BEGIN, HEAP_END)初始化系统堆条件编译RT_USING_HEAPrt_hw_uart_init()初始化串口驱动条件编译RT_USING_SERIALrt_console_set_device(RT_CONSOLE_DEVICE_NAME)将控制台绑定到uart0rt_components_board_init()执行板级组件自动初始化条件编译RT_USING_COMPONENTS_INIT。SysTick 中断服务函数SysTick_Handler()依次调用rt_interrupt_enter()→rt_tick_increase()→rt_interrupt_leave()为内核提供系统时基。堆区边界在 board.h 中定义SRAM 基址0x20000、大小0x1000064 KBHEAP_BEGIN按工具链区分——ARMCC 取Image$$RW_IRAM1$$ZI$$LimitIAR 取__segment_end(HEAP)GCC 取__bss_endHEAP_END为SRAM_END。8. 驱动实现要点8.1 UART 串口驱动drivers/drv_uart.c 基于 RT-Thread 串口设备框架struct rt_uart_ops实现核心回调如下configure根据struct serial_configure将参数映射到UART_InitTypeDef——波特率透传、流控固定为FlowCtrl_None、模式固定为Mode_duplex数据位支持 9 位/8 位默认 8停止位支持 2 位/1 位默认 1校验位支持奇校验/偶校验/无校验默认无再调用 SDK 的UART_Init()完成配置controlRT_DEVICE_CTRL_SET_INT时通过UART_SetRxITNum()、UART_ITConfig()使能接收中断并打开对应 IRQRT_DEVICE_CTRL_CLR_INT则关闭putc/getc轮询UART_IsUARTBusy()后UART_SendData()发送UART_ReceiveDataLen()非零时UART_ReceiveData()读取无数据返回 -1。8.2 GPIO 驱动drivers/drv_gpio.c 接入 RT-Thread PIN 设备框架配合 libraries/sdk/yc_gpio.c 实现引脚的读写、方向与模式控制上层统一使用rt_pin_mode()、rt_pin_write()、rt_pin_read()等 PIN API 即可操作板载 LED 等外设。9. 应用示例LED 闪烁applications/main.c 提供了一个开箱即用的 LED 闪烁示例将LED_PIN定义为 2对应 PA12配置为输出模式然后循环拉高 500ms、拉低 500ms#include rtthread.h #include rtdevice.h /* defined the LED pin: PA12 */ #define LED_PIN 2 int main(void) { int count 1; /* set LED4 pin mode to output */ 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; }烧录运行后若 LED 以 1 Hz 频率闪烁说明内核调度、GPIO 驱动与用户线程均正常工作。之后可通过 UART0 连接串口终端进入 MSH 命令行finsh执行help、list_thread、list_device等命令查看系统状态。10. 调试与下载调试接口板载 SWD / ICE配合 J-Link / DAP-Link 等调试器即可下载与在线调试Keil打开project.uvprojx选择对应调试器后编译下载template.uvprojx为工程模板IAR打开project.eww工作区或project.ewp工程工程已配置 IAR 链接脚本与入口串口控制台BSP 默认将控制台绑定到uart0PA2/3 R/T波特率按UART_InitTypeDef.BaudRate默认设置可通过 MSH 交互验证外设与线程运行状态。11. 进阶扩展建议新增外设驱动在drivers/下参照drv_gpio.c/drv_uart.c的模式实现设备驱动并在drivers/Kconfig中注册使能开关启用 UART1在 menuconfig 中打开BSP_USING_UART1PC2/3 R/T即可扩展第二路串口安全算法应用基于 ROM APIlibraries/core/rom_api.h调用硬件加密引擎可在 POS、支付终端场景中实现 SM2/SM3/SM4 等国产密码套件FAL / 文件系统如需片内 FLASH 分区管理可参考同系列 bsp/yichip/yc3122-pos 中drivers/ports/fal_cfg.h与fal_flash_yc3122_port.c的移植方式该 BSP 基于双核 YC3122配置方式类似。12. 小结YC3121-pos BSP 为国产 Cortex-M0 平台的 RT-Thread 开发提供了完整闭环三工具链构建、menuconfig 配置、板级初始化、PIN/串口设备框架驱动以及可直接运行的 LED 示例一应俱全。基于本文的路径指引你可以快速完成从编译烧录到外设驱动二次开发的整个过程并借助芯片内置的安全算法与丰富接口在 POS、金融支付与物联网终端领域落地应用。赞分享操作系统嵌入式物联网嵌入式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 在 NXP LPC55S06-EVK 上的板级支持包BSP开发指南RT Thread 在 NXP LPC55S06 EVK 上的板级支持包BSP开发指南 LPC55S06 EVK 是 NXP 推出的基于 Arm Corte操作系统嵌入式物联网嵌入式OSRTOSRT-Thread 在 YICHIP YC3122-pos 开发板上的 BSP 移植指南双核国产 MCU 的板级支持包解析与上手实践RT Thread 在 YICHIP YC3122 pos 开发板上的 BSP 移植指南双核国产 MCU 的板级支持包解析与上手实践 导读 本文基于 RT T操作系统嵌入式物联网嵌入式OSRTOSRT-Thread STM32L496G Discovery BSP 板级支持包开发指南从快速上手到外设驱动配置RT Thread STM32L496G Discovery BSP 板级支持包开发指南从快速上手到外设驱动配置 本文以 RT Thread 官方为 STM3操作系统嵌入式物联网嵌入式OSRTOS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考