stm32 + rt thread os 学习笔记

上传人:wt****50 文档编号:37626126 上传时间:2018-04-20 格式:PDF 页数:92 大小:2.95MB
返回 下载 相关 举报
stm32 + rt thread os  学习笔记_第1页
第1页 / 共92页
stm32 + rt thread os  学习笔记_第2页
第2页 / 共92页
stm32 + rt thread os  学习笔记_第3页
第3页 / 共92页
stm32 + rt thread os  学习笔记_第4页
第4页 / 共92页
stm32 + rt thread os  学习笔记_第5页
第5页 / 共92页
点击查看更多>>
资源描述

《stm32 + rt thread os 学习笔记》由会员分享,可在线阅读,更多相关《stm32 + rt thread os 学习笔记(92页珍藏版)》请在金锄头文库上搜索。

1、STM32 + RT Thread OS 1 / 92 STM32 + RT Thread OS STM32 + RT Thread OS 学习笔记学习笔记 http:/ 前言前言 学习的最好办法是实践,所以,第一步是如何让程序跑起来,再去分析代码运行机制。 因此,本文稿的主要目的是怎么最快让程序跑起来。 关于 RT-Thread 版本 GUI 之前的 RT-Thread OS 版本是 1.1.0,GUI 开始,使用的版本是 1.1.1。 RT-Thread 当前在持续更新中,后续版本可能与这里所述不同,这是正常现象。当前官网的 PDF 文件就是一个很好的证明,很多函数,实现方法已经变更了。

2、 STM32 + RT Thread OS 2 / 92 开发环境开发环境 操作系统:Windows XP IDE: Keil MDK 4.71a 开发板:奋斗 V3(STM32F103VET6) + 4.3” LCD(SSD1963, 480 X 272) 1. 安装 Keil MDK 2. 安装 Python 2.7 3. 安装 Scons 2.0.1 第一项,是集成开发环境,第三项是项目构建软件,第二项是第三项依赖的运行环境。安装 Scons 的目的是自动生成 Keil MDK 的 Project 文件,项目初始化。 Scons 的下载地址: http:/www.python.org/f

3、tp/python/2.7.1/python-2.7.1.msi http:/www.rt-thread.org/download/scons-2.0.1.win32.exe 请使用此指定版本,最新版本可能无法运行项目生成脚本。 注:具体安装使用说明请参考http:/www.rt-thread.org/dokuwiki/doku.php?id=%E9%85%8D%E7%BD%AErt-thread%E5%BC%80 %E5%8F%91%E7%8E%AF%E5%A2%83 STM32 + RT Thread OS 3 / 92 参考资源:参考资源: 主要有三个参考资源: 1.1. 官方官方 PD

4、FPDF 说明文档说明文档 2.2. 官方官方 WikiWiki 百科百科 STM32 + RT Thread OS 4 / 92 3.3. 下载的源代码包中下载的源代码包中 doxydoxygengen 生成的帮助文档生成的帮助文档 STM32 + RT Thread OS 5 / 92 第一个例程第一个例程 1.1. 运行运行 SconsScons 脚本,生成脚本,生成 MDK ProjectMDK Project 文件文件 打开 Windows Command 命令行窗口, 将工作目录 cd 到 c:mcuRT-Thread 1.1.0bspstm32f10x 目录下。 输入脚本命令:

5、C:Python27scriptsscons -target=mdk4 -s (注:以上请使用实际安装路径) 执行完毕后,在 bsp 目录下生成一个 Project.uvproj 文件 STM32 + RT Thread OS 6 / 92 Project.uvproj 这个文件,是复制 template.uvproj,并在里面添加指定组件文件。可以比较一下这两个文件: STM32 + RT Thread OS 7 / 92 2.2. 打打开项目文件开项目文件 3.3. 修改修改 LEDLED 定义定义 将29行35行的定义改为奋斗板V3中的实际管脚。 STM32 + RT Thread OS

6、 8 / 92 4.4. 修改修改 DeviceDevice 在 Option 中(按 Alt + F7),将 Device 改为 STM32F103VE 5.5. 修改修改 UtilitiesUtilities 使用J-Link,要将Options中的Utilities改为J-LINK/J-Trace Cortex STM32 + RT Thread OS 9 / 92 6.6. 添加添加 JLink JLink DeviceDevice 点击上图中的Settings,添加Device 在下面图中,按“Add”按钮,在弹出的画面中选择 “STM32F10x High-density Flas

7、h” 7.7. 编译编译 STM32 + RT Thread OS 10 / 92 8.8. 下载下载 下载完成后,Reset 一下,可以看到开发板上的 V6 在闪烁。 修改 application.c 中的 led_thread_entry(),加两句代码,实现两个 LED 灯交替闪烁。 增加的代码:L65, L73 重新编译;在下载前,我们改一下 J-Link 设置,勾选 Reset and Run,这样下载完成后就直接运行,不要手工去 Reset。 STM32 + RT Thread OS 11 / 92 完毕 以上是在自动生成的项目基础上,完成简单的 LED 灯闪烁例程。 STM32

8、+ RT Thread OS 12 / 92 串口通讯串口通讯例程例程 通过上面的练习,对 STM32 项目开发有了一个直观印象,接下来尝试对串口 RS232 进行操作。 例程实现步骤例程实现步骤 1.1. 目标需求:目标需求: 开机打开串口 1,侦听上位机(我们使用电脑串口测试软件)发送的信息,然后原样输送到串口 1。 2.2. 创建项目创建项目 a) 禁用 Finsh 和 console b) 默认情况下,项目文件包含了 finsh,它使用 COM1 来通讯,另外,console 输出(rt_kprintf)也使用了 COM1。因此,在运行 scons 命令生成项目文件之前,修改 rtco

9、nfig.h,禁用这两项。 (下图 L65, L70) c) 生成项目文件 运行 scons -target=mdk4 s 打开生成的项目文件,可以看到,文件组 finsh 已经不再被包含进来了。 STM32 + RT Thread OS 13 / 92 d) 创建 echo.c 新建一个 C 文件 echo.c,编写 RT_Thread 任务入口,COM1 侦听,以及初始化函数。示例代码如下: #include “echo.h“ struct rx_msg rt_device_t dev; rt_size_t size; ; static struct rt_messagequeue rx_

10、mq; static char uart_rx_buffer64; static char msg_pool2048; / 串口侦 听回调 函数 rt_err_t uart_input(rt_device_t dev, rt_size_t size) struct rx_msg msg; msg.dev = dev; msg.size = size; / 将接收内容放入消息队 列 rt_mq_send( return RT_EOK; / 任务 入口函数 void usr_echo_thread_entry(void* parameter) struct rx_msg msg; rt_devic

11、e_t device; rt_err_t result = RT_EOK; / 从RT系统 中获 取串口设 device = rt_device_find(“uart1“); if (device != RT_NULL) / 指定接收串口内容的回调 函数 rt_device_set_rx_indicate(device, uart_input); / 以读 写方式打开设备 rt_device_open(device, RT_DEVICE_OFLAG_RDWR); STM32 + RT Thread OS 14 / 92 while(1) / 从消息队 列中获 取被回调 函数放入消息队 列中的内

12、容 result = rt_mq_recv( if (result = -RT_ETIMEOUT) / timeout, do nothing if (result = RT_EOK) rt_uint32_t rx_length; rx_length = (sizeof(uart_rx_buffer) - 1) msg.size ? msg.size : sizeof(uart_rx_buffer) - 1; rx_length = rt_device_read(msg.dev, 0, uart_rx_bufferrx_length = 0; / 将内容写回到串口 rt_device_writ

13、e(device, 0, / 串口例程初始化函数 void usr_echo_init() rt_thread_t thread ; rt_err_t result; / 创建消息队 列,分配队 列存储 空间 result = rt_mq_init( if (result != RT_EOK) rt_kprintf(“init message queue failed.n“); return; / 创建任务线程 thread = rt_thread_create(“devt“, usr_echo_thread_entry, RT_NULL, 1024, 25, 7); / 启动任务线程 if

14、(thread != RT_NULL) rt_thread_startup(thread); STM32 + RT Thread OS 15 / 92 在 application.c 中加入初始化代码(echo.h 略) L189: usr_echo_init(); 在开始编译前,还要修改 board.c,注释掉第 183 行,不然将报错。因为我们禁用了 console,所以不需要设置console 输出设备。 STM32 + RT Thread OS 16 / 92 e) 测试 编译,下载,测试。 STM32 + RT Thread OS 17 / 92 程序分析程序分析 a) 内存分布 查

15、看编译生成的 obj/rtthread-stm32.map 文件,可以看到代码及常量,被下载到芯片的0x8000000 地址段,最前面的是中断矢量表,第一个中断地址是 RESET,矢量表共 0x130 个字节。 STM32 + RT Thread OS 18 / 92 有初始值的变量定义,从地址段 0x20000000 开始 对应的 Stm32 内存映射表,代码和常量被下载到 Flash,已初始化变量定位到 SRAM(可能是下载到 Flash,开机初始化后复制到 RAM,而不是直接下载到 RAM,不然下次运行,初始值可能已被修改) STM32 + RT Thread OS 19 / 92 这是

16、 MDK 中芯片内存区域的地址分配 这是 J-Link 对芯片的定义,内存是 512K,类型是 On-chip Flash,地址空间从 0x08000000到 0x0807FFFF STM32 + RT Thread OS 20 / 92 b) 程序运行流程 开机后,从 Flash 0x080000000 处的中断矢量表,取得 RESET 中断的处理函数入口地址,跳转到入 口 函 数 开 始 执 行RESET中 断 服 务 , 如 下 图 , RESET中 断 服 务 函 数 定 义 在startup_stm32f10x_hd.s 中, 先执行了 stm32 类库中的 SystemInit(), 再然后转到 main()函数。 SystemInit()主要是对

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑机械

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号