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

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

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

( B$ v7 A+ i9 z7 e; y" A5 I6 W+ F        物联网操作系统主要分为两大类,一是由传统的嵌入式RTOS发展而来,典型代表有FreeRTOS、LiteOS、RT-Thread、Arm Mbed OS;二是由互联网公司的云平台延伸而来,基于传统操作系统进行“剪裁”和定制,典型代表有Ali OS Things、TencentOS tiny、Win10 IOT。
0 ]8 h* S, ^% n

3 E: G2 Y3 ?3 v* z& L        RT-Thread 是一款主要由中国开源社区主导开发的开源实时操作系统(v3.1.0以及以前版本遵循GPLv2+许可协议,v3.1.0以后版本遵循 Apache License 2.0 开源许可协议),具有完全的自主知识产权,其社区化,中立,开放等产品特性,在国内开源社区具有很强的应用基础。8 g1 ^( {6 @5 M( `: y
5 ?" h# I7 D) r1 f6 L, f
' p. M: s6 J, H4 w2 ?
二、cubeIDE安装RT-Thread支持# M0 C% X3 d* X+ \8 f% y9 a
        【1】打开cubeIDE工具,点击help->Embeedded Software Packages Manager菜单,打开软件包管理界面,cubeIDE提供了离线及在线两种安装软件包的方式。$ \: z& B7 V& l% s  }: X, Q
+ h/ \+ O% Q2 ]( o+ v' c2 L: }
        (1)选择From Url ...按键(在线安装);+ w- M( B( g# U$ U% O3 R3 h
& r* X/ ^5 q6 n
        (2)打开用户自定义包管理界面,点击New按钮;
+ w: G5 l, K9 x3 Q( |4 p, n, P) H- Y- d* H
        (3)填写RT-Thread在线安装包的源地址1 Y0 @: P" K/ \& H6 u/ m

. @! f3 Z9 |2 Q! f1 e        (4)点击Check检查源地址是否可行,OK的话输入框右侧会出现“√”,点击OK按钮确定。- s' _# G& e# y- Y3 h! @5 O
9 ]8 X6 L0 i" m( Q+ ]: U! o
a039442db8d94cf4bf1200eb37050337.png
0 \+ H5 r% S: h5 W) A1 o
$ e4 ^+ P0 m& y5 A6 O        【2】 点击 OK 回到 User Defined Packs Manager 界面,再次点击 OK,CubeMX 自动连接服务器,获取包描述文件。回到 Manage embedded software packages 界面,就会发现 RT-Thread Nano 软件包列表,选择该软件包版本,点击 Install Now,如下图所示:2 `2 Y) ?3 b- d8 W8 {; Z7 R' T

9 }4 F5 u9 G, s! [) A6 Z( ^
0f57fa5a9cd644be81ddeb634d9e3911.png $ f! V, {) S) |2 t2 P( L: J

: a+ L- }+ z- t8 @" \* o         【3】点击安装之后,弹出协议确认对话框,同意该协议,点击 Finish,如下图所示
0 e" F# i& E5 M4 I3 P2 ~6 m. b+ d  S, r# |$ R
fde6f13372c64da6baec466907d8421a.png . n8 R- q/ P( l6 B/ k7 o
  [9 S+ v9 K9 f
         【4】等待安装完成,成功安装后,版本前面的小蓝色框变成填充的绿色,如下图所示:
( q# @$ x% k, r1 H5 A/ O' G. u
/ j2 [+ z8 b0 F# ?) ^$ ^+ Q
4620450a2e4c43ee9721f5729260b5a8.png
3 b# I* J9 S! O
/ }5 P, ?# F8 Z! L, [9 K         RT-Thread有多个版本,其他版本安装类似,安装好的版本前面对话框会填充为绿色,未安装版本是白色的勾选框。! ]9 \( o* Q5 S
0 }# D. B: {$ e- ~6 B
        RT-Thread软件包安装完毕,退出 Manage embedded software packages 界面,进入cubeIDE主界面。
7 a+ x) @- ~% H8 ]6 R  r) j( P* N8 U( J

) g# I1 r4 V1 G8 d1 V$ a. Y  x三、创建工程并添加RT-Thread支持
" ?% z; B8 }$ F2 K/ C2 R        【1】点击文件->新建工程->STM32 Project,进入工程创建页面,在MCUMPU selecter页面,按芯片选择创建工程(本文stm32496VGTx),选择好匹配自己手中芯片型号后点击下一步。8 [7 |0 R6 U7 T  Y6 K3 w# B$ j

2 o: A( h" \7 V8 M
d060872043424c279c215b02fc710985.png
; `' m% p" R) t
7 w; |' N3 `; L" n: h5 E2 E' t         在工程设置窗口中,填入工程名称(及工程路径),完成工程创建。# n0 @0 I1 {2 ?5 e8 H# h" ~3 F

- J- b1 `: n! e) M7 j1 B* r$ |
0c035e73f1074f63aa28eb28d6f07204.png ' Q4 E/ Y" Y" g( ?; n% p8 `
3 y; s9 q5 ]5 d0 z
         完成工程创建后,会直接进入cubeMx配置界面,若没有,请自行双击工程目录下的"*.ioc"文件进入。
6 _, ~( \! ?6 K. P! ?" P9 I9 v" D. g* e3 h* w6 U, H
       【2】 首先开启系统模式的串口功能及SysTick滴答定时器(该配置会出现告警,先故意为之,后续说明如何调整)支持
- U% I& l" _/ a" ]6 p
; Q) l" z' z) `% T
8f89d3d4f6f24757b6065df6a4ec6500.png ( D0 k4 v  |% a' y

  U: f+ J) w, F3 b0 J0 p         开始RCC外部高速时钟,参数默认设置即可4 g3 O' K2 O# R- c- J
, L/ r2 m! Q4 m% S
ab86a6643cc041e296a38204cf78a15c.png
7 u6 w5 t0 Y1 L+ C/ L
: I4 ~% q( [, A/ J& R" w. k9 E$ ?         本文采用常用的按键及闪灯程序来测试,STM32L496VGT3支持三个按键及三个LED灯,参照其芯片原理图及引脚说明列表,配置按键及LED灯的GPIO引脚。  Y& m9 U6 H% q$ J

& e/ I# X' i8 W& F
c8c7854cda674634aaf57aa4fe6a0bc4.png . C: O* H/ @0 c7 C
         现在芯片视图选择对于针脚的模式(GPIO_OUTPUT或GPIO_INPUT),然后去属性窗口配置其参数及命名。" @# P2 D6 _( @. O4 x
9 [4 A2 P' R# J" R3 P; h) G+ P2 g
bfb3ed12549445e18c3ad015a01bee5c.png + `6 n7 a, H$ R/ ^& |1 q* i  W5 d
* z+ k( P9 x: b) @/ R9 |3 ]
         时钟设置,简单配置接口,STM32L496VGT3支持到80MHz,本文直接拉满。# Z7 R9 n+ X2 Z8 P; a9 |! H( @2 N

8 Z  P4 }  H/ p1 Q  ^. `+ Y
db5f49981cf74107aa646627f2efbc1e.png 3 l9 _# X( U3 t
$ E- [" e3 C/ L7 g
+ E+ p7 V2 S1 L5 A; p7 R8 E9 Q
        【3】 点击 Softwares Packages->Select Components,进入组件配置界面,选择 RealThread, 然后根据需求选择 RT-Thread 组件,然后点击 OK 按钮,如下图所示:/ c1 _: Y( e0 o( Q# c( W

& d+ [) d' G- [% x1 M& Y
d5d9518528a345e3ab81ad29fca91a42.png 1 ^1 c% M; }& O3 @+ c

* w0 R. n7 |& G) |, D4 B8 z         RT-Thread软件包中包含 kernel, shell 和 device 三个部分,3 |  b( l1 h1 _8 g2 y1 Q/ o" [( d; a
            1)仅选择 kernel 表示只使用 RT-Thread 内核,工程中会添加内核代码;# s9 {- }) C6 n: ~, h
            2)选择 kernel 与 shell 表示在使用 RT-Thread的基础上使用 FinSH Shell 组件,工程中会添加内核代码与 FinSH 组件的代码。' p/ s% D: E$ f. @, _1 |
            3)选择 device 表示使用 rt-thread 的 device 框架,用户基于此框架编写外设驱动并注册后,就可以使用 device 统一接口操作外设。5 q' u% e- l7 B

; C( I+ C) g) M* L! M- `        本文将 kernel, shell 和 device都选择,然后点击确定,回到Pinout&Configuration界面,将会新增一个“Software Packs”目录,点击进去,多了 RT-Thread软件包选项。
8 N& Q/ ?; z( M
/ i( G9 {' u  L( Y
5eeeb211a734487fb59dae0c138af05a.png 4 W% A$ @: S% b! Y) `

* }. H( `5 X  ~         勾选kernel, shell 和 device选项,页面将会出现 RT-Thread参数配置页面,先按默认配置。6 W8 D( W/ f1 x- u3 U3 y
. f, w/ \- q( I- \4 C! x
39d2e0921f394facb1cdbf61afe0bcb4.png % M; W' o3 }/ ^3 A) k$ T7 [
1 O/ e$ z/ h( U* |  v
         RT-Thread 操作系统重定义 HardFault_Handler、PendSV_Handler、SysTick_Handler 中断函数,为了避免重复定义的问题,在生成工程之前,需要在中断配置中,代码生成的选项中,取消选择三个中断函数(对应注释选项是 Hard fault interrupt, Pendable request, Time base :System tick timer),最后点击生成代码,具体操作如下图 所示:
1 C: @& q6 ]3 r. M. w
% Y7 p. }2 z# a/ c' M
977a30ed7b2c42f5b9a736a4ad03f59e.png
+ [$ V( s1 |4 A( n# P2 T; V" v% E5 }3 W" [, x
        【4】 工程管理(Project Manager)配置页面保持默认配置,点击保存或生成代码按钮生成输出代码。
! }0 i' \/ ~. I/ i) P0 Q# G
1 ~3 V! {8 X5 q7 A
417b6c381b4d4db4b52b65b504fed882.png - o4 W+ T) e' ~% Y' Y) t2 H
6 P8 a8 c6 D# M% i. i0 T
         届时,会弹出告警信息,这是因为在stm32cubeMX配置FreeRTOS时,选择时钟源为SysTick会有提示警告。
6 |- u2 Q6 c' m; {2 N/ Z3 y* W  m% m9 N% f
47966aa52ec746e79e0c8af96daa9fbc.png 3 q: V2 W+ [: N1 J( T
% O) i8 ~; ^3 }$ p7 W& f
& R4 a+ U1 c$ j+ t* z- _& u
         【5】SysTick以最低的中断优先级运行,因此,在执行此中断时,必须取消所有中断的屏蔽。虽然是告警信息,但为了安全起见,因此需要将SysTick替换为TIM比较好。回到cubeMx配置界面,选择TIM1为系统时钟,注意,选择了TIM1作为系统时钟后,TIM1被占用,变成灰色,不能在用作它途。
' L1 }! S( q$ G3 n0 W5 i  O
% \$ W3 Q# d" ~3 E
dd3bf9e77d424bd3976f3070dc906cf0.png & i' E1 Y  o4 O: s) _+ @) {
# Y# t* M" a& `" b
四、工程调整
2 O6 C( h% _6 P        生成代码后,需要我们进行rt-thread调用,在main.c文件中添加rtthread.h:9 o( j1 M& O' ~; g

, @1 B. `" b" }/ t9 E4 |1 W0 ?( n" K
cc5a462bbded4eb1b0877f42ad81b41a.png
; _$ e# e: b4 f& z* z+ o5 B8 s
* N- W* X' C& ?- v% }         在主循环中,添加如下代码,简单调用rt_thread_mdelay(100)函数验证rtthread是否生效:$ u; T. A! j. `/ x
  1.   /* USER CODE BEGIN WHILE */
    ' r# U7 F# z, E' [: v
  2.   while (1)
    ; w! X5 W3 C4 H0 d8 h2 M; b
  3.   {" O1 k' v! A5 m: ^& {4 Z8 w$ t2 H
  4.           HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);
      R* ^/ ~( G: [4 y1 Y7 ]
  5.           rt_thread_mdelay(100);
    + y2 C8 }) T# i# @
  6.           HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET);
    + O* @. `8 B" m3 ~  y
  7.                     rt_thread_mdelay(100);
    3 ~0 }; q/ a5 y
  8.     /* USER CODE END WHILE */
复制代码
8 W* e; V; t/ i0 G
五、编译错误问题解决
8 ]. e( S/ G/ @; G8 s
        【1】修改启动文件startup_stm32l496vgtx.s的 bl main 改为 bl entry(图片中第97行),更改此处使芯片在进入main之前启动rt-thread。* ^& z2 G7 H5 t! C0 Q  V) T6 l

- s; {7 [3 _" X, h7 v* S8 x
7949c0487f4c477cb6aca78ac1bd1cb7.png 8 G1 c1 a+ c) G6 n" ^& J2 ^
7 S1 g% C% V- e  F/ ?0 k
        【2】Properties --> C/C++ Build --> Settings --> Tool Settings --> MCU Setting中的Floating-point ABI改为Softwae,该选项可解决浮点相关的一个错误。
' b8 b& k9 _, l3 K# G3 }# j! k- ?! o" [8 C6 Y
f8b0819b76df4f459354d091523b4d66.png * _7 S, n( G# x6 ]

8 h' y1 U; x2 S% r4 n! E: p
0b41353313084616bce14a2a5f6e744a.png 5 D9 M5 T- ^; D" b
7 V+ F' G" I, t; z
        【3】 调整Properties --> C/C++ Build --> Settings --> Tool Settings --> MCU GCC Assembler --> Misellaneous添加flags:-Wa,-mimplicit-it=thumb
  y$ O9 M3 ?5 z9 R8 m- \! y5 B' ]9 Y2 X7 }4 s9 {+ f+ _' w
da5167310b244e3db33f84c92f2cb74d.png $ [! t( U* ~# H% C) J* X
4 S( e3 p5 k; n4 @2 Q6 o
         【4】编译会出现usart找不到的报错,这是由于我们开启了console shell功能,因此需要配置串口支持。
9 n9 o. P2 r+ `4 |, P  ]2 u0 {& v& l) X; M, Q! s( F8 S
7500fca47773451fa36c33f0d75523f8.png . q4 A& n" W2 `% E) ?4 c6 i

( }7 E3 ]7 ~; P# }         在cubeMx中,开启串口功能
5 o! I7 |& M2 d, e2 [
4 \# \1 ], }) Q6 E9 n& O* B
5dd8a03059754aff82622d36976cc2a6.png
; Q1 o& g" a( i' T
" t: o' e" J6 D
         按芯片原理图及引脚参数要求配置
: W/ H( @, a5 ]) ]- f7 H( g" @( P( Q" w  C. S4 y
59c6dc812b764bc787ea211d17e4d1df.png 5 Y' T  D* q* V7 Q( {

4 h  w5 B: V0 x1 i' y) y2 w         【5】生成新代码后,再次编译,此时可能会出现以下报错,也是rtthread的console shell有关:
2 Q; l: @$ u* Z0 l% X& q) R$ ~5 P* {+ T; [) {; f! Y
d106625bc5e4443380ccbfa9975cc30f.png ! I( g: Y$ V! r2 l! p! ]# D
3 W% q. v+ E% ?2 }4 T
         这从字面意思是需要去rtconfig.h把“#include "finsh_config.h"”注释取消。
( N% z* R. \' [0 |6 T" c/ }2 T1 L3 B# D: p/ c) o
0924352513b14685a17794c4294df6d5.png
) X3 }9 B1 ~/ w  M3 ?# C" j% F3 s; i9 a7 ^
         【6】再次编译,下面这个错误问题应该是HAL库及RT-Thread支持版本跟进的问题$ b# ?7 S9 `' q+ C

  I" Y9 \  J9 i

& Z: Q1 H% V6 M$ R" x- T. y
+ k/ b& L1 @3 O  O& N" X
         本文所使用的STM32L496VGTX和CubeIDE版本引用的HAL库的USART_TypeDef定义已经没有了“DR字段”- r$ S' F1 D$ \9 E% R& ~

5 [  T3 h7 h3 [) ~' j# R" E
df580eca68714696b702bdc06041d6c2.png
% e6 I, K0 T; t+ o/ x
4 L5 b* Z* _: a4 {$ R         该错误点的函数我从字面意思理解,暂时将其调整为如下,调整后编译通过:
+ l, `& w' C/ L
1 S6 D9 x0 ?" S; o9 ~& i5 [3 s
8f01f1c36e7a48dd8a10011c9d386002.png
, ^, B* e4 I$ X0 ^" }: s9 `! X- ~. y
/ q- K- P: ?9 _% `; x- B
六、下载及测试
5 M0 f& [& `( i! N% k        【1】设置CubeIDE对该项目的下载支持,右键项目,打开项目属性,选择程序编译输出选项。) M1 D, [+ T! ^+ H

; G( C& ], M- i7 p5 n3 f
e814a199e52e42bd9ccb36816cca68c3.png ; U" i9 |& {* T& u" V
6 C7 t. j: f7 Z# {2 @% C" L% n3 `
         【2】配置运行下载,点击运行按钮下拉列表选择运行配置,进入运行配置界面,配置程序运行加载信息如下图示例。2 h7 U! D/ `- l0 s

: o: H6 O$ F9 ^' D  S8 T
eb78210453e249f59d18b61c85b59f8e.png
6 W, |( M1 H5 z# B0 z4 o1 W7 I+ S

- w, t/ i: B1 [& H; ^. t' e         【3】点击运行,程序顺利下载到STM32L496VGTX板上,闪灯程序正常运作。
2 S4 a2 ?0 ~/ }' y4 s; g+ y
  O8 w1 I! _/ O4 @$ Q2 G  [
53ebf31231e2421da343c636ef50ba0b.png
. c% q! E# T! l& I

4 y! Z2 o. j; n& d         程序效果:
, @5 e6 R* }) H" C3 c, X
' ^# L3 Z# i/ p# v( {* }. e( o
e27f9e16db7043fb97acff92e15f3d04.png
' l1 c) g- a& d) e* G! F7 T

1 I% D: {0 l7 q# ~9 z/ F————————————————8 @$ H+ V6 \- }) u$ r1 T$ `; J
版权声明:py_free-物联智能# {! `  w/ P1 G& p3 V' l  s8 J: a
如有侵权请联系删除% S) v& E/ f5 h2 v3 k6 C1 `! P

, X5 H6 M) \3 @& y9 b! r) L
+ Y8 @7 `" ?* W9 ~9 b- X; p1 H
2 Z1 P6 q$ Q$ [$ |$ y, W
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 手机版