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

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

[复制链接]
攻城狮Melo 发布时间:2023-4-6 23:21
一、RT-Thread系统- q4 _/ b9 w/ G0 x' n
        随着物联网(IoT)市场的迅猛发展,嵌入式设备联网成为了一个刚需。物联网的核心和基础仍是互联网,但不同于互联网强调人与人的互联,物联网是在这样的基础上延伸和扩展出人与物、物与物之间的连接网络。嵌入式设备的联网会使得软件复杂性大幅增加,传统的嵌入式RTOS(实时操作系统)内核已经越来越难满足市场的需求,在这种情况下,物联网操作系统(IoT OS)的概念应运而生。
0 R: Y. p$ c% u4 ^" Q

) ~) S+ L5 T" a! M" e. }, M        物联网操作系统主要分为两大类,一是由传统的嵌入式RTOS发展而来,典型代表有FreeRTOS、LiteOS、RT-Thread、Arm Mbed OS;二是由互联网公司的云平台延伸而来,基于传统操作系统进行“剪裁”和定制,典型代表有Ali OS Things、TencentOS tiny、Win10 IOT。
! N  G  V- b4 b( s
/ K6 S# b0 U* h& a) T
        RT-Thread 是一款主要由中国开源社区主导开发的开源实时操作系统(v3.1.0以及以前版本遵循GPLv2+许可协议,v3.1.0以后版本遵循 Apache License 2.0 开源许可协议),具有完全的自主知识产权,其社区化,中立,开放等产品特性,在国内开源社区具有很强的应用基础。
9 P1 X/ i) A" C; S$ A  w8 @9 b3 c& O$ g" W# D5 E- F* g0 V

. `8 o! m5 j: P& S( Z二、cubeIDE安装RT-Thread支持
5 E0 [$ k" b3 w& S        【1】打开cubeIDE工具,点击help->Embeedded Software Packages Manager菜单,打开软件包管理界面,cubeIDE提供了离线及在线两种安装软件包的方式。
  i" g% G2 W; J4 u
/ L3 |; J( d. }6 g% N2 j        (1)选择From Url ...按键(在线安装);! `7 p0 g9 Q0 A' b; ^
! q5 W  ]. _: H5 Y, K
        (2)打开用户自定义包管理界面,点击New按钮;; c. j( @4 f/ p2 X$ M
8 z# O: D( D2 p+ N
        (3)填写RT-Thread在线安装包的源地址
' f9 t6 y# c" ]
# o. q, `3 @/ ^* q
        (4)点击Check检查源地址是否可行,OK的话输入框右侧会出现“√”,点击OK按钮确定。; o4 y( @! V# Q

, M1 x1 w: j! D, V% F( S, d/ n
a039442db8d94cf4bf1200eb37050337.png
: h9 W3 q  E) o9 j+ g
6 U& Q  `  f) t) _7 w        【2】 点击 OK 回到 User Defined Packs Manager 界面,再次点击 OK,CubeMX 自动连接服务器,获取包描述文件。回到 Manage embedded software packages 界面,就会发现 RT-Thread Nano 软件包列表,选择该软件包版本,点击 Install Now,如下图所示:) ?$ |( O3 ^7 E* p& Q) w" |+ `# N3 }8 Z

9 p( K; i* p; h0 i6 y' E
0f57fa5a9cd644be81ddeb634d9e3911.png
& J+ k9 b( n* O1 m5 w+ N" W. j9 C0 v% S% P3 ~* ]
         【3】点击安装之后,弹出协议确认对话框,同意该协议,点击 Finish,如下图所示
. N* I7 K+ ]3 j" J! u+ f# w" K" h6 Q: w* f0 _4 k& d
fde6f13372c64da6baec466907d8421a.png
4 ]8 W' k8 n  K+ I' k8 l  b- n$ P1 o" V1 R1 g* A9 C( w+ X
         【4】等待安装完成,成功安装后,版本前面的小蓝色框变成填充的绿色,如下图所示:
5 E( @0 t5 j1 ]+ F3 Q# l+ n+ F0 r" X
4620450a2e4c43ee9721f5729260b5a8.png
; g$ s! C: ]  H1 M2 H# q$ f' m* |, \- q
         RT-Thread有多个版本,其他版本安装类似,安装好的版本前面对话框会填充为绿色,未安装版本是白色的勾选框。2 j& H7 H; H$ K# _5 Z6 B
" ?  x( ~( e0 O) b  F$ H3 K
        RT-Thread软件包安装完毕,退出 Manage embedded software packages 界面,进入cubeIDE主界面。# W/ J4 [7 W3 o3 U+ n/ n
( n& i& L7 G3 y, S5 n* g" `; w
8 [8 C. w" a9 X  i3 ]6 }
三、创建工程并添加RT-Thread支持
/ }. z, q( `9 o$ w2 l: c; x        【1】点击文件->新建工程->STM32 Project,进入工程创建页面,在MCUMPU selecter页面,按芯片选择创建工程(本文stm32496VGTx),选择好匹配自己手中芯片型号后点击下一步。
: B. R) L; m+ V% q$ \8 A& e8 r) V4 R7 w- a8 X3 d: V, R/ N4 A- G
d060872043424c279c215b02fc710985.png
8 R, b) L7 {0 H1 H# a- L
# S* Q  p+ g4 K# U         在工程设置窗口中,填入工程名称(及工程路径),完成工程创建。. L4 C# X* o4 l- y. d

/ C( {6 Q7 [7 V3 z
0c035e73f1074f63aa28eb28d6f07204.png 4 T. e, z0 J3 e, j

/ Z( g3 ?' d% ^( d$ O         完成工程创建后,会直接进入cubeMx配置界面,若没有,请自行双击工程目录下的"*.ioc"文件进入。& Q9 A( W: z) i& ]" b
; D4 s4 S5 u* \. B
       【2】 首先开启系统模式的串口功能及SysTick滴答定时器(该配置会出现告警,先故意为之,后续说明如何调整)支持
. ]& V8 x- ^9 K2 [! }$ w
7 b- w; K+ O, f7 N( L
8f89d3d4f6f24757b6065df6a4ec6500.png ! w: @, B8 ^( Z$ {7 x

& X' S8 o/ c2 P" X         开始RCC外部高速时钟,参数默认设置即可
9 ^' g, i+ e% E: \: D) ?) C: P# J8 }
ab86a6643cc041e296a38204cf78a15c.png $ ~2 L/ F6 d9 W; X( @" _5 ]& l
" K6 f0 M7 D+ t& |
         本文采用常用的按键及闪灯程序来测试,STM32L496VGT3支持三个按键及三个LED灯,参照其芯片原理图及引脚说明列表,配置按键及LED灯的GPIO引脚。
- T( R1 Y2 k/ O& j6 H' l
1 t+ g" {" ^6 E  k/ R. L1 m
c8c7854cda674634aaf57aa4fe6a0bc4.png
' _  \: e+ X% g# u7 Y# r         现在芯片视图选择对于针脚的模式(GPIO_OUTPUT或GPIO_INPUT),然后去属性窗口配置其参数及命名。! H7 ?# M/ T9 O+ {
; a, w+ o* V! ]2 U0 P7 N& R3 d+ l
bfb3ed12549445e18c3ad015a01bee5c.png & F  C+ G6 k" y- O/ q% E
: B5 M; e1 Z& `. s  i
         时钟设置,简单配置接口,STM32L496VGT3支持到80MHz,本文直接拉满。
8 |5 q5 z6 m/ K4 ^( y- t* }$ f* S: H; Y6 M7 s/ j' U- d( |
db5f49981cf74107aa646627f2efbc1e.png 9 l" Z  [& Y$ p& s9 D; W, M5 ~6 I

0 |4 A9 o& r5 x9 m+ B( l
/ c! M4 x6 Z5 }/ P
        【3】 点击 Softwares Packages->Select Components,进入组件配置界面,选择 RealThread, 然后根据需求选择 RT-Thread 组件,然后点击 OK 按钮,如下图所示:1 r# C' E! M9 e
2 G- K9 ]( J& K( A& t1 g& h; i  {
d5d9518528a345e3ab81ad29fca91a42.png / p1 k! c' v( Q/ H" ?

" e0 C- j+ a6 y  F1 n         RT-Thread软件包中包含 kernel, shell 和 device 三个部分,2 E0 T$ \( X6 y
            1)仅选择 kernel 表示只使用 RT-Thread 内核,工程中会添加内核代码;7 l+ x% k) u* H, n3 P* a/ N
            2)选择 kernel 与 shell 表示在使用 RT-Thread的基础上使用 FinSH Shell 组件,工程中会添加内核代码与 FinSH 组件的代码。) J+ a; B$ p5 I2 |% Y% R) A
            3)选择 device 表示使用 rt-thread 的 device 框架,用户基于此框架编写外设驱动并注册后,就可以使用 device 统一接口操作外设。
% i. i) c2 {9 C  C# l, \# l9 M0 G1 Z4 b; ?& g
        本文将 kernel, shell 和 device都选择,然后点击确定,回到Pinout&Configuration界面,将会新增一个“Software Packs”目录,点击进去,多了 RT-Thread软件包选项。
8 N- ^8 `+ s# y* \; d  \) \' K+ B; e9 @' r, ]  R
5eeeb211a734487fb59dae0c138af05a.png . U2 W: ^+ g2 ^0 S! _
7 D, n' L+ `/ b
         勾选kernel, shell 和 device选项,页面将会出现 RT-Thread参数配置页面,先按默认配置。
0 h* d4 k! t7 G4 ?/ D
( h' T- G; u" I# _! r: \
39d2e0921f394facb1cdbf61afe0bcb4.png
/ d* c5 u5 p/ L4 x8 B2 ]
1 F+ y% v0 i1 F8 n9 A/ X4 ^' [( ^1 J         RT-Thread 操作系统重定义 HardFault_Handler、PendSV_Handler、SysTick_Handler 中断函数,为了避免重复定义的问题,在生成工程之前,需要在中断配置中,代码生成的选项中,取消选择三个中断函数(对应注释选项是 Hard fault interrupt, Pendable request, Time base :System tick timer),最后点击生成代码,具体操作如下图 所示:
- N9 x$ y0 w+ G( R0 B4 g" c: ~, n
977a30ed7b2c42f5b9a736a4ad03f59e.png
: i7 r1 d1 Y. b0 g. f' S5 S
7 P0 j1 C& n1 h/ U( q        【4】 工程管理(Project Manager)配置页面保持默认配置,点击保存或生成代码按钮生成输出代码。9 D2 m2 m* G+ L

4 z' \" V" F9 F/ Z. v
417b6c381b4d4db4b52b65b504fed882.png 3 ?# Z1 o' w2 r9 [* E, Q( H& b
, R6 ^( _8 A4 A4 D. T9 y
         届时,会弹出告警信息,这是因为在stm32cubeMX配置FreeRTOS时,选择时钟源为SysTick会有提示警告。6 [" Q7 N1 @5 e+ I( J+ ]$ x8 d
4 x4 m# d3 |5 X/ T/ T" U! _8 z
47966aa52ec746e79e0c8af96daa9fbc.png
/ x& g7 l7 \4 j6 c; W3 I7 T8 }( n, `% W4 h5 b1 l2 I( c7 s" z

6 Q  ]( `& F5 n' y         【5】SysTick以最低的中断优先级运行,因此,在执行此中断时,必须取消所有中断的屏蔽。虽然是告警信息,但为了安全起见,因此需要将SysTick替换为TIM比较好。回到cubeMx配置界面,选择TIM1为系统时钟,注意,选择了TIM1作为系统时钟后,TIM1被占用,变成灰色,不能在用作它途。
' v4 r4 Z% U7 y- ]
- l# d! ]9 F$ F" h8 V/ x& ~
dd3bf9e77d424bd3976f3070dc906cf0.png 5 W' n2 Z' W1 g

0 K3 ^# @% Z5 Z* Q  O5 f 四、工程调整
) ^4 D( i& C5 ~  H5 p        生成代码后,需要我们进行rt-thread调用,在main.c文件中添加rtthread.h:
5 D! d+ e; n+ H8 o2 y( h0 M
9 G* g8 S, D/ S; R
cc5a462bbded4eb1b0877f42ad81b41a.png 0 f% G- w, }* ^' ~, p

4 |2 Q. P7 n% Z- w8 @         在主循环中,添加如下代码,简单调用rt_thread_mdelay(100)函数验证rtthread是否生效:
; }: K- ~. w- m6 |! I2 a
  1.   /* USER CODE BEGIN WHILE */" G! g7 O! O3 J8 O3 l) |
  2.   while (1)
    0 F5 R3 w! O, c! `' ^. i& Q1 ~% _+ B
  3.   {
    5 s4 Z! P7 ^1 W$ |$ U6 `$ L# Q1 _
  4.           HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);# X1 |3 C4 g' J8 j- T1 S" c. n  m) M
  5.           rt_thread_mdelay(100);% x3 W, L( P/ n6 T$ _! k
  6.           HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET);1 Z* A& u" f' O2 m. d
  7.                     rt_thread_mdelay(100);) h2 |; z/ o+ e. K; M  Z$ R4 e
  8.     /* USER CODE END WHILE */
复制代码
* h' Y- {6 P5 l, s7 {) ]# x
五、编译错误问题解决
5 l" B+ p% P* l5 T) M
        【1】修改启动文件startup_stm32l496vgtx.s的 bl main 改为 bl entry(图片中第97行),更改此处使芯片在进入main之前启动rt-thread。0 I' z  C* l/ `, e7 [6 ^# S4 _: [
: q/ ?& Y& ]. ~
7949c0487f4c477cb6aca78ac1bd1cb7.png
6 W: R& c5 l4 \% k
: V8 m8 A2 L7 A; o        【2】Properties --> C/C++ Build --> Settings --> Tool Settings --> MCU Setting中的Floating-point ABI改为Softwae,该选项可解决浮点相关的一个错误。
0 q3 V5 d" l7 O3 t0 s- B3 u; D5 D3 ^) r# P. y
f8b0819b76df4f459354d091523b4d66.png . R) O+ p/ P% n/ M& b
7 e9 K1 s# r! G( b  _
0b41353313084616bce14a2a5f6e744a.png ' \# E$ R/ g: h! a( ~

' J; b- p0 g# ^3 A4 \- e# \4 S) _- M        【3】 调整Properties --> C/C++ Build --> Settings --> Tool Settings --> MCU GCC Assembler --> Misellaneous添加flags:-Wa,-mimplicit-it=thumb5 j4 J# o3 u' o  W

6 I& ?: `" r- j+ |' ?; m
da5167310b244e3db33f84c92f2cb74d.png   u) T* [. S& J5 ]7 l7 D1 {2 h0 l

- ?9 D! G. c2 }0 ?1 @         【4】编译会出现usart找不到的报错,这是由于我们开启了console shell功能,因此需要配置串口支持。- R  P; c6 g# R4 b/ A7 |' y
8 H* P0 Z( U& Z, z
7500fca47773451fa36c33f0d75523f8.png & M( o1 T6 ^& {8 b2 o- z& S
% q% Z- `8 A0 ^- R$ `% X: B
         在cubeMx中,开启串口功能9 e% `$ e- X6 K

& G" \0 v" x6 W/ `: i4 x
5dd8a03059754aff82622d36976cc2a6.png
! ?+ {$ s* P7 }6 a$ T
/ I+ A  E) @6 v  ]; ?
         按芯片原理图及引脚参数要求配置
; j7 W6 E5 |( J/ P
5 W( y5 W/ e, C: I  _
59c6dc812b764bc787ea211d17e4d1df.png
( I! @% j+ E. J* m  g8 Z* ^. \2 d$ e6 q3 i( i1 d5 V3 n
         【5】生成新代码后,再次编译,此时可能会出现以下报错,也是rtthread的console shell有关:0 r. g; s2 ^# B2 H( R" p2 f/ F
; ]2 O- e" Y$ i' q
d106625bc5e4443380ccbfa9975cc30f.png
. O. o$ U! S: P+ Q) l* m; b
6 U, }; I) W2 y& d  w
         这从字面意思是需要去rtconfig.h把“#include "finsh_config.h"”注释取消。* h7 z1 c2 z* w, y: u, h
% ^% l' T) T, q$ ]8 W8 v. t5 A
0924352513b14685a17794c4294df6d5.png
- t. o5 q! J3 V+ }/ ~! _8 V/ ~* [2 S
         【6】再次编译,下面这个错误问题应该是HAL库及RT-Thread支持版本跟进的问题
- v( G% ?3 `5 d* Y" _, Z4 g
0 r2 N  [9 b3 T) q! [- G& B8 b

; z- O6 C6 [+ C2 r) B

% U8 o1 }$ E- ]7 e" M) d         本文所使用的STM32L496VGTX和CubeIDE版本引用的HAL库的USART_TypeDef定义已经没有了“DR字段”" p/ j  B: [" f4 N; r
  h7 }  u: d3 D1 e7 b8 S
df580eca68714696b702bdc06041d6c2.png
! n8 l& p) P6 W: G% V
0 O2 S* E+ I9 h. p7 J         该错误点的函数我从字面意思理解,暂时将其调整为如下,调整后编译通过:8 m! Y; {3 ~0 X2 K

1 b* d1 t( F1 t. M
8f01f1c36e7a48dd8a10011c9d386002.png ; I8 _  y. W2 E, j% R- }

9 P) X5 m' [3 V* t5 H( Q; U- Z8 {) y/ Y- ?' k7 n- h1 R9 [, b
六、下载及测试3 g. r; c( |& k4 z1 {
        【1】设置CubeIDE对该项目的下载支持,右键项目,打开项目属性,选择程序编译输出选项。
/ m; A7 k3 B. k8 _
+ F' F: u9 s; |8 X' y
e814a199e52e42bd9ccb36816cca68c3.png : X" t, x$ l7 q9 L- w/ n
# N# ?3 c: H1 C8 R: _
         【2】配置运行下载,点击运行按钮下拉列表选择运行配置,进入运行配置界面,配置程序运行加载信息如下图示例。
% _' J, G3 m& `, Z/ c3 z4 |8 v) {0 a3 ^& a6 s: r/ {
eb78210453e249f59d18b61c85b59f8e.png
# E9 R5 ^+ B' g* ]3 {. t

. `3 {3 P; y* N- q( N' A         【3】点击运行,程序顺利下载到STM32L496VGTX板上,闪灯程序正常运作。2 w' u3 [2 q8 D! @7 s
  |0 @0 d# U( Q2 `) K2 J- @
53ebf31231e2421da343c636ef50ba0b.png
* k( d/ h. `$ `4 o* S: i
0 W: }1 Z; c3 G7 c
         程序效果:
, Z0 x' J/ c* k" v& U; H  t9 t- F! z0 B2 Y/ w3 u. R; E! q8 i
e27f9e16db7043fb97acff92e15f3d04.png % A7 M" Q- h  S8 K( |
/ d8 i2 G  o1 d+ |
————————————————
1 B7 j5 Y1 v( }版权声明:py_free-物联智能
! w( e" r7 G% f& c如有侵权请联系删除" u, F! i6 x( D6 A; E! A+ V  h* u
8 ], F. @* @/ }
" }5 k: h: Q9 }* b/ K3 {
+ t4 I% J& l# j# |' D
9658cfff911241b39410301639da7c7f.png
赞 收藏 评论1 发布时间:2023-4-6 23:21

举报

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

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

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版