- 操作系统
- 嵌入式
- 物联网
- 嵌入式OS
- RTOS
【免费下载链接】rt-thread
RT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/
NUCLEO-F091RC 是意法半导体推出的基于 ARM Cortex-M0 内核的 ST Nucleo-64 系列开发板,本文以 RT-Thread 开源仓库中 bsp/stm32/stm32f091-st-nucleo 目录下的 BSP(板级支持包)为核心,系统讲解该 BSP 的板载资源、外设驱动支持现状、MDK5 快速上手流程,以及通过 ENV 工具开启 SPI、I2C、TIMER、PWM、ADC、RTC 等片上外设的进阶配置方法。读完本文,你将能够把 RT-Thread 操作系统真正运行在这块开发板上,并根据项目需要按需裁剪与扩展外设驱动。
开发板介绍
STM32F091RC-NUCLEO 开发板是 ST 官方推出的一款基于 ARM Cortex-M0 内核的开发板,最高主频为 48MHz。该开发板具有丰富的扩展接口(Arduino 兼容接口),可以方便地验证 STM32F091 芯片性能,同时板载 ST-LINK 调试器,支持即插即用。
该开发板常用板载资源如下:
- MCU:STM32F091RC,主频 48MHz,256KB FLASH,32KB RAM
- 外部 RAM:无
- 外部 FLASH:无
- 常用外设
- 按键:1 个 user 按键(兼具唤醒功能,连接 PC13)
- 常用接口:USB 转串口、Arduino 接口等
- 调试接口:标准 SWD
从 BSP 源码 board/board.h 可以看到与资源定义对应的宏:STM32_FLASH_SIZE定义为256 * 1024(256KB),STM32_SRAM_SIZE定义为 32(32KB),HEAP_BEGIN由链接器符号(MDK 的Image$$RW_IRAM1$$ZI$$Limit、IAR 的 CSTACK 段或 GCC 的__bss_end)动态确定,HEAP_END为 SRAM 末端地址0x20000000 + 32 * 1024,即系统堆从 BSS 段末尾一直延伸到片内 SRAM 顶部。
外设支持情况
本 BSP 目前对外设的支持情况如下表所示:
| 板载外设 | 支持情况 | 备注 |
|---|---|---|
| ST-LINK 虚拟串口 | 支持 | 使用 USART2 |
| 片上外设 | 支持情况 | 备注 |
| GPIO | 支持 | PA0, PA1... PC15 ---> PIN: 0, 1...64 |
| UART | 支持 | USART1/2 |
| SPI | 支持 | SPI1 |
| I2C | 支持 | (软件 I2C) |
| TIMER | 支持 | TIM14/TIM16/TIM17 |
| ADC | 支持 | ADC1 |
| RTC | 支持 | 支持外部晶振 LSE 和内部低速时钟 LSI |
| PWM | 支持 | TIM2 输出 |
| FLASH | 支持 | 片上 FLASH(FAL 抽象) |
| IWG | 支持 | 独立看门狗 |
外设支持对应的驱动配置
上述外设支持能力均可在 board/Kconfig 中逐一找到对应开关,默认开启的项目与当前仓库中 rtconfig.h 的实际配置一致:
BSP_USING_USB_TO_USART(板载 USB 转串口,对应 USART2,默认开启,并自动选中BSP_USING_UART与BSP_USING_UART2)BSP_USING_GPIO(默认开启,自动选中RT_USING_PIN)BSP_USING_UART(默认开启,自动选中RT_USING_SERIAL),其中BSP_STM32_UART_V1_TX_TIMEOUT默认 2000
在 rtconfig.h 中可以看到 BSP 默认的片上外设组合为 GPIO + UART2,控制台设备为uart2(RT_CONSOLE_DEVICE_NAME "uart2"),并启用了RT_USING_SERIAL_V1与RT_SERIAL_USING_DMA,这意味着串口驱动同时具备 DMA 通道扩展能力。
使用说明
使用说明分为快速上手与进阶使用两个章节:
- 快速上手:面向刚接触 RT-Thread 的新手,遵循简单步骤即可将 RT-Thread 操作系统运行在该开发板上并看到实验效果。
- 进阶使用:面向需要在 RT-Thread 上使用更多开发板资源的开发者,通过 ENV 工具对 BSP 进行配置,开启更多板载资源,实现更多高级功能。
快速上手
本 BSP 为开发者提供 MDK4、MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。
请注意!!!
在执行编译工作前请先打开 ENV 执行以下指令(该指令用于拉取必要的 HAL 库及 CMSIS 库,否则无法通过编译):
pkgs --update该命令会依据 BSP 内的 Kconfig 中rsource "../libraries/Kconfig"引入的依赖关系,以及 rtconfig.h 中声明的软件包选项(PKG_USING_STM32F0_HAL_DRIVER、PKG_USING_STM32F0_CMSIS_DRIVER、PKG_USING_CMSIS_CORE)自动拉取对应版本的 STM32F0 HAL 库与 CMSIS 库到本地packages目录。
硬件连接
使用数据线连接开发板到 PC,打开电源开关。开发板板载 ST-LINK,数据线同时承担供电、调试与虚拟串口功能。
编译下载
双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。
工程默认配置使用板载 ST-LINK 仿真器下载程序,在通过 ST-LINK 连接开发板的基础上,点击下载按钮即可下载程序到开发板。
MDK5 工程由 ENV 工具的scons --target=mdk5生成并保持与 rtconfig.py 中的工具链配置一致,该文件同时定义了 GCC(arm-none-eabi-)、MDK(armcc)、IAR(iccarm)三种工具链的编译参数、链接脚本(board/linker_scripts/link.lds/link.sct/link.icf)与烧录后处理动作(生成rtthread.bin)。
运行结果
下载程序成功之后,系统会自动运行。连接开发板对应串口到 PC,在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息:
\ | / - RT - Thread Operating System / | \ 4.0.0 build Dec 21 2018 2006 - 2018 Copyright by rt-thread team msh >出现msh >提示符即代表 RT-Thread 内核与 FinSH 命令行组件已成功运行。与此同时,程序入口 applications/main.c 会驱动板载 LED2(PA5)以 500ms 周期闪烁——该示例演示了 RT-Thread PIN 设备接口rt_pin_mode、rt_pin_write与线程延时rt_thread_mdelay的典型用法,可以作为后续 GPIO 应用的模板。
进阶使用
此 BSP 默认只开启了 GPIO 和串口 2(BSP_USING_USB_TO_USART)的功能,如果需使用 SPI、I2C 等更多高级功能,需要利用 ENV 工具对 BSP 进行配置,步骤如下:
- 在 BSP 目录(
bsp/stm32/stm32f091-st-nucleo)下打开 ENV 工具。 - 输入
menuconfig命令配置工程,配置好之后保存退出。 - 输入
pkgs --update命令更新软件包。 - 输入
scons --target=mdk4/mdk5/iar命令重新生成工程(随后用对应 IDE 重新编译下载即可)。
更多详细的外设驱动使用介绍请参考 STM32 系列 BSP 外设驱动使用教程,以及同目录下的 STM32 系列驱动介绍、STM32 系列外设驱动添加指南。
各片上外设的 menuconfig 配置要点
以下配置项均来自 board/Kconfig,配置后建议对照重新生成的 rtconfig.h 确认宏是否生效。
UART(默认开启 USART2,可选 USART1)
BSP_USING_UART1/BSP_USING_UART2:使能对应串口;每个串口可单独开启BSP_UARTn_RX_USING_DMA、BSP_UARTn_TX_USING_DMA(需先开启RT_SERIAL_USING_DMA)。BSP_UARTn_RX_BUFSIZE:串口接收缓冲区大小,范围 64~65535,默认 256(V2 串口框架下生效)。BSP_UARTn_TX_BUFSIZE:串口发送缓冲区大小,范围 0~65535,默认 0(V2 串口框架下生效)。BSP_UARTn_DMA_PING_BUFSIZE:DMA 乒乓接收缓冲区大小,范围 32~65535,默认 64(需同时开启 RX DMA)。BSP_STM32_UART_V1_TX_TIMEOUT:串口 V1 框架发送超时,默认 2000。
SPI(默认关闭)
BSP_USING_SPI:使能 SPI 总线框架(选中RT_USING_SPI),随后可开启BSP_USING_SPI1,并可选开启BSP_SPI1_TX_USING_DMA与BSP_SPI1_RX_USING_DMA(开启 RX DMA 会自动选中 TX DMA)。
I2C(默认关闭,软件 I2C)
BSP_USING_SOFT_I2C:使能软件 I2C 总线框架;BSP_USING_SOFT_I2C1使能 swi2c1 总线,默认 SCL 引脚号为 34(PA6 区域)、SDA 引脚号为 35(PA7 区域),可通过RT_SOFT_I2C1_SCL_PIN/RT_SOFT_I2C1_SDA_PIN修改。BSP 同时定义了RT_SOFT_I2C1_SCL_PIN_DEFAULT/RT_SOFT_I2C1_SDA_PIN_DEFAULT作为引脚默认值兜底。
TIMER(默认关闭)
BSP_USING_TIM:使能定时器设备(选中RT_USING_CLOCK_TIME),可选BSP_USING_TIM14、BSP_USING_TIM16、BSP_USING_TIM17。
PWM(默认关闭)
BSP_USING_PWM:使能 PWM 设备(选中RT_USING_PWM);BSP_USING_PWM2使能 TIM2 输出 PWM,BSP_USING_PWM2_CH4使能 TIM2 通道 4。
ADC(默认关闭)
BSP_USING_ADC:使能 ADC 设备(选中RT_USING_ADC),BSP_USING_ADC1使能 ADC1。
FLASH(默认关闭,FAL 抽象)
BSP_USING_ON_CHIP_FLASH:使能片上 FLASH。BSP 预置了 FAL 分区表 board/ports/fal_cfg.h:app分区从偏移 0 开始、大小 240KB;param分区从 240KB 开始、大小 16KB,共同覆盖 256KB 片内 Flash。
RTC(默认关闭,可选时钟源)
BSP_USING_ONCHIP_RTC:使能 RTC(选中RT_USING_RTC)。通过BSP_RTC_USING_LSE/BSP_RTC_USING_LSI二选一选择时钟源,默认使用 LSE 外部低速晶振。该配置与 board/board.c 中的SystemClock_Config相呼应——时钟初始化会打开 LSE、HSI、HSI14、LSI 多个振荡器,并将RTCClockSelection设置为RCC_RTCCLKSOURCE_LSE。
WDT(默认关闭)
BSP_USING_WDT:使能独立看门狗(选中RT_USING_WDT),对应文档中的 IWG 外设。
系统时钟配置说明
BSP 的系统时钟初始化位于 board/board.c 的SystemClock_Config(),其要点如下:
- 使能备份域访问并配置 LSE 驱动能力为
RCC_LSEDRIVE_HIGH; - 打开 HSI(8MHz 内部高速时钟)、HSI14(ADC 专用)、LSI(内部低速时钟)与 LSE(外部 32.768kHz 晶振);
- 系统时钟源选择 HSI,经 PLL 6 倍频(
RCC_PLL_MUL6、RCC_PREDIV_DIV1)得到 48MHz 主频,AHB 与 APB1 均为 1 分频,Flash 等待周期为 1; - 外设时钟选择上,USART1/USART2 均挂载 PCLK1,RTC 选择 LSE 作为时钟源。
该时钟树是理解串口波特率(115200)与各类外设分频配置的基础,也决定了 PWM、TIMER 等外设的时基来源。
注意事项
- 初次编译前务必在 ENV 中执行
pkgs --update拉取 HAL/CMSIS 依赖,否则编译会因缺少 STM32F0 HAL 驱动而失败; - 默认 BSP 仅开启 GPIO 与 UART2(虚拟串口),其余外设需通过
menuconfig显式开启并重新生成工程; - 串口参数为 115200-8-1-N,控制台设备固定为
uart2,请勿随意修改RT_CONSOLE_DEVICE_NAME以免丢失日志输出; - 本文所涉配置均以当前仓库 bsp/stm32/stm32f091-st-nucleo 目录内的实际文件为准,若使用 RT-Studio 等其他工具链,请参考 STM32 系列如何创建新项目。
联系人信息
维护人:
- zylx
- 操作系统
- 嵌入式
- 物联网
- 嵌入式OS
- RTOS
【免费下载链接】rt-thread
RT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/
相关推荐
RT-Thread 在 STM32F091RC-Nucleo 开发板上的 BSP 上手与进阶配置指南
RT Thread 在 STM32F091RC Nucleo 开发板上的 BSP 上手与进阶配置指南 本文以 RT Thread 官方为 STM32F091RC
操作系统嵌入式物联网嵌入式OSRTOSES32VF2264 开发板 RT-Thread BSP 快速上手与外设驱动配置指南
ES32VF2264 开发板 RT Thread BSP 快速上手与外设驱动配置指南 ES PDS ES32VF2264 是上海东软载波微电子(EastSoft
操作系统嵌入式物联网嵌入式OSRTOSRT-Thread N32H760ZIL7-STB 开发板 BSP 使用指南:快速上手与外设驱动配置
RT Thread N32H760ZIL7 STB 开发板 BSP 使用指南:快速上手与外设驱动配置 本指南以 RT Thread 仓库内 N32H760ZIL
操作系统嵌入式物联网嵌入式OSRTOS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考