|
一、RT-Thread系统; f2 k6 k) P7 W1 r' A' c 随着物联网(IoT)市场的迅猛发展,嵌入式设备联网成为了一个刚需。物联网的核心和基础仍是互联网,但不同于互联网强调人与人的互联,物联网是在这样的基础上延伸和扩展出人与物、物与物之间的连接网络。嵌入式设备的联网会使得软件复杂性大幅增加,传统的嵌入式RTOS(实时操作系统)内核已经越来越难满足市场的需求,在这种情况下,物联网操作系统(IoT OS)的概念应运而生。 % U' i |5 t7 \$ z. w* v 物联网操作系统主要分为两大类,一是由传统的嵌入式RTOS发展而来,典型代表有FreeRTOS、LiteOS、RT-Thread、Arm Mbed OS;二是由互联网公司的云平台延伸而来,基于传统操作系统进行“剪裁”和定制,典型代表有Ali OS Things、TencentOS tiny、Win10 IOT。/ ~- b; \3 t# H- [* u; D; b B: @ X 4 r) Y! _1 U! Q" R2 I# R% b RT-Thread 是一款主要由中国开源社区主导开发的开源实时操作系统(v3.1.0以及以前版本遵循GPLv2+许可协议,v3.1.0以后版本遵循 Apache License 2.0 开源许可协议),具有完全的自主知识产权,其社区化,中立,开放等产品特性,在国内开源社区具有很强的应用基础。5 w0 K( F% y- V# \) ]+ d G ; z3 ?- |- I& _8 p1 Z _% n 二、cubeIDE安装RT-Thread支持 【1】打开cubeIDE工具,点击help->Embeedded Software Packages Manager菜单,打开软件包管理界面,cubeIDE提供了离线及在线两种安装软件包的方式。1 Z* s. s( ~; v' {( c x5 l! a5 m7 E* h9 o (1)选择From Url ...按键(在线安装);, _; y7 h! |% `& i (2)打开用户自定义包管理界面,点击New按钮; 8 p2 Y8 a" b$ t8 x (3)填写RT-Thread在线安装包的源地址 (4)点击Check检查源地址是否可行,OK的话输入框右侧会出现“√”,点击OK按钮确定。8 q: u f( P' p5 e0 o+ Q
【2】 点击 OK 回到 User Defined Packs Manager 界面,再次点击 OK,CubeMX 自动连接服务器,获取包描述文件。回到 Manage embedded software packages 界面,就会发现 RT-Thread Nano 软件包列表,选择该软件包版本,点击 Install Now,如下图所示:, ?7 X) }* `4 ~& y& }$ |* M5 o + r3 u' R8 [% D& |) G
+ P% N$ Q$ |8 G- G0 U1 s 【3】点击安装之后,弹出协议确认对话框,同意该协议,点击 Finish,如下图所示
【4】等待安装完成,成功安装后,版本前面的小蓝色框变成填充的绿色,如下图所示:8 }# V `( n/ {3 s ' V5 ?& Z- _, Z! ~! V6 _4 v
1 \3 i( P, z# }# K RT-Thread有多个版本,其他版本安装类似,安装好的版本前面对话框会填充为绿色,未安装版本是白色的勾选框。 # e# S/ m- Z9 {/ `# @ RT-Thread软件包安装完毕,退出 Manage embedded software packages 界面,进入cubeIDE主界面。 - c i: b, h) U# {% g 三、创建工程并添加RT-Thread支持4 k8 L1 Z7 @: S: P/ Z 【1】点击文件->新建工程->STM32 Project,进入工程创建页面,在MCUMPU selecter页面,按芯片选择创建工程(本文stm32496VGTx),选择好匹配自己手中芯片型号后点击下一步。
在工程设置窗口中,填入工程名称(及工程路径),完成工程创建。) C8 i5 s7 A% h6 H7 ~% c
/ x% N' `6 h1 u7 p3 k. M, W* f 完成工程创建后,会直接进入cubeMx配置界面,若没有,请自行双击工程目录下的"*.ioc"文件进入。* G4 K) G h$ _1 Q6 x { * {" ?2 m- ^4 O, b$ L7 j+ M0 |, z 【2】 首先开启系统模式的串口功能及SysTick滴答定时器(该配置会出现告警,先故意为之,后续说明如何调整)支持! V) q: n, G7 |! R
+ u$ y$ j% M; |" m* @ y 开始RCC外部高速时钟,参数默认设置即可
本文采用常用的按键及闪灯程序来测试,STM32L496VGT3支持三个按键及三个LED灯,参照其芯片原理图及引脚说明列表,配置按键及LED灯的GPIO引脚。/ R3 k0 V/ k% W" ?$ U
现在芯片视图选择对于针脚的模式(GPIO_OUTPUT或GPIO_INPUT),然后去属性窗口配置其参数及命名。 P* j3 H5 O0 a% L g3 h5 O
时钟设置,简单配置接口,STM32L496VGT3支持到80MHz,本文直接拉满。5 W5 P( d. i/ d" H' ] e/ p 2 e2 T4 g0 b6 [" Y! N
, P g6 ^. K! A: _9 ` 【3】 点击 Softwares Packages->Select Components,进入组件配置界面,选择 RealThread, 然后根据需求选择 RT-Thread 组件,然后点击 OK 按钮,如下图所示:- F8 |1 o1 q0 c$ h+ S6 t
8 r X3 L3 k; K: ? RT-Thread软件包中包含 kernel, shell 和 device 三个部分,4 q4 z1 o4 E' C8 a$ u8 w 1)仅选择 kernel 表示只使用 RT-Thread 内核,工程中会添加内核代码;) Q* y2 x0 W& S4 E8 A 2)选择 kernel 与 shell 表示在使用 RT-Thread的基础上使用 FinSH Shell 组件,工程中会添加内核代码与 FinSH 组件的代码。 3)选择 device 表示使用 rt-thread 的 device 框架,用户基于此框架编写外设驱动并注册后,就可以使用 device 统一接口操作外设。) S$ W5 O# P/ t0 d 9 s$ Z; v4 |+ J: u 本文将 kernel, shell 和 device都选择,然后点击确定,回到Pinout&Configuration界面,将会新增一个“Software Packs”目录,点击进去,多了 RT-Thread软件包选项。" m) }6 |8 \3 H# m
4 w6 d, k3 w; U 勾选kernel, shell 和 device选项,页面将会出现 RT-Thread参数配置页面,先按默认配置。. T( ~+ {2 g9 b. c8 R! F1 r6 ^ 2 t& p, |1 r3 r! o
( C( S& M. @2 l- g! f RT-Thread 操作系统重定义 HardFault_Handler、PendSV_Handler、SysTick_Handler 中断函数,为了避免重复定义的问题,在生成工程之前,需要在中断配置中,代码生成的选项中,取消选择三个中断函数(对应注释选项是 Hard fault interrupt, Pendable request, Time base :System tick timer),最后点击生成代码,具体操作如下图 所示:% e3 o6 w9 r; \# O 7 h4 B0 d6 M0 H# R+ N$ |" t7 x' s& w
) [8 ]# a+ g- j! M 【4】 工程管理(Project Manager)配置页面保持默认配置,点击保存或生成代码按钮生成输出代码。) h( z0 l( q3 D. p k5 w . |! D! t4 A* O9 P3 f' P/ R# e( X
届时,会弹出告警信息,这是因为在stm32cubeMX配置FreeRTOS时,选择时钟源为SysTick会有提示警告。! O% p% J$ }. }, c. i4 a2 m
【5】SysTick以最低的中断优先级运行,因此,在执行此中断时,必须取消所有中断的屏蔽。虽然是告警信息,但为了安全起见,因此需要将SysTick替换为TIM比较好。回到cubeMx配置界面,选择TIM1为系统时钟,注意,选择了TIM1作为系统时钟后,TIM1被占用,变成灰色,不能在用作它途。 h) I) x5 z! Q" w' z# } . x0 z9 m, m8 \0 ]& `) g
' C' i% G4 t* d6 X# Z% n9 N8 x1 ~ 四、工程调整 生成代码后,需要我们进行rt-thread调用,在main.c文件中添加rtthread.h:- K# [. q+ S! M0 H7 } ! U; V" @- N% S" B" u: l
在主循环中,添加如下代码,简单调用rt_thread_mdelay(100)函数验证rtthread是否生效:# [- p& E7 C: I9 d' a
五、编译错误问题解决$ k* x5 X2 t1 ]" v 【1】修改启动文件startup_stm32l496vgtx.s的 bl main 改为 bl entry(图片中第97行),更改此处使芯片在进入main之前启动rt-thread。
! M/ S: m) ? h/ S; g* \1 i 【2】Properties --> C/C++ Build --> Settings --> Tool Settings --> MCU Setting中的Floating-point ABI改为Softwae,该选项可解决浮点相关的一个错误。
" w4 U7 M$ ^3 P8 U* W
【3】 调整Properties --> C/C++ Build --> Settings --> Tool Settings --> MCU GCC Assembler --> Misellaneous添加flags:-Wa,-mimplicit-it=thumb1 _! s$ m! H6 {% ], B- Q2 u4 k3 ~ & N/ `2 ~8 w0 c( P) e3 q
【4】编译会出现usart找不到的报错,这是由于我们开启了console shell功能,因此需要配置串口支持。
在cubeMx中,开启串口功能 1 e7 d: m% ?+ O/ ]$ o
. _8 K0 H8 m2 d9 h- L' X- | 按芯片原理图及引脚参数要求配置+ F) u n. M( E9 W {3 f: M* F7 d
8 b$ O$ V; D% y! S$ a 【5】生成新代码后,再次编译,此时可能会出现以下报错,也是rtthread的console shell有关:
) M7 S4 |7 F6 c m+ |3 M9 V$ D 这从字面意思是需要去rtconfig.h把“#include "finsh_config.h"”注释取消。! P5 H* C; \1 o7 t) T $ M' E' [4 C, \6 P
/ r1 ^& @2 M+ f, t; l0 t 【6】再次编译,下面这个错误问题应该是HAL库及RT-Thread支持版本跟进的问题 ( J6 ]) m9 j; j+ Z" @- k$ h 1 F% @' k" n. \/ H+ Q( ^ 本文所使用的STM32L496VGTX和CubeIDE版本引用的HAL库的USART_TypeDef定义已经没有了“DR字段”: b* ?0 ~! h% l9 u6 ]6 v- p6 X5 h$ ~
: E8 ~" c1 e* a) K8 `+ z: N6 c 该错误点的函数我从字面意思理解,暂时将其调整为如下,调整后编译通过:, L1 Q# x& O/ J9 ^/ D( M- |& y
, f: T% `+ O* U " T+ U9 z2 h' X6 G8 \( I% O7 f0 |; ] 六、下载及测试 【1】设置CubeIDE对该项目的下载支持,右键项目,打开项目属性,选择程序编译输出选项。0 y! |2 ?. u5 M% G2 R
【2】配置运行下载,点击运行按钮下拉列表选择运行配置,进入运行配置界面,配置程序运行加载信息如下图示例。 4 p u# f1 F$ t+ n9 v( D
【3】点击运行,程序顺利下载到STM32L496VGTX板上,闪灯程序正常运作。* e7 o( l4 J+ J9 b & z4 T% j. {! U5 r$ A
程序效果: % l* M8 i& c% t' N5 U
( i/ |1 h6 Y/ K, s ————————————————% K$ m! |( I6 T* {2 K 版权声明:py_free-物联智能% X; `. R: k" v. X7 { 如有侵权请联系删除, a) u8 C$ {) u- `4 f. | 6 ?. A. g6 t3 ^. |9 } : _& W" r* k2 M' I# E& A |
【STM32H5 评测】基础硬件加密与随机数性能 - STM32H5E5实测硬件AES加解密、HASH运算、TRNG真随机数输出速率与稳定性
【STM32H5 评测】内存读写性能 - STM32H5E5实测Flash,SRAM读写速度,用DMA搬运大块数据
【STM32H5 评测】CPU核心性能 - STM32H5E5跑 RTOS,观察任务切换速度、中断响应快慢
【NUCLEO-C562RE】OLED 显示
保姆级教程:CMake 工程导入 STM32CubeIDE 步骤
STM32CubeCLT 1.22.0新版本发布
【下载问题解决】关于ST官网下载软件问题解决
【STM32H735G-DK测评】lvgl移植
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
《MCUBoot课程》学习笔记+从信任链原理到量产实践
微信公众号
手机版
我下macos下面做了很多次,还是放弃了,错误太多了,处理起来太麻烦了。