
一、RT-Thread系统 随着物联网(IoT)市场的迅猛发展,嵌入式设备联网成为了一个刚需。物联网的核心和基础仍是互联网,但不同于互联网强调人与人的互联,物联网是在这样的基础上延伸和扩展出人与物、物与物之间的连接网络。嵌入式设备的联网会使得软件复杂性大幅增加,传统的嵌入式RTOS(实时操作系统)内核已经越来越难满足市场的需求,在这种情况下,物联网操作系统(IoT OS)的概念应运而生。% S0 ~4 u6 E( p1 S& g4 N* J7 y & y3 R2 l/ r* l8 ]/ Z 物联网操作系统主要分为两大类,一是由传统的嵌入式RTOS发展而来,典型代表有FreeRTOS、LiteOS、RT-Thread、Arm Mbed OS;二是由互联网公司的云平台延伸而来,基于传统操作系统进行“剪裁”和定制,典型代表有Ali OS Things、TencentOS tiny、Win10 IOT。: }6 ]9 w; u# ]9 Z' j7 d RT-Thread 是一款主要由中国开源社区主导开发的开源实时操作系统(v3.1.0以及以前版本遵循GPLv2+许可协议,v3.1.0以后版本遵循 Apache License 2.0 开源许可协议),具有完全的自主知识产权,其社区化,中立,开放等产品特性,在国内开源社区具有很强的应用基础。& g* a8 h6 Z- E/ Z 二、cubeIDE安装RT-Thread支持 【1】打开cubeIDE工具,点击help->Embeedded Software Packages Manager菜单,打开软件包管理界面,cubeIDE提供了离线及在线两种安装软件包的方式。1 h+ O- Q9 z4 R7 H7 G2 D# [ : s# x7 T2 t& B+ m: }1 S2 \, ~: q (1)选择From Url ...按键(在线安装); (2)打开用户自定义包管理界面,点击New按钮; (3)填写RT-Thread在线安装包的源地址$ |2 B8 [, i; ~ ; X# Z* C! E0 Z2 }" A3 V1 P* ? (4)点击Check检查源地址是否可行,OK的话输入框右侧会出现“√”,点击OK按钮确定。) q% c! T/ B9 M1 f/ Y* S. q+ I / t( e" }; ?/ m' M- Y' v' J ![]() 【2】 点击 OK 回到 User Defined Packs Manager 界面,再次点击 OK,CubeMX 自动连接服务器,获取包描述文件。回到 Manage embedded software packages 界面,就会发现 RT-Thread Nano 软件包列表,选择该软件包版本,点击 Install Now,如下图所示: ; s U' k7 O5 {8 w ![]() + t* ?" O, J; A9 g 【3】点击安装之后,弹出协议确认对话框,同意该协议,点击 Finish,如下图所示 ' {* Y( S5 \+ K0 f3 h, n9 T0 | ![]() 5 e' j1 {; R3 `5 U: K 【4】等待安装完成,成功安装后,版本前面的小蓝色框变成填充的绿色,如下图所示: ![]() 8 g) c- d4 m9 J5 D, k% m3 A/ n& k RT-Thread有多个版本,其他版本安装类似,安装好的版本前面对话框会填充为绿色,未安装版本是白色的勾选框。 RT-Thread软件包安装完毕,退出 Manage embedded software packages 界面,进入cubeIDE主界面。 三、创建工程并添加RT-Thread支持 【1】点击文件->新建工程->STM32 Project,进入工程创建页面,在MCUMPU selecter页面,按芯片选择创建工程(本文stm32496VGTx),选择好匹配自己手中芯片型号后点击下一步。 , f, l5 s% T2 }; y) E ![]() " h. x8 H0 B$ `: R& @; C 在工程设置窗口中,填入工程名称(及工程路径),完成工程创建。 ![]() 3 Y/ z7 ^5 O2 q0 A3 |( N& C* q 完成工程创建后,会直接进入cubeMx配置界面,若没有,请自行双击工程目录下的"*.ioc"文件进入。$ |/ r2 w- L% A/ o5 F 5 P/ G9 X9 e _ 【2】 首先开启系统模式的串口功能及SysTick滴答定时器(该配置会出现告警,先故意为之,后续说明如何调整)支持 m( C! [& O& w) B& s4 \3 A& n! N ![]() ) t$ @: n) g) @; ]) w 开始RCC外部高速时钟,参数默认设置即可 5 x) }: _2 Y. u3 F, C( i( \0 S. p ![]() # {' s% g* O: d 本文采用常用的按键及闪灯程序来测试,STM32L496VGT3支持三个按键及三个LED灯,参照其芯片原理图及引脚说明列表,配置按键及LED灯的GPIO引脚。2 j7 b6 q! N1 D. i 8 v6 F! [( `5 V- \6 p# N ![]() 现在芯片视图选择对于针脚的模式(GPIO_OUTPUT或GPIO_INPUT),然后去属性窗口配置其参数及命名。 ![]() 时钟设置,简单配置接口,STM32L496VGT3支持到80MHz,本文直接拉满。 $ q/ m% ~3 t9 @# O/ p5 r# f1 S ![]() 【3】 点击 Softwares Packages->Select Components,进入组件配置界面,选择 RealThread, 然后根据需求选择 RT-Thread 组件,然后点击 OK 按钮,如下图所示:) }% D+ B V/ h [/ O P " |( } i; Q/ o ![]() RT-Thread软件包中包含 kernel, shell 和 device 三个部分,, I, ~) b. H- q2 S) g 1)仅选择 kernel 表示只使用 RT-Thread 内核,工程中会添加内核代码;9 t4 [5 A- X; Z; d( o L 2)选择 kernel 与 shell 表示在使用 RT-Thread的基础上使用 FinSH Shell 组件,工程中会添加内核代码与 FinSH 组件的代码。 3)选择 device 表示使用 rt-thread 的 device 框架,用户基于此框架编写外设驱动并注册后,就可以使用 device 统一接口操作外设。 本文将 kernel, shell 和 device都选择,然后点击确定,回到Pinout&Configuration界面,将会新增一个“Software Packs”目录,点击进去,多了 RT-Thread软件包选项。8 }: `) R! ^3 F. C/ O ![]() # k3 `4 v4 o( W0 j 勾选kernel, shell 和 device选项,页面将会出现 RT-Thread参数配置页面,先按默认配置。& N- v) b: P* ?- T' i. ] ![]() RT-Thread 操作系统重定义 HardFault_Handler、PendSV_Handler、SysTick_Handler 中断函数,为了避免重复定义的问题,在生成工程之前,需要在中断配置中,代码生成的选项中,取消选择三个中断函数(对应注释选项是 Hard fault interrupt, Pendable request, Time base :System tick timer),最后点击生成代码,具体操作如下图 所示:! c6 D9 }' x3 S F8 S) `# ?6 ?, m7 U4 [2 _ ![]() 4 _9 z8 r$ @4 Q" }' H 【4】 工程管理(Project Manager)配置页面保持默认配置,点击保存或生成代码按钮生成输出代码。: h, n4 q) \ X7 J- ^0 E ![]() 届时,会弹出告警信息,这是因为在stm32cubeMX配置FreeRTOS时,选择时钟源为SysTick会有提示警告。 3 e I7 x3 ~" r7 y# R( O2 K0 V ![]() 【5】SysTick以最低的中断优先级运行,因此,在执行此中断时,必须取消所有中断的屏蔽。虽然是告警信息,但为了安全起见,因此需要将SysTick替换为TIM比较好。回到cubeMx配置界面,选择TIM1为系统时钟,注意,选择了TIM1作为系统时钟后,TIM1被占用,变成灰色,不能在用作它途。0 }/ O N0 r5 w4 U# h 9 u# _# }6 Q# k+ M! g ![]() 四、工程调整 生成代码后,需要我们进行rt-thread调用,在main.c文件中添加rtthread.h:, G; G m; ?$ {3 j ![]() 在主循环中,添加如下代码,简单调用rt_thread_mdelay(100)函数验证rtthread是否生效:
五、编译错误问题解决$ N7 }1 v& N' u3 J) O, {# Z 【1】修改启动文件startup_stm32l496vgtx.s的 bl main 改为 bl entry(图片中第97行),更改此处使芯片在进入main之前启动rt-thread。; V1 p+ C( Z) N* ~! b0 { ' E; X) C( B. w3 \ ![]() 【2】Properties --> C/C++ Build --> Settings --> Tool Settings --> MCU Setting中的Floating-point ABI改为Softwae,该选项可解决浮点相关的一个错误。( H* v6 M3 a4 `6 U" u ; |+ _ A4 S8 Z ![]() # x* g5 @& {+ ]) Y# x* s3 \ ![]() 【3】 调整Properties --> C/C++ Build --> Settings --> Tool Settings --> MCU GCC Assembler --> Misellaneous添加flags:-Wa,-mimplicit-it=thumb ![]() : [) z* d! x/ ? 【4】编译会出现usart找不到的报错,这是由于我们开启了console shell功能,因此需要配置串口支持。6 f4 P+ O, X4 Y8 P, @4 V* ?1 d; b ![]() 6 b, {* @' V7 e, U0 q* G 在cubeMx中,开启串口功能7 `, l: o2 \. P9 W( ]% T( b0 K* k ![]() 按芯片原理图及引脚参数要求配置 [1 p7 V* d" C: ]0 G5 C ![]() ! _/ ^" _1 v' t: l& b, Z 【5】生成新代码后,再次编译,此时可能会出现以下报错,也是rtthread的console shell有关:/ d9 V; S" W" I 6 t5 V! Q! ~( [9 h- r7 d ![]() 这从字面意思是需要去rtconfig.h把“#include "finsh_config.h"”注释取消。 ![]() ! }* X( s+ R K3 q 【6】再次编译,下面这个错误问题应该是HAL库及RT-Thread支持版本跟进的问题 + @6 g/ O1 a5 l% U7 `8 `( a $ e; G O o7 Q/ F 本文所使用的STM32L496VGTX和CubeIDE版本引用的HAL库的USART_TypeDef定义已经没有了“DR字段” ![]() 0 T4 I. B# [5 h, y 该错误点的函数我从字面意思理解,暂时将其调整为如下,调整后编译通过: * y& D! K: p1 s# l/ x, ^. H ![]() & ~, \( d- g' ?6 t( W6 k . i4 ?/ z$ O+ t4 \ 六、下载及测试 【1】设置CubeIDE对该项目的下载支持,右键项目,打开项目属性,选择程序编译输出选项。 ![]() / q5 M+ A& O0 a! ~/ y$ I2 ` 【2】配置运行下载,点击运行按钮下拉列表选择运行配置,进入运行配置界面,配置程序运行加载信息如下图示例。 & n* w& @! ^. v+ l6 a ![]() 4 ]- [! N% F& e0 i) g# s+ L 【3】点击运行,程序顺利下载到STM32L496VGTX板上,闪灯程序正常运作。 * @' m7 [+ `% W8 ^ ![]() ) Y, f8 I* J6 u! @- p0 i, w+ ]) X 程序效果: ![]() ———————————————— 版权声明:py_free-物联智能% f7 e5 m. Z% [3 d# E9 j 如有侵权请联系删除 2 t/ g1 \4 Q8 l" Z5 w 3 K7 { N1 Y& @( ?! H |
【STM32N6570-DK评测】摄像头video encoder
实战经验 | STM32CubeIDE实用技巧之工程联调
【STM32H745I-DISCO】基于TouchGFX的工业控制器界面设计
【下载问题解决】关于ST官网下载软件问题解决
【STM32N6570-DK评测】开发环境及LED debug
实战经验 | 基于STM32CubeIDE下载TouchGFX GUI应用的出错分析
实战经验 | 如何修改STM32Cube固件包的存储位置
兔哥的杂谈【002】——如何性价比更高地去编译STM32
IDE删除编译中间文件
STM32CubeIDE 快速入门指南
我下macos下面做了很多次,还是放弃了,错误太多了,处理起来太麻烦了。