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

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

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

5 ~( q' q8 ^6 Z        物联网操作系统主要分为两大类,一是由传统的嵌入式RTOS发展而来,典型代表有FreeRTOS、LiteOS、RT-Thread、Arm Mbed OS;二是由互联网公司的云平台延伸而来,基于传统操作系统进行“剪裁”和定制,典型代表有Ali OS Things、TencentOS tiny、Win10 IOT。1 b1 |; v+ Y/ n
' }+ ?1 K$ ^3 K5 f0 L( x" x2 l
        RT-Thread 是一款主要由中国开源社区主导开发的开源实时操作系统(v3.1.0以及以前版本遵循GPLv2+许可协议,v3.1.0以后版本遵循 Apache License 2.0 开源许可协议),具有完全的自主知识产权,其社区化,中立,开放等产品特性,在国内开源社区具有很强的应用基础。7 `6 l. g! }* D/ d! C

0 M1 B; G/ m! @: T7 p
& G' d2 Z0 G" z  U1 a, R" H
二、cubeIDE安装RT-Thread支持/ o$ `! P) i% [1 q' h/ ]9 r
        【1】打开cubeIDE工具,点击help->Embeedded Software Packages Manager菜单,打开软件包管理界面,cubeIDE提供了离线及在线两种安装软件包的方式。  ^- p/ O" I! S0 }% C5 s+ |. C4 y

, P2 ]) M( z# ~        (1)选择From Url ...按键(在线安装);
7 X* C4 L+ |8 r: o- W8 H8 Z, N4 x
! O0 s# M  p9 k        (2)打开用户自定义包管理界面,点击New按钮;
3 s" a& ]$ w1 g$ _( G7 V' X+ r
% m5 Q; ^$ G7 N) i! U; @( J& }8 m) R        (3)填写RT-Thread在线安装包的源地址
0 M$ a4 F! z- w- v& v2 K

" G) r- y8 i3 C- c, ?6 _        (4)点击Check检查源地址是否可行,OK的话输入框右侧会出现“√”,点击OK按钮确定。1 c0 _' e- K0 ^# F/ @1 L

; J1 m8 I! J5 W4 [$ n6 }
a039442db8d94cf4bf1200eb37050337.png
0 W  L% F, k  G+ I$ I5 b; G7 Y
% _1 r1 w/ ~9 \) B) F/ d( P; W        【2】 点击 OK 回到 User Defined Packs Manager 界面,再次点击 OK,CubeMX 自动连接服务器,获取包描述文件。回到 Manage embedded software packages 界面,就会发现 RT-Thread Nano 软件包列表,选择该软件包版本,点击 Install Now,如下图所示:7 }5 \, Z& M+ ?3 Y* U
: |/ F9 N( y+ q4 \+ ?6 e
0f57fa5a9cd644be81ddeb634d9e3911.png
: h4 F' \' i6 K/ q  E4 C6 x9 s8 f" z0 U, P3 x7 E* H8 p" \6 u
         【3】点击安装之后,弹出协议确认对话框,同意该协议,点击 Finish,如下图所示3 }4 h: j" ^3 r0 A
# z% c9 o, Q  ~  S: Z
fde6f13372c64da6baec466907d8421a.png   I- f) r. E1 G  n0 ^$ k
6 }/ t" ^& Y7 y2 m
         【4】等待安装完成,成功安装后,版本前面的小蓝色框变成填充的绿色,如下图所示:. T6 p6 \' E$ U* b1 u, t% A- p. f# t

& D. n  p, Q! Y9 G
4620450a2e4c43ee9721f5729260b5a8.png
1 G8 a3 ]: {- _6 U  z. U0 T! `5 P! b1 N. [- p# h$ t9 Q9 G! _+ a# h3 X. \
         RT-Thread有多个版本,其他版本安装类似,安装好的版本前面对话框会填充为绿色,未安装版本是白色的勾选框。) }; f6 S6 T: l0 A* R: W' q
; i2 j, {! _9 L# U
        RT-Thread软件包安装完毕,退出 Manage embedded software packages 界面,进入cubeIDE主界面。
& P; F8 M" J3 m$ P
# f: T& _+ b, b( G8 Z* H
0 i- C+ o3 W( @; G1 |" y
三、创建工程并添加RT-Thread支持
' D+ L- _8 d$ i% c% ?% }; }) `2 J        【1】点击文件->新建工程->STM32 Project,进入工程创建页面,在MCUMPU selecter页面,按芯片选择创建工程(本文stm32496VGTx),选择好匹配自己手中芯片型号后点击下一步。* o. k+ b$ S% ~8 }  i
: W- J% W% R! V: D( Q- H" G7 |
d060872043424c279c215b02fc710985.png 4 P+ u* h0 ?  j; G: A
6 R- u5 _* i* u& l1 q& v, F6 Z9 ]
         在工程设置窗口中,填入工程名称(及工程路径),完成工程创建。4 }3 X" Y* d  j7 L. r

' I- ]8 D& [* ^! P9 n) S  L
0c035e73f1074f63aa28eb28d6f07204.png 9 V0 O: n# o# N- {1 I/ Q

4 O! @0 @/ r3 x6 z0 A! L; F         完成工程创建后,会直接进入cubeMx配置界面,若没有,请自行双击工程目录下的"*.ioc"文件进入。7 y) x% H4 W: E8 u! D
7 w) W" b7 J0 s/ `
       【2】 首先开启系统模式的串口功能及SysTick滴答定时器(该配置会出现告警,先故意为之,后续说明如何调整)支持" S- }& g( Y" n' p' u8 Q
+ G* w0 Z: d6 K# }; l: K8 _+ D
8f89d3d4f6f24757b6065df6a4ec6500.png
# x. U) C/ i; X
$ ?% n" w+ b2 p& z         开始RCC外部高速时钟,参数默认设置即可8 W! }/ t7 z, }/ ?4 _8 v' F

: K+ o/ V/ m) |: x/ J3 h5 D# ]
ab86a6643cc041e296a38204cf78a15c.png / G' M4 F0 ?$ I# l! L4 |
' X" R! `' \3 ~% r
         本文采用常用的按键及闪灯程序来测试,STM32L496VGT3支持三个按键及三个LED灯,参照其芯片原理图及引脚说明列表,配置按键及LED灯的GPIO引脚。
# g7 Y2 a; }2 o! |
8 B5 s3 d; c# R; s$ U: t
c8c7854cda674634aaf57aa4fe6a0bc4.png 8 i: P% c. F# f& ~
         现在芯片视图选择对于针脚的模式(GPIO_OUTPUT或GPIO_INPUT),然后去属性窗口配置其参数及命名。& O& O5 Y5 @% k9 J" `6 ^" U
$ r, m9 I$ f3 K7 C+ W
bfb3ed12549445e18c3ad015a01bee5c.png
! j- ~% o' N5 a; Q4 z9 R" ~
6 j+ k6 Q4 R5 X         时钟设置,简单配置接口,STM32L496VGT3支持到80MHz,本文直接拉满。
2 P4 ~; ]$ G5 x% c" o% u- |+ H0 A# H6 I3 ^; O
db5f49981cf74107aa646627f2efbc1e.png & H( m9 e9 L3 r( A! Y, J* {
4 U8 D: D& ]( _# C9 M* y
( v' Z7 A6 H; M6 H3 Q& W, `8 l, y% J2 F, ~
        【3】 点击 Softwares Packages->Select Components,进入组件配置界面,选择 RealThread, 然后根据需求选择 RT-Thread 组件,然后点击 OK 按钮,如下图所示:+ h; `4 }# Y' N; d2 L6 C

# |$ t# N0 C$ R$ P* d' H
d5d9518528a345e3ab81ad29fca91a42.png
6 W0 g6 d6 }0 ?3 |8 Y+ [" M6 ?5 J# d# f; f" ~; z
         RT-Thread软件包中包含 kernel, shell 和 device 三个部分,
+ Z( Q& u# L* h4 |% H            1)仅选择 kernel 表示只使用 RT-Thread 内核,工程中会添加内核代码;# k/ d! _0 |7 V7 H. I. O
            2)选择 kernel 与 shell 表示在使用 RT-Thread的基础上使用 FinSH Shell 组件,工程中会添加内核代码与 FinSH 组件的代码。
) e& [. `. C. @5 i0 ^            3)选择 device 表示使用 rt-thread 的 device 框架,用户基于此框架编写外设驱动并注册后,就可以使用 device 统一接口操作外设。3 y- X$ G! Z5 i( L* D- c

8 W% s2 u5 S/ x3 }! Q4 Z$ ~        本文将 kernel, shell 和 device都选择,然后点击确定,回到Pinout&Configuration界面,将会新增一个“Software Packs”目录,点击进去,多了 RT-Thread软件包选项。
/ r: w/ V9 H% e6 }; E: x4 F. W7 a! A! P. z2 `
5eeeb211a734487fb59dae0c138af05a.png 7 D( F9 G. M# Z$ C6 @

+ \/ T& {* p0 `3 T         勾选kernel, shell 和 device选项,页面将会出现 RT-Thread参数配置页面,先按默认配置。
% `6 {5 w6 H! J
. h6 @2 [- p; J  \: b$ E
39d2e0921f394facb1cdbf61afe0bcb4.png
6 ]/ V# F! b+ ~5 g
: p% c+ Y' s7 Q8 I2 J  Q         RT-Thread 操作系统重定义 HardFault_Handler、PendSV_Handler、SysTick_Handler 中断函数,为了避免重复定义的问题,在生成工程之前,需要在中断配置中,代码生成的选项中,取消选择三个中断函数(对应注释选项是 Hard fault interrupt, Pendable request, Time base :System tick timer),最后点击生成代码,具体操作如下图 所示:
7 y* x! [% P3 k% e1 N! U3 n1 R$ s; p, G+ m8 _$ U
977a30ed7b2c42f5b9a736a4ad03f59e.png
3 O; q" h! b, X; B- P3 B9 |$ g2 Y9 w  y. d
        【4】 工程管理(Project Manager)配置页面保持默认配置,点击保存或生成代码按钮生成输出代码。
/ i, g7 K- y& p8 G) n. f; C! T) e4 N% E6 j! O" C% K# U( N0 ^% }
417b6c381b4d4db4b52b65b504fed882.png
: X7 h# |' J, |4 P! a- K$ E! v- k( a$ \9 X) ~$ G5 m- B
         届时,会弹出告警信息,这是因为在stm32cubeMX配置FreeRTOS时,选择时钟源为SysTick会有提示警告。9 ^1 c/ e8 |% Y5 N( ~

6 L5 u0 H! o- G& G- W) P
47966aa52ec746e79e0c8af96daa9fbc.png
+ x4 x: A% N7 D5 Z
4 |1 {8 ]8 g6 I, i8 A" j4 D

( p) r/ l7 Z( T7 b# ^         【5】SysTick以最低的中断优先级运行,因此,在执行此中断时,必须取消所有中断的屏蔽。虽然是告警信息,但为了安全起见,因此需要将SysTick替换为TIM比较好。回到cubeMx配置界面,选择TIM1为系统时钟,注意,选择了TIM1作为系统时钟后,TIM1被占用,变成灰色,不能在用作它途。- C& P( D4 q7 H: V& G* ~5 O" n

! g! T4 k8 Q& B% _. w$ i: q) I
dd3bf9e77d424bd3976f3070dc906cf0.png 4 n! X0 O# u, V3 O& c
0 Y' s" b9 s' c2 j! ]9 g  I
四、工程调整
) Z2 A) b2 m7 Y' U" j; s' k        生成代码后,需要我们进行rt-thread调用,在main.c文件中添加rtthread.h:, a0 C9 R  {! w# b

9 r4 ~: I* T+ M
cc5a462bbded4eb1b0877f42ad81b41a.png ) A+ P6 @: E6 o2 k
9 k! d+ ]" u3 l8 \8 p
         在主循环中,添加如下代码,简单调用rt_thread_mdelay(100)函数验证rtthread是否生效:
6 X, V! P  s3 g4 ~4 d
  1.   /* USER CODE BEGIN WHILE */  }4 P; x9 j- W& Q* \3 p
  2.   while (1)
    & d( z8 U0 u: A1 C& K1 y
  3.   {
    6 Z6 v  E, ?& e! w" |5 r
  4.           HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);7 A. R, b9 u* g
  5.           rt_thread_mdelay(100);. V4 J  |" l# _: i4 r& P* b
  6.           HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET);% m) \! s1 A' {1 v% A. c
  7.                     rt_thread_mdelay(100);- P8 x9 c7 f  I$ n' F7 V
  8.     /* USER CODE END WHILE */
复制代码
( o6 I. E* y0 j& q/ ?
五、编译错误问题解决
0 O7 B: t1 A6 ~: b6 E4 ~& C
        【1】修改启动文件startup_stm32l496vgtx.s的 bl main 改为 bl entry(图片中第97行),更改此处使芯片在进入main之前启动rt-thread。) J# P& E2 ?. z! J5 Y# O" ^

% N+ p0 t& d) G7 s
7949c0487f4c477cb6aca78ac1bd1cb7.png " B% c6 C: c1 N( q4 f4 S

5 X2 D$ u" X' V# L        【2】Properties --> C/C++ Build --> Settings --> Tool Settings --> MCU Setting中的Floating-point ABI改为Softwae,该选项可解决浮点相关的一个错误。
) E* x" H7 z7 N8 H
' ~: R4 m! I' L& ^  ^
f8b0819b76df4f459354d091523b4d66.png & I1 G6 d5 I5 _$ |1 V
! w1 Q8 g" m% n# g; t- P
0b41353313084616bce14a2a5f6e744a.png + G4 {( X( c' w, ?( u8 l
: G. A7 a2 ~' F" U( P6 ?: j
        【3】 调整Properties --> C/C++ Build --> Settings --> Tool Settings --> MCU GCC Assembler --> Misellaneous添加flags:-Wa,-mimplicit-it=thumb: c) v& Z2 O! j6 W  H5 Y! I

8 ~5 Z& e0 Q# f8 w5 F1 L
da5167310b244e3db33f84c92f2cb74d.png 8 i$ v4 w6 D) M; M1 z0 G
$ w! @. X/ d% X
         【4】编译会出现usart找不到的报错,这是由于我们开启了console shell功能,因此需要配置串口支持。( x0 t% ~; ~& M* S# R1 F7 C2 C' h

1 Y' y" ^. T1 _& g8 a
7500fca47773451fa36c33f0d75523f8.png 6 K0 J2 P/ S  p- ^9 R% Z+ G) e

, d' W4 e# ~, N; a+ M         在cubeMx中,开启串口功能
6 h0 i/ M/ Q+ _& |1 A* i6 c4 ]; q/ K" Q$ |/ W+ n
5dd8a03059754aff82622d36976cc2a6.png
0 q7 r7 @9 ^# n1 t5 b5 G

4 R* C: D- f1 ^' ]: g9 r5 O; _2 d, w         按芯片原理图及引脚参数要求配置- z1 D$ P3 x  ]. t5 `, w! o

5 X0 p2 S9 f9 v
59c6dc812b764bc787ea211d17e4d1df.png
% y, l# r3 v3 @7 ?! f& M% `; d3 g3 S* x( T  [
         【5】生成新代码后,再次编译,此时可能会出现以下报错,也是rtthread的console shell有关:) i$ ]! {( v. i4 A" `6 H& |5 i

! k3 r* V0 `, }) s! }, t
d106625bc5e4443380ccbfa9975cc30f.png
* F) _6 u- F8 P) M7 D
% Z* ~; Y& t# F) Z- v- G! d. F
         这从字面意思是需要去rtconfig.h把“#include "finsh_config.h"”注释取消。& J5 N; I& d1 e; Q2 L- s; ?. h
+ S/ a/ x0 x2 E8 e
0924352513b14685a17794c4294df6d5.png
; }: x& i8 i. i( _" N4 T- o$ W! N6 @8 X( ^
         【6】再次编译,下面这个错误问题应该是HAL库及RT-Thread支持版本跟进的问题
+ x% K9 K2 \: H  d: q. P3 v4 P0 \" v* ?2 x9 J# F
/ ?5 Q6 r& H+ e5 v' d' V+ ]
& k) v7 G' E1 T7 r  O
         本文所使用的STM32L496VGTX和CubeIDE版本引用的HAL库的USART_TypeDef定义已经没有了“DR字段”
* h( K" S( ?6 f5 R/ K  m, X- J! G% O
df580eca68714696b702bdc06041d6c2.png
: y7 T! B6 }" J7 x! L. |7 j6 I2 [9 k  G/ ~7 N  e+ U
         该错误点的函数我从字面意思理解,暂时将其调整为如下,调整后编译通过:
: Z7 ^7 ]5 X' }2 D! N- N5 e" Z/ j& L1 v9 A- P' L  x
8f01f1c36e7a48dd8a10011c9d386002.png
& e* W. b! ?* q$ R
  A/ o* ^$ G5 o3 ]( Y, S
& s- D6 l- H$ i  D6 L) ~' g 六、下载及测试
7 R6 |* @# w3 q. G: ?        【1】设置CubeIDE对该项目的下载支持,右键项目,打开项目属性,选择程序编译输出选项。
& k9 m, S1 ?5 M' S* g" u2 h; H7 \, b: ~
e814a199e52e42bd9ccb36816cca68c3.png
3 K; D9 H' F$ b! e: ~; `. H' _; G
% k4 A1 I" ~0 l. s' T         【2】配置运行下载,点击运行按钮下拉列表选择运行配置,进入运行配置界面,配置程序运行加载信息如下图示例。& X& w, y' P4 ?) x$ Y* c
. [# {/ e* u6 H* n; t2 [$ N: ^
eb78210453e249f59d18b61c85b59f8e.png
* O4 D2 _* f" g% s2 h) }
- e2 F) h) t2 P8 W; m* h6 L
         【3】点击运行,程序顺利下载到STM32L496VGTX板上,闪灯程序正常运作。( e4 w# f4 {# `
3 ~7 U1 d* I, H. x+ o2 ~& i
53ebf31231e2421da343c636ef50ba0b.png
/ F  w3 o: ?% U
6 e2 A; X( L2 w" t% l/ i
         程序效果:
9 ]$ _5 I1 H. U: b4 s/ {& E4 t% h7 ]; A6 Y
e27f9e16db7043fb97acff92e15f3d04.png
" O* s; i0 u# {8 {

$ O/ q" f; ]% j6 U" m————————————————
7 ?  ~. w7 o5 E版权声明:py_free-物联智能
; `* A; {. h: V. C  H如有侵权请联系删除# _8 b% x' d2 w( I
* U! z- U# a0 U/ P8 d+ r# l
  t. h" w  _0 B2 y5 _

" s0 E9 u6 H. J) j
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 手机版