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

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

[复制链接]
攻城狮Melo 发布时间:2023-4-6 23:21
一、RT-Thread系统
* h1 S1 |  z( F5 r1 [0 [, E- ~        随着物联网(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

' H$ N" ]4 ^/ m) h( P7 ^9 j        RT-Thread 是一款主要由中国开源社区主导开发的开源实时操作系统(v3.1.0以及以前版本遵循GPLv2+许可协议,v3.1.0以后版本遵循 Apache License 2.0 开源许可协议),具有完全的自主知识产权,其社区化,中立,开放等产品特性,在国内开源社区具有很强的应用基础。& g* a8 h6 Z- E/ Z

3 n5 Y4 u5 g/ l# ^' A

, b+ A5 v5 h* R' i: a: x/ g二、cubeIDE安装RT-Thread支持
0 U- K5 d0 H, X        【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 ...按键(在线安装);
" H# n  Y( N  E1 F* d
, t) ~4 Q" B8 E# h( {1 [+ o" y* b% O        (2)打开用户自定义包管理界面,点击New按钮;
7 W  W' n5 v3 o6 k
3 ]2 Z: _0 L( @2 V. C2 O+ e        (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
a039442db8d94cf4bf1200eb37050337.png
3 @2 |! h- B; r; J; b3 h3 y
  u, o3 q) n$ S; E4 @! @        【2】 点击 OK 回到 User Defined Packs Manager 界面,再次点击 OK,CubeMX 自动连接服务器,获取包描述文件。回到 Manage embedded software packages 界面,就会发现 RT-Thread Nano 软件包列表,选择该软件包版本,点击 Install Now,如下图所示:
+ m0 P4 J/ W* v. N1 k; s  U' k7 O5 {8 w
0f57fa5a9cd644be81ddeb634d9e3911.png
/ m4 s7 A! T/ I1 K! z# M. w+ t* ?" O, J; A9 g
         【3】点击安装之后,弹出协议确认对话框,同意该协议,点击 Finish,如下图所示
% z5 {  q  \) A# y/ `% P/ I' {* Y( S5 \+ K0 f3 h, n9 T0 |
fde6f13372c64da6baec466907d8421a.png # k; t9 w& W4 E/ b
5 e' j1 {; R3 `5 U: K
         【4】等待安装完成,成功安装后,版本前面的小蓝色框变成填充的绿色,如下图所示:
8 Y1 V( f! A8 f; O
1 q6 `2 d2 b; b7 T( Y
4620450a2e4c43ee9721f5729260b5a8.png & m' H  i3 g. @( I( U( T
8 g) c- d4 m9 J5 D, k% m3 A/ n& k
         RT-Thread有多个版本,其他版本安装类似,安装好的版本前面对话框会填充为绿色,未安装版本是白色的勾选框。
; q% j, v# o9 [
9 H9 i1 F9 d; B0 P: _        RT-Thread软件包安装完毕,退出 Manage embedded software packages 界面,进入cubeIDE主界面。
3 E" \8 |& c7 x0 \9 l
5 {3 r- M  M4 i

! D: F6 @9 H' h8 M三、创建工程并添加RT-Thread支持
4 }1 [' t. e, T* ^$ _0 Q        【1】点击文件->新建工程->STM32 Project,进入工程创建页面,在MCUMPU selecter页面,按芯片选择创建工程(本文stm32496VGTx),选择好匹配自己手中芯片型号后点击下一步。
# U  Z; q2 U, q$ U) L, f, l5 s% T2 }; y) E
d060872043424c279c215b02fc710985.png 6 n. ^6 u( {5 L2 Z' y
" h. x8 H0 B$ `: R& @; C
         在工程设置窗口中,填入工程名称(及工程路径),完成工程创建。
/ E+ U! q! y% r; `( H% n0 N
' G% U+ E0 e6 I; R, P3 @
0c035e73f1074f63aa28eb28d6f07204.png
0 ?2 Y7 i$ V7 S7 H1 t" \2 H3 Y/ z7 ^5 O2 q0 A3 |( N& C* q
         完成工程创建后,会直接进入cubeMx配置界面,若没有,请自行双击工程目录下的"*.ioc"文件进入。$ |/ r2 w- L% A/ o5 F
5 P/ G9 X9 e  _
       【2】 首先开启系统模式的串口功能及SysTick滴答定时器(该配置会出现告警,先故意为之,后续说明如何调整)支持
9 q7 h: ]0 p4 ?+ @  m( C! [& O& w) B& s4 \3 A& n! N
8f89d3d4f6f24757b6065df6a4ec6500.png
, T: _" s9 a& y' f0 q* N9 k) t$ @: n) g) @; ]) w
         开始RCC外部高速时钟,参数默认设置即可
3 `1 V) B7 q3 @: ^( A5 x) }: _2 Y. u3 F, C( i( \0 S. p
ab86a6643cc041e296a38204cf78a15c.png
0 k7 R; g' M& @* f# {' s% g* O: d
         本文采用常用的按键及闪灯程序来测试,STM32L496VGT3支持三个按键及三个LED灯,参照其芯片原理图及引脚说明列表,配置按键及LED灯的GPIO引脚。2 j7 b6 q! N1 D. i
8 v6 F! [( `5 V- \6 p# N
c8c7854cda674634aaf57aa4fe6a0bc4.png 8 W* w) E: a9 C2 }
         现在芯片视图选择对于针脚的模式(GPIO_OUTPUT或GPIO_INPUT),然后去属性窗口配置其参数及命名。
2 d' B" W1 u. |! U
5 b; p. t/ L) E- W
bfb3ed12549445e18c3ad015a01bee5c.png 3 a1 M8 @, a% C

. z0 t  p0 U6 c         时钟设置,简单配置接口,STM32L496VGT3支持到80MHz,本文直接拉满。
  w8 r  Z7 M' h+ l5 G8 Q. r# }$ q/ m% ~3 t9 @# O/ p5 r# f1 S
db5f49981cf74107aa646627f2efbc1e.png ( g4 z0 t/ s$ ?- `, o

& l9 t6 l0 r9 T; }$ _: Y  ^

' w. o* P2 t8 }- V' q        【3】 点击 Softwares Packages->Select Components,进入组件配置界面,选择 RealThread, 然后根据需求选择 RT-Thread 组件,然后点击 OK 按钮,如下图所示:) }% D+ B  V/ h  [/ O  P
" |( }  i; Q/ o
d5d9518528a345e3ab81ad29fca91a42.png 8 T4 m2 a" L; |6 v* F5 Q

& @( k, ^; L" t  I         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 组件的代码。
0 f9 @  ?$ l# S$ P9 X/ Y            3)选择 device 表示使用 rt-thread 的 device 框架,用户基于此框架编写外设驱动并注册后,就可以使用 device 统一接口操作外设。
$ g9 X: v* q2 I, V3 k+ ?9 m5 L
- g  G) q/ \7 ^6 X; d        本文将 kernel, shell 和 device都选择,然后点击确定,回到Pinout&Configuration界面,将会新增一个“Software Packs”目录,点击进去,多了 RT-Thread软件包选项。8 }: `) R! ^3 F. C/ O

, Q3 a/ ^) k( n( S( z" U8 Z% J. r: k/ R
5eeeb211a734487fb59dae0c138af05a.png
7 z6 T& x9 q: ^! U. z7 @( r# k3 `4 v4 o( W0 j
         勾选kernel, shell 和 device选项,页面将会出现 RT-Thread参数配置页面,先按默认配置。& N- v) b: P* ?- T' i. ]

' W1 i3 J! Q# H' i3 m
39d2e0921f394facb1cdbf61afe0bcb4.png / g/ k0 d8 o1 r7 V9 p

' U( p: _6 \  A         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 _
977a30ed7b2c42f5b9a736a4ad03f59e.png
3 e5 T7 B7 E/ r" Y4 _9 z8 r$ @4 Q" }' H
        【4】 工程管理(Project Manager)配置页面保持默认配置,点击保存或生成代码按钮生成输出代码。: h, n4 q) \  X7 J- ^0 E

7 B2 n: R1 {) z) d6 f
417b6c381b4d4db4b52b65b504fed882.png
3 i2 C! B+ m* C* d2 Q- z) D
% e6 S1 Q, I( }9 }& m- w         届时,会弹出告警信息,这是因为在stm32cubeMX配置FreeRTOS时,选择时钟源为SysTick会有提示警告。
2 \' d2 T: b! Y( w' q% ~$ E3 e  I7 x3 ~" r7 y# R( O2 K0 V
47966aa52ec746e79e0c8af96daa9fbc.png
7 i1 L7 C/ f* C. H7 v: b# S
0 Y& |/ S; H# D7 M6 P3 K

& f. z5 k- z) X: N# J         【5】SysTick以最低的中断优先级运行,因此,在执行此中断时,必须取消所有中断的屏蔽。虽然是告警信息,但为了安全起见,因此需要将SysTick替换为TIM比较好。回到cubeMx配置界面,选择TIM1为系统时钟,注意,选择了TIM1作为系统时钟后,TIM1被占用,变成灰色,不能在用作它途。0 }/ O  N0 r5 w4 U# h
9 u# _# }6 Q# k+ M! g
dd3bf9e77d424bd3976f3070dc906cf0.png 3 D3 M/ H5 R, R# H3 N

6 B  F. |* L3 `: K& W 四、工程调整
" b4 c  [9 S- f. r9 H        生成代码后,需要我们进行rt-thread调用,在main.c文件中添加rtthread.h:, G; G  m; ?$ {3 j

9 z0 m7 o# _3 V/ ^' j. V* n1 r9 o* l
cc5a462bbded4eb1b0877f42ad81b41a.png
- X3 P" {1 z# [/ [9 m
3 K9 t# T' t/ M& j+ }, c         在主循环中,添加如下代码,简单调用rt_thread_mdelay(100)函数验证rtthread是否生效:
- I7 B2 |7 ]. [& V
  1.   /* USER CODE BEGIN WHILE */5 S1 o' Z. [! p( x% p
  2.   while (1)  ~* |" F) W9 i4 F2 q/ P
  3.   {/ N2 v  M& K3 }* a
  4.           HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);
    5 M) }# M; J1 C2 I3 _
  5.           rt_thread_mdelay(100);- p! G* R! \) a3 ]' U; {0 H
  6.           HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET);1 f! r: g8 k6 Q0 O7 [5 v3 \
  7.                     rt_thread_mdelay(100);
    6 }7 G) [% w, F! {
  8.     /* USER CODE END WHILE */
复制代码
, G. e! `- X' K, P& C
五、编译错误问题解决
$ 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 \
7949c0487f4c477cb6aca78ac1bd1cb7.png # X8 H7 J/ W+ g% b8 d

2 x0 F% P: R2 p( D8 P3 c8 v        【2】Properties --> C/C++ Build --> Settings --> Tool Settings --> MCU Setting中的Floating-point ABI改为Softwae,该选项可解决浮点相关的一个错误。( H* v6 M3 a4 `6 U" u
; |+ _  A4 S8 Z
f8b0819b76df4f459354d091523b4d66.png * O/ q0 ?% Q- n% y  X) p2 a  @
# x* g5 @& {+ ]) Y# x* s3 \
0b41353313084616bce14a2a5f6e744a.png ; P3 }! O7 ]8 T. H+ E* |$ b

9 ?( K7 x* m$ `! M' y' f& G: t        【3】 调整Properties --> C/C++ Build --> Settings --> Tool Settings --> MCU GCC Assembler --> Misellaneous添加flags:-Wa,-mimplicit-it=thumb
6 B8 q0 ~$ F7 t1 F  b
3 P" L) ^% b. y$ l/ U
da5167310b244e3db33f84c92f2cb74d.png
& C) N# M' g; j/ l: [) z* d! x/ ?
         【4】编译会出现usart找不到的报错,这是由于我们开启了console shell功能,因此需要配置串口支持。6 f4 P+ O, X4 Y8 P, @4 V* ?1 d; b

, ~' J5 n' [3 g6 c9 S
7500fca47773451fa36c33f0d75523f8.png
9 Z$ ^7 y) V, J6 b, {* @' V7 e, U0 q* G
         在cubeMx中,开启串口功能7 `, l: o2 \. P9 W( ]% T( b0 K* k

4 O4 K( Q- z% L2 N; P2 i0 o' D
5dd8a03059754aff82622d36976cc2a6.png 7 B* B  D0 H! ~7 H# f5 G  o

4 p7 j+ o; z" t& t% y4 c" I9 e/ f         按芯片原理图及引脚参数要求配置
4 s& O0 \8 |. ^& O. W. S  [1 p7 V* d" C: ]0 G5 C
59c6dc812b764bc787ea211d17e4d1df.png
0 B! _- o' p7 ~4 p! y) H5 g% [! _/ ^" _1 v' t: l& b, Z
         【5】生成新代码后,再次编译,此时可能会出现以下报错,也是rtthread的console shell有关:/ d9 V; S" W" I
6 t5 V! Q! ~( [9 h- r7 d
d106625bc5e4443380ccbfa9975cc30f.png
, y7 H7 z# f! [1 t% K, l3 A

, ?; z0 }+ a" ^0 U' ]0 X         这从字面意思是需要去rtconfig.h把“#include "finsh_config.h"”注释取消。
4 O0 G+ u% L+ O( }* b2 B
6 k0 M- k8 e" p5 g' t& z8 e4 y
0924352513b14685a17794c4294df6d5.png # f; x& S7 ~8 I1 ~( m
! }* X( s+ R  K3 q
         【6】再次编译,下面这个错误问题应该是HAL库及RT-Thread支持版本跟进的问题
% {4 J# e! z9 C4 T+ @6 g/ O1 a5 l% U7 `8 `( a

# D9 `* j2 j- y' Y5 Y( Z1 U+ z1 m
$ e; G  O  o7 Q/ F
         本文所使用的STM32L496VGTX和CubeIDE版本引用的HAL库的USART_TypeDef定义已经没有了“DR字段”
2 [5 z6 w* }3 D, }8 I0 ~0 q' n# f
: u" \" |4 J6 X" p: A7 c, T
df580eca68714696b702bdc06041d6c2.png & r7 a' O  N0 O
0 T4 I. B# [5 h, y
         该错误点的函数我从字面意思理解,暂时将其调整为如下,调整后编译通过:
. x/ J. [' V' z9 T% C! A& N: W- M* y& D! K: p1 s# l/ x, ^. H
8f01f1c36e7a48dd8a10011c9d386002.png
4 h7 D  d0 @7 A0 @5 X4 g+ m# H& ~, \( d- g' ?6 t( W6 k
. i4 ?/ z$ O+ t4 \
六、下载及测试
9 E: g) Y+ w- w        【1】设置CubeIDE对该项目的下载支持,右键项目,打开项目属性,选择程序编译输出选项。
0 `! v$ B& q* @; E9 F) j. n0 q
* u1 R8 ]) Z& P9 e7 N
e814a199e52e42bd9ccb36816cca68c3.png
$ b" D! X7 o4 x: K( Q9 x/ q5 M+ A& O0 a! ~/ y$ I2 `
         【2】配置运行下载,点击运行按钮下拉列表选择运行配置,进入运行配置界面,配置程序运行加载信息如下图示例。
5 G  Q. R- Y: R3 e+ ]7 p7 x& n* w& @! ^. v+ l6 a
eb78210453e249f59d18b61c85b59f8e.png 6 x" {, @+ C8 v; ^2 y( q
4 ]- [! N% F& e0 i) g# s+ L
         【3】点击运行,程序顺利下载到STM32L496VGTX板上,闪灯程序正常运作。
1 E5 |8 @$ G% X! w* @' m7 [+ `% W8 ^
53ebf31231e2421da343c636ef50ba0b.png 8 S/ X: W$ c1 c# v: Y& c1 b6 D
) Y, f8 I* J6 u! @- p0 i, w+ ]) X
         程序效果:
  p; [" s7 b3 A
' u& l, f* z/ F, p4 r
e27f9e16db7043fb97acff92e15f3d04.png
1 z$ z/ S( ?) B! |1 @6 d

1 f; u+ g: M3 K2 Z% P' W5 T————————————————
. z2 |( Y2 m6 O4 W- q4 e版权声明:py_free-物联智能% f7 e5 m. Z% [3 d# E9 j
如有侵权请联系删除
( L3 q, d9 u0 H& p! \
) H5 W) k2 A" R0 k4 t2 t/ g1 \4 Q8 l" Z5 w
3 K7 {  N1 Y& @( ?! H
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 手机版