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

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

[复制链接]
攻城狮Melo 发布时间:2023-4-6 23:21
一、RT-Thread系统7 g+ `2 V7 X4 C% `2 k" s4 Y
        随着物联网(IoT)市场的迅猛发展,嵌入式设备联网成为了一个刚需。物联网的核心和基础仍是互联网,但不同于互联网强调人与人的互联,物联网是在这样的基础上延伸和扩展出人与物、物与物之间的连接网络。嵌入式设备的联网会使得软件复杂性大幅增加,传统的嵌入式RTOS(实时操作系统)内核已经越来越难满足市场的需求,在这种情况下,物联网操作系统(IoT OS)的概念应运而生。
3 a3 C& i( J/ C( x

& @' b: d5 w" J" t1 [        物联网操作系统主要分为两大类,一是由传统的嵌入式RTOS发展而来,典型代表有FreeRTOS、LiteOS、RT-Thread、Arm Mbed OS;二是由互联网公司的云平台延伸而来,基于传统操作系统进行“剪裁”和定制,典型代表有Ali OS Things、TencentOS tiny、Win10 IOT。  K( S' q' i3 S6 p/ y1 P  f

. t' y- U. u. L# X        RT-Thread 是一款主要由中国开源社区主导开发的开源实时操作系统(v3.1.0以及以前版本遵循GPLv2+许可协议,v3.1.0以后版本遵循 Apache License 2.0 开源许可协议),具有完全的自主知识产权,其社区化,中立,开放等产品特性,在国内开源社区具有很强的应用基础。+ b& x3 O" J8 i8 @# e

1 d* P$ Q+ s0 j
7 X# `2 ~% Z- L; s' D+ m! \
二、cubeIDE安装RT-Thread支持% F( [4 [8 s) _4 Y  Y; @( |/ a
        【1】打开cubeIDE工具,点击help->Embeedded Software Packages Manager菜单,打开软件包管理界面,cubeIDE提供了离线及在线两种安装软件包的方式。
3 l) H" T2 B6 i5 g; H% m  U' {% B2 X. U
        (1)选择From Url ...按键(在线安装);
& q* g6 |2 x9 b- }
" O8 @+ B; f; U9 m        (2)打开用户自定义包管理界面,点击New按钮;
7 U; @# A0 z5 ^$ t% }0 x! |$ {7 J( _
        (3)填写RT-Thread在线安装包的源地址
( q% G0 U7 l5 E2 J  ]% D/ B/ ^4 k
- A9 q* F. t5 O5 o7 V
        (4)点击Check检查源地址是否可行,OK的话输入框右侧会出现“√”,点击OK按钮确定。, |/ H( p! R6 k

$ ^8 a! W! q5 I% @) n3 W
a039442db8d94cf4bf1200eb37050337.png 0 k* P. q4 I5 ]6 a

& m* e( F; v2 A3 P) a; J        【2】 点击 OK 回到 User Defined Packs Manager 界面,再次点击 OK,CubeMX 自动连接服务器,获取包描述文件。回到 Manage embedded software packages 界面,就会发现 RT-Thread Nano 软件包列表,选择该软件包版本,点击 Install Now,如下图所示:
$ Z+ Y; A' w6 l: G7 h) k
/ g! D, p5 A" k) B- m  c% P
0f57fa5a9cd644be81ddeb634d9e3911.png 1 N5 J+ T) f3 k# {

3 k8 W( K, p- u: v; _         【3】点击安装之后,弹出协议确认对话框,同意该协议,点击 Finish,如下图所示
- l- `/ |* o% q7 S8 t! \3 t% W+ U( V
fde6f13372c64da6baec466907d8421a.png
) E' ^1 Z% l" W/ i) r
. `1 S# w. v1 s5 |         【4】等待安装完成,成功安装后,版本前面的小蓝色框变成填充的绿色,如下图所示:+ @' i' P% }: a( D& M. P' z- @) n
& s, C  @! G1 j9 b) h& J
4620450a2e4c43ee9721f5729260b5a8.png 3 P; _! ?, M# G; H$ k: j
- f+ I) Y  M1 e- q2 _' G; A
         RT-Thread有多个版本,其他版本安装类似,安装好的版本前面对话框会填充为绿色,未安装版本是白色的勾选框。" K9 g. m+ e( P  v
. @0 C$ [! \% |, ]2 Q3 s
        RT-Thread软件包安装完毕,退出 Manage embedded software packages 界面,进入cubeIDE主界面。
5 i. u) D+ K$ S: Z& @& f
% W1 D' R0 e) v' G% ?7 x

+ i( g# \# R1 P/ s  z! D三、创建工程并添加RT-Thread支持' G) c. l2 ]0 l0 ^1 L* l: B3 g
        【1】点击文件->新建工程->STM32 Project,进入工程创建页面,在MCUMPU selecter页面,按芯片选择创建工程(本文stm32496VGTx),选择好匹配自己手中芯片型号后点击下一步。& r" h1 j% `  a/ W* ^  `& \7 d- p

# I, C3 x+ Q) [4 d
d060872043424c279c215b02fc710985.png
0 K8 N  _$ o8 K
7 V' r5 J: g' s' M# B* v8 Q2 g         在工程设置窗口中,填入工程名称(及工程路径),完成工程创建。
0 D$ _  X& k- {' _4 v8 }# H- J/ P( Y0 u! m1 f2 h- Y3 w1 t
0c035e73f1074f63aa28eb28d6f07204.png 8 H0 t$ T+ L# o. ~. k% i" G5 M

( V# ^3 K( I+ \5 C4 C         完成工程创建后,会直接进入cubeMx配置界面,若没有,请自行双击工程目录下的"*.ioc"文件进入。
; l7 o1 x7 X7 {; F* r) {  ~. G0 q5 ?8 H: O, {3 \
       【2】 首先开启系统模式的串口功能及SysTick滴答定时器(该配置会出现告警,先故意为之,后续说明如何调整)支持
0 I* t3 y9 Q% R8 N+ x( ]
! K4 p( }  _  s, l- x
8f89d3d4f6f24757b6065df6a4ec6500.png
2 ~! S3 L* j) p4 h! T6 r  M
2 L5 q$ E8 c! B$ ^& m+ `         开始RCC外部高速时钟,参数默认设置即可
+ f9 V# u! `) M% E& ?, R. ?
0 t9 N9 {0 Y5 D9 d3 |
ab86a6643cc041e296a38204cf78a15c.png
+ z$ U; l3 m& J6 P4 a, c6 R
9 I! p. }6 l; L' l* M* K0 C/ L         本文采用常用的按键及闪灯程序来测试,STM32L496VGT3支持三个按键及三个LED灯,参照其芯片原理图及引脚说明列表,配置按键及LED灯的GPIO引脚。
( D* ^5 f6 T2 ~: X1 e# u+ b! E3 A+ N3 l/ h  e
c8c7854cda674634aaf57aa4fe6a0bc4.png 6 i( j3 f5 H2 c* [8 }( J
         现在芯片视图选择对于针脚的模式(GPIO_OUTPUT或GPIO_INPUT),然后去属性窗口配置其参数及命名。
  x3 m0 ?6 d6 Y" C% x' p4 L7 {% J# T* a: Q( \) M6 J, m3 q
bfb3ed12549445e18c3ad015a01bee5c.png $ A8 |7 B) z: k% A0 j0 k  @/ l
0 P6 t& w. o0 i
         时钟设置,简单配置接口,STM32L496VGT3支持到80MHz,本文直接拉满。
" f+ V. w+ P: D( q" [: o* z& i2 ?( K0 O: k0 Q& {( C. E: `
db5f49981cf74107aa646627f2efbc1e.png * R. W; j% z! x" _/ C. U5 D! v9 O: z0 h

* c1 `+ C4 s5 r
& K1 B0 B+ `3 t+ y
        【3】 点击 Softwares Packages->Select Components,进入组件配置界面,选择 RealThread, 然后根据需求选择 RT-Thread 组件,然后点击 OK 按钮,如下图所示:
1 _  s! H. h* D3 N4 M; V* D
+ C% k' [. @* u  e
d5d9518528a345e3ab81ad29fca91a42.png * O4 D7 F! _( ]- P  J5 @

5 [4 R: N# _0 R0 {         RT-Thread软件包中包含 kernel, shell 和 device 三个部分,* v8 R: p! G/ H' c& ?9 [) m" z7 Z0 Y# V
            1)仅选择 kernel 表示只使用 RT-Thread 内核,工程中会添加内核代码;$ ?  B' C: ]" h
            2)选择 kernel 与 shell 表示在使用 RT-Thread的基础上使用 FinSH Shell 组件,工程中会添加内核代码与 FinSH 组件的代码。
* T! j8 l) `8 F0 [            3)选择 device 表示使用 rt-thread 的 device 框架,用户基于此框架编写外设驱动并注册后,就可以使用 device 统一接口操作外设。( h. `  w' S: X0 W  u3 W

  j7 X) Y4 n+ U+ J* O, \        本文将 kernel, shell 和 device都选择,然后点击确定,回到Pinout&Configuration界面,将会新增一个“Software Packs”目录,点击进去,多了 RT-Thread软件包选项。
; `9 K# f0 M3 }" a) \% b
; b" {# h8 {; \  l
5eeeb211a734487fb59dae0c138af05a.png
7 z: h: v7 {+ d$ Y3 O. V& `
6 u( L) w) J8 k, [/ N" z5 q         勾选kernel, shell 和 device选项,页面将会出现 RT-Thread参数配置页面,先按默认配置。' C. A! V/ j" f
9 m  n; a& S' P) @5 |: S
39d2e0921f394facb1cdbf61afe0bcb4.png
* A# }6 f, u6 M' G9 j7 d  f6 \' P
. J9 I" t% k! L4 x% D" p         RT-Thread 操作系统重定义 HardFault_Handler、PendSV_Handler、SysTick_Handler 中断函数,为了避免重复定义的问题,在生成工程之前,需要在中断配置中,代码生成的选项中,取消选择三个中断函数(对应注释选项是 Hard fault interrupt, Pendable request, Time base :System tick timer),最后点击生成代码,具体操作如下图 所示:* d- L/ ?$ f0 f, G0 F% V, }, L

# q! _+ H- T# B# ~$ ~
977a30ed7b2c42f5b9a736a4ad03f59e.png
3 Z1 F+ Q) G2 [0 |
  ]1 Q  h& S' C  f$ A  ~        【4】 工程管理(Project Manager)配置页面保持默认配置,点击保存或生成代码按钮生成输出代码。
. v* }8 o/ y. Z' U5 @* H( a& [0 O: g) s6 l! k& U; _
417b6c381b4d4db4b52b65b504fed882.png
6 }/ q- K4 z$ K9 \3 m# K. N; ?' Q
" F& \! C1 e; s; k4 b; J         届时,会弹出告警信息,这是因为在stm32cubeMX配置FreeRTOS时,选择时钟源为SysTick会有提示警告。) m1 L8 X& f+ p7 W9 D- d" y- z
- s8 e& W5 a# W: d: L
47966aa52ec746e79e0c8af96daa9fbc.png 8 h3 V* i6 x7 g/ Z, d4 c8 l/ I
; Z; A" j) q, ~; ]; m+ s

) |, ~; O' `7 _+ c         【5】SysTick以最低的中断优先级运行,因此,在执行此中断时,必须取消所有中断的屏蔽。虽然是告警信息,但为了安全起见,因此需要将SysTick替换为TIM比较好。回到cubeMx配置界面,选择TIM1为系统时钟,注意,选择了TIM1作为系统时钟后,TIM1被占用,变成灰色,不能在用作它途。# C# H, F% d" c

# k# E1 B2 S8 o0 j$ |! \( k* e
dd3bf9e77d424bd3976f3070dc906cf0.png
( g3 ]" l. h8 \3 k7 [  P* _
+ g. u4 x# C2 Y  z
四、工程调整& _) m7 [& l: t" Z' m3 h, s  M
        生成代码后,需要我们进行rt-thread调用,在main.c文件中添加rtthread.h:
8 W4 W) G( n' O; y4 e
2 i% P3 X2 f) B3 w; w+ s
cc5a462bbded4eb1b0877f42ad81b41a.png : Y% K$ B3 U* X+ d) O$ Z* s
' A1 N0 h4 r8 r6 z- Y+ d
         在主循环中,添加如下代码,简单调用rt_thread_mdelay(100)函数验证rtthread是否生效:
( l# W( t. b9 R( ?& X2 S
  1.   /* USER CODE BEGIN WHILE */
    ! n2 |; x% F" f5 C' T" @
  2.   while (1)
    % Q/ s4 C) e- a1 ]
  3.   {
    ' \2 D# H# v, X' m' U% C; _  R! q
  4.           HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);
    ' R& K9 y0 Z3 h. r- D
  5.           rt_thread_mdelay(100);
    9 }8 C& ~, Z7 {1 D
  6.           HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET);
    / n7 @! |( e6 d  v
  7.                     rt_thread_mdelay(100);# X' {+ M, e% u; a* ]
  8.     /* USER CODE END WHILE */
复制代码

) E+ c; o+ e8 ^' J1 Y! W五、编译错误问题解决

8 Z  c5 d* ^1 b9 ~. H& E) b        【1】修改启动文件startup_stm32l496vgtx.s的 bl main 改为 bl entry(图片中第97行),更改此处使芯片在进入main之前启动rt-thread。
: E  z7 o3 H' u
" G: B) O3 O! L3 e+ ]9 k
7949c0487f4c477cb6aca78ac1bd1cb7.png + Y/ e7 {& A& L  d) y6 [- p

8 C: o6 H7 P! J        【2】Properties --> C/C++ Build --> Settings --> Tool Settings --> MCU Setting中的Floating-point ABI改为Softwae,该选项可解决浮点相关的一个错误。$ r* d( H4 x$ O) v4 t9 E

( J! J+ R4 m6 y/ _( A7 Z
f8b0819b76df4f459354d091523b4d66.png + @" e8 i/ Q0 F( B, l2 \
0 b. S5 F2 W% q* _* n
0b41353313084616bce14a2a5f6e744a.png : ]% C. ]1 t$ A1 e

- R$ Y& C& x( p3 n5 }0 [        【3】 调整Properties --> C/C++ Build --> Settings --> Tool Settings --> MCU GCC Assembler --> Misellaneous添加flags:-Wa,-mimplicit-it=thumb
# v" y' T1 m2 s* @& R
1 X+ G5 Z! P* t7 r/ \5 T
da5167310b244e3db33f84c92f2cb74d.png
$ {( |+ J, T: P8 v, Y0 }1 s
2 d. m3 \$ n2 X3 ~* S  z" v; A         【4】编译会出现usart找不到的报错,这是由于我们开启了console shell功能,因此需要配置串口支持。/ O7 ~- R3 x! n$ V

! P4 j# C3 B" ^0 n
7500fca47773451fa36c33f0d75523f8.png
& q, ~1 J0 f  L& ~0 i% l4 u4 f# n. t5 a, @3 y! k! q' j- G' }7 K( V
         在cubeMx中,开启串口功能( m: z) f$ r. Z$ R

( v! w2 @5 p. r8 c& s/ w
5dd8a03059754aff82622d36976cc2a6.png . B9 [' Q' D! D' X. w+ ]
; Q+ c1 c: p& G5 S
         按芯片原理图及引脚参数要求配置
; }7 a  B5 {* P$ D
5 W5 g9 y8 |7 s% }
59c6dc812b764bc787ea211d17e4d1df.png ' i  p3 v2 X. u4 ?5 k

3 ~! u' c2 ~8 N4 x7 ]0 G+ f& h% q# e/ h% ]         【5】生成新代码后,再次编译,此时可能会出现以下报错,也是rtthread的console shell有关:; \3 }( x7 {6 a( t6 T" ?
/ ~  W3 a1 ]9 [2 U
d106625bc5e4443380ccbfa9975cc30f.png
$ F# d( F4 t8 w) j3 Y3 t1 _4 x$ Y
5 |4 T& i7 [7 t  o- t3 ~9 l0 o: S
         这从字面意思是需要去rtconfig.h把“#include "finsh_config.h"”注释取消。
, C- N1 [% l- a6 ?# ]# f, l
8 E0 w% j! h; l& f
0924352513b14685a17794c4294df6d5.png 7 q6 P# B( E  t: O
  z* H& ]' a( {9 J/ H6 E( |
         【6】再次编译,下面这个错误问题应该是HAL库及RT-Thread支持版本跟进的问题0 q) f! t% [9 T' k6 I/ v* N& ^
8 h/ g( n& \& W2 \

3 z/ N4 b# q& O1 q- F% N; T( N6 m

) J+ H. T; z+ L3 o         本文所使用的STM32L496VGTX和CubeIDE版本引用的HAL库的USART_TypeDef定义已经没有了“DR字段”: D* V8 G0 C9 Z$ r% l8 Z

0 A) G/ `6 z3 ?0 E% @. B: @
df580eca68714696b702bdc06041d6c2.png
! c: C4 h0 T* ?" W- b0 S" q) D* `. w2 X8 h) i, K- f6 R
         该错误点的函数我从字面意思理解,暂时将其调整为如下,调整后编译通过:9 i6 A; ?" V. E5 ?+ K+ J
* G; P: q2 @5 z. h" G/ g
8f01f1c36e7a48dd8a10011c9d386002.png
( y0 R6 k$ U, m& T* V/ s% P5 r% P: a2 W$ y& o# L: w7 d- c& N

/ U* w2 w3 t, x2 ~! v 六、下载及测试: d+ T5 @2 T7 N# e
        【1】设置CubeIDE对该项目的下载支持,右键项目,打开项目属性,选择程序编译输出选项。+ P7 A/ J; U/ r
5 ~1 [# M$ n7 \
e814a199e52e42bd9ccb36816cca68c3.png ) t* _' c9 y( P1 B0 S  e, L( T+ c
9 K) }' R% k, {
         【2】配置运行下载,点击运行按钮下拉列表选择运行配置,进入运行配置界面,配置程序运行加载信息如下图示例。; X2 _; b/ y& G& J
3 f9 s2 v% o3 J5 C; ?
eb78210453e249f59d18b61c85b59f8e.png
! g! N& o+ ~+ b0 {( @8 C
6 l0 ^: A3 K& f
         【3】点击运行,程序顺利下载到STM32L496VGTX板上,闪灯程序正常运作。
5 ^% T& D- }( D9 @
/ ]9 d  ]& k0 a- Z
53ebf31231e2421da343c636ef50ba0b.png
  ~- v. h( t2 Q  e9 C
( M6 q' n& i' h" d" D9 \: ~* D& _
         程序效果:
3 `3 M9 B! {6 t; y; D( I  @8 X. W( x* Y
e27f9e16db7043fb97acff92e15f3d04.png
" `9 O" V; v" d# g$ o! o+ @
3 U+ g' X+ w2 q
————————————————: V/ ]% ~1 v1 r; ]0 ~  {3 H
版权声明:py_free-物联智能
2 V" ~0 m( k7 N如有侵权请联系删除8 ^; Q; F! k( y! F

7 Z" R; r4 b+ ?2 d" [5 n/ d) `+ I
: L5 I9 M" y  O" @6 U
- ~3 R! ^  P* ~7 P* B  M
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 手机版