你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

如何基于STM32CubeIDE结合RT-Thread开发程序

[复制链接]
攻城狮Melo 发布时间:2023-4-6 23:21
一、RT-Thread系统1 q2 W/ F7 A# ?* \2 i
        随着物联网(IoT)市场的迅猛发展,嵌入式设备联网成为了一个刚需。物联网的核心和基础仍是互联网,但不同于互联网强调人与人的互联,物联网是在这样的基础上延伸和扩展出人与物、物与物之间的连接网络。嵌入式设备的联网会使得软件复杂性大幅增加,传统的嵌入式RTOS(实时操作系统)内核已经越来越难满足市场的需求,在这种情况下,物联网操作系统(IoT OS)的概念应运而生。
7 f+ z* R0 `5 Q5 i* @/ S/ _
5 B, j5 B& u4 ?( D, f: W& k+ Z2 a
        物联网操作系统主要分为两大类,一是由传统的嵌入式RTOS发展而来,典型代表有FreeRTOS、LiteOS、RT-Thread、Arm Mbed OS;二是由互联网公司的云平台延伸而来,基于传统操作系统进行“剪裁”和定制,典型代表有Ali OS Things、TencentOS tiny、Win10 IOT。
$ ]1 k3 A* \# ^% O+ @5 p+ H
. s5 V- n2 j/ e
        RT-Thread 是一款主要由中国开源社区主导开发的开源实时操作系统(v3.1.0以及以前版本遵循GPLv2+许可协议,v3.1.0以后版本遵循 Apache License 2.0 开源许可协议),具有完全的自主知识产权,其社区化,中立,开放等产品特性,在国内开源社区具有很强的应用基础。
4 H0 F. a, a. P0 k" u# h# v5 D6 ]0 ?- F: N# I# ^3 Y7 C( I5 J

, P4 d  @9 T9 t二、cubeIDE安装RT-Thread支持2 v# {3 l( o" Y) l3 R+ x0 q9 p  q4 o; Y
        【1】打开cubeIDE工具,点击help->Embeedded Software Packages Manager菜单,打开软件包管理界面,cubeIDE提供了离线及在线两种安装软件包的方式。
' T+ P! A1 L" M4 I" Y5 Q
* `$ l. J4 j9 \        (1)选择From Url ...按键(在线安装);+ d' A) T' g' I7 Y
# G! ]# z2 c* p: g, G/ y- @6 Y7 j
        (2)打开用户自定义包管理界面,点击New按钮;
( R% t) h. g$ r* W' f7 O4 P: K# J  v8 d
        (3)填写RT-Thread在线安装包的源地址* E) J; x5 u3 C; b# d& r
* u4 y9 L9 }2 h7 F; ~
        (4)点击Check检查源地址是否可行,OK的话输入框右侧会出现“√”,点击OK按钮确定。
# J& h% F7 T) H' O, f7 V+ R# K4 k) E$ t# w3 E% S
a039442db8d94cf4bf1200eb37050337.png ' K* n/ b9 B1 E( b. U- }. x

$ ^6 f: X0 M5 |        【2】 点击 OK 回到 User Defined Packs Manager 界面,再次点击 OK,CubeMX 自动连接服务器,获取包描述文件。回到 Manage embedded software packages 界面,就会发现 RT-Thread Nano 软件包列表,选择该软件包版本,点击 Install Now,如下图所示:2 u% [; n2 b3 F6 ~3 x6 K. m* Y( d

* a; l  C+ K; {
0f57fa5a9cd644be81ddeb634d9e3911.png
/ q% J3 V; B: j/ B5 ]- t7 h
2 V9 b! D% e$ C1 P! J         【3】点击安装之后,弹出协议确认对话框,同意该协议,点击 Finish,如下图所示- M0 F# M% _( a' {0 a( W8 _

) z9 G. u! ]( G0 w
fde6f13372c64da6baec466907d8421a.png
/ j, P$ H' l: S7 U5 h5 v7 _) f. I% Y& S9 l8 Y$ m  [. }6 J
         【4】等待安装完成,成功安装后,版本前面的小蓝色框变成填充的绿色,如下图所示:0 _" H9 b  D! w# M

- s- E: i0 Z+ J
4620450a2e4c43ee9721f5729260b5a8.png " Y! B) p: {) b# ?. j3 t# t1 J
7 ]! }( D/ h. k9 J
         RT-Thread有多个版本,其他版本安装类似,安装好的版本前面对话框会填充为绿色,未安装版本是白色的勾选框。
& Z0 R* l7 S& j# ~
. N$ q2 S: K7 K- d8 d6 ], N* ]  L" y        RT-Thread软件包安装完毕,退出 Manage embedded software packages 界面,进入cubeIDE主界面。
5 ~# `4 |1 o3 P+ x( |: g+ k% p3 w- _: m' f) L3 s2 @) \9 }

/ y5 P7 z5 @. p三、创建工程并添加RT-Thread支持
% ]2 I3 `+ s! v6 E' |        【1】点击文件->新建工程->STM32 Project,进入工程创建页面,在MCUMPU selecter页面,按芯片选择创建工程(本文stm32496VGTx),选择好匹配自己手中芯片型号后点击下一步。
3 b7 [8 p) j6 f# o, t- r
: g/ m; Q8 R6 [& V; }
d060872043424c279c215b02fc710985.png
% r/ ?9 D* Y5 H2 \" ^- o: e6 M/ o# I! V) L
         在工程设置窗口中,填入工程名称(及工程路径),完成工程创建。5 v" d$ t) H+ t* I0 y
! [0 G2 J  F7 J' ^6 u" ?8 W
0c035e73f1074f63aa28eb28d6f07204.png
+ E9 G$ x5 |& L6 h3 O  c* {( I
  I! ^2 b- t$ ?+ c         完成工程创建后,会直接进入cubeMx配置界面,若没有,请自行双击工程目录下的"*.ioc"文件进入。0 ]' c2 l) g0 p
0 u) Q9 A6 Y+ u2 f! A4 S3 T  E
       【2】 首先开启系统模式的串口功能及SysTick滴答定时器(该配置会出现告警,先故意为之,后续说明如何调整)支持
4 h0 W' N- F1 m. s/ P4 J8 X9 A" I7 W% B+ E. |5 x" D- G' M
8f89d3d4f6f24757b6065df6a4ec6500.png
" M. Q" P" U8 t6 T7 i. [
# p2 ?8 v/ s4 {         开始RCC外部高速时钟,参数默认设置即可
( D4 c4 I, N9 f3 ?. N) L1 N0 R
" t: @9 Q& X9 i
ab86a6643cc041e296a38204cf78a15c.png 3 @" m' p& l! c- ]; |& D) ?% F
  H6 N0 m8 p4 A. |  p
         本文采用常用的按键及闪灯程序来测试,STM32L496VGT3支持三个按键及三个LED灯,参照其芯片原理图及引脚说明列表,配置按键及LED灯的GPIO引脚。4 [! p  c5 V. p

2 T# `& W4 Y: ]# C4 i) ]1 r! Z
c8c7854cda674634aaf57aa4fe6a0bc4.png
7 d1 o; S- q4 Z" d# _/ X( G4 A         现在芯片视图选择对于针脚的模式(GPIO_OUTPUT或GPIO_INPUT),然后去属性窗口配置其参数及命名。; M& Z9 I% z$ m3 E

( B3 H2 v* ~7 K
bfb3ed12549445e18c3ad015a01bee5c.png - {( q8 Z" X. |& h- v7 c' r
$ f6 T7 }3 E  V% s* q/ w0 ~5 \- u3 ~% G
         时钟设置,简单配置接口,STM32L496VGT3支持到80MHz,本文直接拉满。
7 y* d6 J8 j  f- B$ S3 @! i0 i, n$ J! z+ l5 E7 o! ]. R
db5f49981cf74107aa646627f2efbc1e.png
. l" v+ k3 i/ P
8 ]' C. [7 K( m( M' U7 z0 v: P! u

) z8 y0 m+ \9 Y) |* f        【3】 点击 Softwares Packages->Select Components,进入组件配置界面,选择 RealThread, 然后根据需求选择 RT-Thread 组件,然后点击 OK 按钮,如下图所示:( s& U* x; g+ k' j) ~
- g- \. I! h/ @
d5d9518528a345e3ab81ad29fca91a42.png / s* \# J! Z+ J, T; m) N

, f- k9 }, I1 p1 x. x: P         RT-Thread软件包中包含 kernel, shell 和 device 三个部分,2 C- _# ^2 I. a9 [" t" C+ O
            1)仅选择 kernel 表示只使用 RT-Thread 内核,工程中会添加内核代码;1 @0 U- q7 L, y& M: {
            2)选择 kernel 与 shell 表示在使用 RT-Thread的基础上使用 FinSH Shell 组件,工程中会添加内核代码与 FinSH 组件的代码。
. V, |( z9 z0 j# m            3)选择 device 表示使用 rt-thread 的 device 框架,用户基于此框架编写外设驱动并注册后,就可以使用 device 统一接口操作外设。% M% I$ y2 U$ C! X

" s7 c3 }- |- ~& g4 w; \# |8 J) O        本文将 kernel, shell 和 device都选择,然后点击确定,回到Pinout&Configuration界面,将会新增一个“Software Packs”目录,点击进去,多了 RT-Thread软件包选项。. Z7 q3 y! \; r9 x
# q( m/ Q) U" R# g! B7 C
5eeeb211a734487fb59dae0c138af05a.png 8 u! o1 _3 B& U& l: H2 M8 z
; J% K5 x1 d/ x! ?, v+ L7 K
         勾选kernel, shell 和 device选项,页面将会出现 RT-Thread参数配置页面,先按默认配置。
; q) z  {7 _8 [$ S& }
7 C/ u! i7 {4 h5 V
39d2e0921f394facb1cdbf61afe0bcb4.png 3 d6 Y/ P  O/ [

/ E* y4 Y2 A8 }1 E         RT-Thread 操作系统重定义 HardFault_Handler、PendSV_Handler、SysTick_Handler 中断函数,为了避免重复定义的问题,在生成工程之前,需要在中断配置中,代码生成的选项中,取消选择三个中断函数(对应注释选项是 Hard fault interrupt, Pendable request, Time base :System tick timer),最后点击生成代码,具体操作如下图 所示:9 p3 ^. m. W5 m
+ w9 ^# J$ @& b/ p; Y* b3 v1 K
977a30ed7b2c42f5b9a736a4ad03f59e.png
) ]1 i+ r1 x6 V- y
* N+ ]0 E) v, Q5 X' Z1 n        【4】 工程管理(Project Manager)配置页面保持默认配置,点击保存或生成代码按钮生成输出代码。# T7 _' w9 k: j2 k4 p% \; [
8 I  |/ K- }2 ^# a! ?
417b6c381b4d4db4b52b65b504fed882.png
/ r! h$ i9 @# [) v' C) e' c4 ]0 G! H; H( ~# u2 z
         届时,会弹出告警信息,这是因为在stm32cubeMX配置FreeRTOS时,选择时钟源为SysTick会有提示警告。7 |6 w" g+ B! @9 W
: J* ~  Z9 N; S% T" ]- y4 Q
47966aa52ec746e79e0c8af96daa9fbc.png + H5 f4 M1 a* S' F0 h6 S2 n

0 q- J, L% J% n0 [2 Z/ \

6 K( l& z! b5 w* M/ u; L( Q1 ]         【5】SysTick以最低的中断优先级运行,因此,在执行此中断时,必须取消所有中断的屏蔽。虽然是告警信息,但为了安全起见,因此需要将SysTick替换为TIM比较好。回到cubeMx配置界面,选择TIM1为系统时钟,注意,选择了TIM1作为系统时钟后,TIM1被占用,变成灰色,不能在用作它途。
4 r3 Q3 z6 ]" {" y" X! V9 Z% w5 g2 k0 G7 r2 ^- v' Q
dd3bf9e77d424bd3976f3070dc906cf0.png
: S% }) X7 Y$ m& p* ?
7 e3 {* b8 W: {7 d
四、工程调整
! C- B+ Z6 f* p        生成代码后,需要我们进行rt-thread调用,在main.c文件中添加rtthread.h:( _" k8 u4 h# V) [4 C

& O0 o5 U, Z" P! e* I
cc5a462bbded4eb1b0877f42ad81b41a.png 8 c1 T3 G% e! _3 m" B1 D& {

# k7 s5 G( h( P7 d7 _         在主循环中,添加如下代码,简单调用rt_thread_mdelay(100)函数验证rtthread是否生效:7 I5 Y1 ~* Q7 d/ w
  1.   /* USER CODE BEGIN WHILE */
    # C; i9 E& s4 m/ B0 u1 M. e5 v3 M
  2.   while (1)
    & `7 M& c! O# Z, n
  3.   {: X3 H. X* W/ y: ]; r
  4.           HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);
    ) l+ {* t  W2 G; u; \
  5.           rt_thread_mdelay(100);
    1 |! m: L% A3 z9 o" I
  6.           HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET);
      G9 _' A  g0 R$ P
  7.                     rt_thread_mdelay(100);
    0 V! o! z# w: Y( G
  8.     /* USER CODE END WHILE */
复制代码
5 y# B( V' w9 j; ~: V: K4 W
五、编译错误问题解决
9 V$ z! p- Q: U" x. I
        【1】修改启动文件startup_stm32l496vgtx.s的 bl main 改为 bl entry(图片中第97行),更改此处使芯片在进入main之前启动rt-thread。
3 A3 {9 ]' n) [6 h# J" H; Y. [/ \% L  ?8 i
7949c0487f4c477cb6aca78ac1bd1cb7.png : `) j: l! [6 L; N% a

7 w0 Z: H/ g& P) U  y5 D9 M        【2】Properties --> C/C++ Build --> Settings --> Tool Settings --> MCU Setting中的Floating-point ABI改为Softwae,该选项可解决浮点相关的一个错误。
* e8 v9 d4 E: t$ c
# S) }. N/ [3 p7 O2 g7 M) ?' z
f8b0819b76df4f459354d091523b4d66.png 9 Q' P$ \7 y3 q' L

6 H2 r8 ~" s  }" [6 U
0b41353313084616bce14a2a5f6e744a.png 6 k2 k& u" a  y

; G4 A8 z2 m5 Y1 h" P, s        【3】 调整Properties --> C/C++ Build --> Settings --> Tool Settings --> MCU GCC Assembler --> Misellaneous添加flags:-Wa,-mimplicit-it=thumb+ D0 G6 y1 f5 u' |6 ]7 ?$ M; O1 J. K
8 N& d, |- |- H: O! K
da5167310b244e3db33f84c92f2cb74d.png 3 w, ?# q8 S) T7 x, Y8 m

" i& @0 r6 O+ R! a7 [         【4】编译会出现usart找不到的报错,这是由于我们开启了console shell功能,因此需要配置串口支持。
. s, |3 J) L: V; H* M2 A
9 P! k) ^3 {5 A& G5 Y2 P. r: J
7500fca47773451fa36c33f0d75523f8.png
. ]# @! L5 Z0 r1 m8 ~- |, |
" y- y: Q9 D: i# @( p* z3 Q         在cubeMx中,开启串口功能0 W- M( m. X' P. {/ r8 L

0 [9 P6 \7 T0 _9 O! }& e. e
5dd8a03059754aff82622d36976cc2a6.png ' g' l1 K. T7 R. j# m9 G

( \+ F# O+ |! z         按芯片原理图及引脚参数要求配置
) h/ d1 x/ i- L; D
0 N5 K1 u- n& G/ R6 ]" g3 z
59c6dc812b764bc787ea211d17e4d1df.png & E( a/ z: d) G" H
2 N$ T7 V3 `8 C
         【5】生成新代码后,再次编译,此时可能会出现以下报错,也是rtthread的console shell有关:% K! ]' k9 k7 \1 H: G. m. L

2 y7 c- Z" _) x( [% E
d106625bc5e4443380ccbfa9975cc30f.png
* k/ Z3 Z7 m" d( M7 |: z1 U1 }% a
4 S- B* r; D! Q* l( N; m; i" H
         这从字面意思是需要去rtconfig.h把“#include "finsh_config.h"”注释取消。* c+ N3 h3 Y1 o/ X7 g, L

3 E$ i+ z* e: V: R
0924352513b14685a17794c4294df6d5.png
: _5 B; R5 z% X$ \: K" J) S: X
, z8 ^: \- S0 v8 x+ Z8 ]0 p* e         【6】再次编译,下面这个错误问题应该是HAL库及RT-Thread支持版本跟进的问题
* [, O: }' A: [' i% q1 p
) X: [; Y/ K7 Q6 F8 N
9 B$ S0 J  b2 J) d  ~) v% T( |5 h

- l2 |1 L; M; x" b" I4 v7 `2 q         本文所使用的STM32L496VGTX和CubeIDE版本引用的HAL库的USART_TypeDef定义已经没有了“DR字段”
' O5 g7 F  b1 ?: R' u4 E5 ~# h/ `  @- T6 e, Z  c2 C
df580eca68714696b702bdc06041d6c2.png / R  \. \7 J7 P, v

8 E6 F, `8 Q; V" X9 N# d         该错误点的函数我从字面意思理解,暂时将其调整为如下,调整后编译通过:/ S* G& e0 M; w' T$ {3 F6 K. ?$ e% [
( U$ T! c" X& b( ~
8f01f1c36e7a48dd8a10011c9d386002.png
4 E3 c' z7 p) h, B4 P* L1 Y1 G
6 l' e5 Q5 a4 M: {% q  x8 u
/ x3 [8 e7 F+ `5 f$ ^/ R- a 六、下载及测试3 M% u" Z+ m* I# S0 M- U# I
        【1】设置CubeIDE对该项目的下载支持,右键项目,打开项目属性,选择程序编译输出选项。
# G$ v8 w5 f. B% J: t% z# r9 a8 [
) G+ z8 {( s+ e' ~% B  e
e814a199e52e42bd9ccb36816cca68c3.png ) R* T9 ]' O8 ?

9 Z& Y, p6 J2 f2 v         【2】配置运行下载,点击运行按钮下拉列表选择运行配置,进入运行配置界面,配置程序运行加载信息如下图示例。7 }2 K3 l7 [7 N- i

; E# ~. N5 U+ I% B$ a. j9 H
eb78210453e249f59d18b61c85b59f8e.png
) j; _' I5 s2 A7 d4 W2 o) p1 b8 E! H
: _6 b* b) t6 |% {
         【3】点击运行,程序顺利下载到STM32L496VGTX板上,闪灯程序正常运作。; J! a/ U1 }! P' U3 K: e

7 p; F% I, i# \. f6 u- B* A
53ebf31231e2421da343c636ef50ba0b.png ; L+ w% H5 \% x5 q4 P
( b" \# Y+ u6 H, G: N. C
         程序效果:2 @' E) I8 d4 A- y6 a; B* q

; R7 t  A  }: f  p2 k" I& p- U
e27f9e16db7043fb97acff92e15f3d04.png & _# n, M1 q2 v* B: B9 D

- M$ m, M% X& B5 o- w————————————————. X, b" C+ _5 \' W% b
版权声明:py_free-物联智能
# L7 t9 g! l) D+ m! c6 m如有侵权请联系删除
; S& L5 {  Q4 h9 t  D$ N: D( u7 k" P% t. F

" v! |5 \# S# E! Y/ U  [
$ K: O5 ^1 M0 r1 q
9658cfff911241b39410301639da7c7f.png
收藏 评论1 发布时间:2023-4-6 23:21

举报

1个回答
lugl 回答时间:2023-4-7 09:36:51

我下macos下面做了很多次,还是放弃了,错误太多了,处理起来太麻烦了。

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版