没有合适的资源?快使用搜索试试~ 我知道了~
rt-thread studio stm32f103.docx
0 下载量 87 浏览量
2024-08-02
23:09:41
上传
评论
收藏 294KB DOCX 举报
温馨提示
在嵌入式系统学习中,时常会接触到实时操作系统。在此之前,本人学习过Vxworks并接触过FreeRTOS和RTThread,最近一段时间突发奇想,想要了解一下RTOS内部具体是工作的,怎样运行的,遂开始学习RTOS源代码。众所周知Vxworks并未开源且价格高昂,并且几乎所有实时操作系统的使用和设计思想都大同小异,所以本人选择了RT-Thread来进行学习,一是此操作系统最近在社会上影响越来越大,可谓国产操作系统之光,二是它的资料齐全且代码相对于FreeRTOS更加清晰明了,对于初学者较为友好。所以,综上所述,选择RT-Thread来进行学习。 RT-Thread,全称是 Real Time-Thread,顾名思义,它是一个嵌入式实时多线程操作系统,基本属性 之一是支持多任务,允许多个任务同时运行并不意味着处理器在同一时刻真地执行了多个任务。事实上, 一个处理器核心在某一时刻只能运行一个任务,由于每次对一个任务的执行时间很短、任务与任务之间通 过任务调度器进行非常快速地切换(调度器根据优先级决定此刻该执行的任务),给人造成多个任务在一个 时刻同时运行的错觉。在 RT-Thread 系
资源推荐
资源详情
资源评论
RT-Thread Studio 是一个集成开发环境(IDE),它专为 RT-Thread 实时操作系统(RTOS)设计,
支持 STM32 系列微控制器(MCU)等多种硬件平台。STM32F103 是 STMicroelectronics(ST)
公司推出的一款基于 ARM Cortex-M3 内核的 32 位微控制器,广泛应用于嵌入式系统开发。
RT-Thread Studio 与 STM32F103 的结合使用
1. 环境准备
� 安装 RT-Thread Studio:首先需要从 RT-Thread 官网或其他可信渠道下载并安装
RT-Thread Studio IDE。
� 安装 STM32CubeMX:STM32CubeMX 是一个图形化软件配置工具,可以帮助用户配
置 STM32 微控制器的时钟、外设等。虽然 RT-Thread Studio 对 STM32CubeMX 的适配
可能不完全自动化,但两者结合使用可以大大提高开发效率。
� 准备硬件:确保拥有 STM32F103 的开发板、ST-Link 下载器等必要的硬件设备。
2. 创建项目
� 在 RT-Thread Studio 中,可以通过“文件”->“新建”->“RT-Thread 项目”来创建一个新的
项目。
� 选 择 合 适 的 项 目 模 板 , 例 如 RT-Thread 标 准 版 或 Nano 版 , 以 及 目 标 芯 片
STM32F103。
� 配置项目的基本设置,如项目名称、保存路径、编译器选项等。
3. 配置 STM32CubeMX
� 打开 STM32CubeMX,选择目标芯片 STM32F103。
� 配置时钟系统,通常 STM32F103 的系统时钟可以设置为 72MHz。
� 根据需要配置外设,如 GPIO、USART、SPI、I2C 等。
� 生成初始化代码,并将其导入到 RT-Thread Studio 项目中。
4. 编写和调试代码
� 在 RT-Thread Studio 中,可以编写应用程序代码,利用 RT-Thread 提供的丰富的 API
和组件,如线程管理、消息队列、信号量、互斥量等。
� 使用 RT-Thread Studio 的调试功能,结合 ST-Link 下载器,对代码进行编译、下载和
调试。
5. 编译和烧录
� 在 RT-Thread Studio 中,点击“构建”按钮编译项目。
� 使用 ST-Link 下载器将编译好的固件烧录到 STM32F103 开发板上。
6. 测试和验证
� 连接开发板到计算机,使用串口工具(如 PuTTY、SecureCRT 等)通过 USART 接口与
开发板进行通信。
� 测试应用程序的功能,确保一切按预期工作。
注意事项
� RT-Thread Studio 和 STM32CubeMX 的版本可能会不断更新,因此建议查阅最新的官
方文档或教程以获取最准确的信息。
� 在配置 STM32CubeMX 时,需要注意不同外设之间的时钟和引脚冲突。
� 编译和烧录过程中可能会遇到各种问题,如编译器错误、下载失败等,需要根据具
体的错误信息进行排查和解决。
通过 RT-Thread Studio 和 STM32CubeMX 的结合使用,可以大大提高 STM32F103 等 STM32 系
列微控制器的嵌入式系统开发效率。
PS: rt_hw_console_getchar()和 rt_hw_console_output()是 RT 所编写的接收串口输入,以及
输出调试信息到控制台的函数,在 3.1.3 及之前的版本需要用户自己编写。 3.1.5 已在工程
中自带。
实际上,board.c 中还自带了串口初始化函数,默认初始化 USART2 并作为通信方式,我们
只需要在后面调用就可以。
查看 startup.s 汇编程序会发现,在上电的时候,引导程序创建完堆、栈,分配好中断向量
表 后 进 入 的 不 是 用 户 的 main 函 数 , 而 是 __main, 实 际 上 执 行 的 是 board.c 中 的
rt_hw_board_init(),进行板级初始化,然后系统初始化,最后进入用户的 main.c,具体流
程可以参照 RTT 的官方文档。
3.1.5 版本的时钟初始化以及串口初始化已经在 board.c 处理的比较好。我们可以看到在
rt_hw_board_init()函数中 extern 了 HAL 库的 SystemClock_Config(),也就是在启动的时候就
配置好了时钟(先于 main.c)
遇到的 bug(只打开了 USART1,导致程序虽然无错误,但无法正常运行,默认 shell 和 finsh
采用 USART2 通信)
移 植 时 需 要 打 开 的 串 口 是 USART2 , 选 择 Asynchronous ,而非 USART1 (如果只使用
USART1,按照下面更改)
在
E:\code\project\Middlewares\Third_Party\RealThread_RTOS\bsp\_template\cubemx_config\bo
ard.c 路径下
或者直接搜索 static int uart_init(void)
将 USART2 修改成 USART1
很多 伙伴想要从源码学 习 RT-Thread ,但是官方提供的 RT-Thread Studio 、Keil MDK、
STM32Cube 等工具的功能过于强大,代码过于丰富,我们很难从其中剥离出我们想看的最
精简内容,这篇文章帮助你从最精简的源码开始学习。
一、 获取 RT-Thread 源码
刚开始建议从 RT-Thread Nano 版本开始学习。 与 RT-Thread 完整版不同的是,Nano 不含
Scons 构建系统,不需要 Kconfig 以及 Env 配置工具,也去除了完整版特有的 device 框架
和组件,仅是一个纯净的内核。
如果想获取官方教程,可以参考下面的链接
Nano 简介与下载 (rt-thread.org)
可以从官方提供的入口下载 Nano 源码压缩包 ,文件很小,不超过 4M。
解压缩后,源码在 rt-thread 文件夹下,如下图所示
二、 将源码复制到 STM32 工程中
将 rt-thread 文件夹整个复制到准备好的 STM32 工程目录下,如下图所示
将 rt-thread 文件夹下所有多余文件删掉(下图红框内的文件)
将 rt-thread > bsp 文件夹下所有多余文件删掉(下图红框内的文件)
在 rt-thread > libcpu 文件夹下找到自己需要的控制器内核文件夹。
我是用的控制器型号是 STM32F103,因此我把 cortex-m3 文件夹移动到 rt-thread > libcpu
文件夹下,其他的文件夹都可以删掉,如下图所示
三、 将 rt-thread 文件夹中的内容添加到工程编译的引用中
如果是 Keil MDK 工程,就把 rt-thread 文件夹内的 c 文件和 h 文件路径都添加到工程配置
中。
如果是 Makefile 工程,可以按下图所示的方法添加引用和依赖。
由于在 Makefile 中 rt-thread 中的 “-”会被识别位运算符“减号”,因此我把 rt-thread
文件名改成了 RT_Thread,文件夹的名字也要同步修改,如下图
C 文件添加参考(注意红框内的部分)
h 文件添加参考(注意红框内的部分)
汇编文件添加参考(注意红框内的部分)
三、 修改 stm32f10x_it.c
在 接 口 文 件 context_gcc.S 中 实 现 了 函 数 SysTick_Handler 、 PendSV_Handler 和
HardFault_Handler 这三个函数,因此应该将 stm32f10x_it.c 中的这三个中断处理函数屏蔽掉。
四、 修改启动文件
将 startup_stm32f103xb.s 文件中的 main 函数入口改为 RT-Thread 的 entry
如下图所示
五、 打开 RT-Thread 动态线程创建 的宏
在 rtconfig.h 文件中,取消 RT_USING_HEAP 的宏注释,如下图所示
六、 main.c 加入实验内容
#include "sys.h"
#include "stm32f10x_conf.h"
#include "led.h"
#include <rthw.h>
#include "rtthread.h"
/* 定义线程控制块 */
static rt_thread_t led1_thread = RT_NULL;
剩余28页未读,继续阅读
资源评论
微信公众号:数模0error
- 粉丝: 7166
- 资源: 373
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- goth 包提供了一种简单、干净且惯用的方式来为 Go Web 应用程序编写身份验证包 .zip
- PHP 中 Cookie 和 Session 的使用简易教程(学习笔记)
- SoftEther VPN Client + VPN Gate Client 插件
- GoRequest-简化的HTTP客户端(受nodejs SuperAgent启发).zip
- 主要物体检测15-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar
- Google Maps API Web 服务的 Python 客户端库.zip
- Google Authenticator 服务器端代码.zip
- logo标志检测26-YOLOv7、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar
- golang 的算法和数据结构.zip
- Vue + SpringBoot前后端项目实例
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功