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

【NUCLEO-H533RE评测】4.RTT Nano在Cubemx中的使用

[复制链接]
jundao721 发布时间:2024-7-17 21:10
RT-Thread作为国产OS之光,实际应用中总会遇到的。如何结合Cubemx快捷移植RTT呢?下面结合H533板卡简单的测试一下,然后就是举一反三了。
/ E5 x, U7 r; I: `首先打开cubemx工具,点击help->Embeded software packages manager菜单,打开软件包管理界面,cubemx提供了离线及在线安装软件包方式,选择左下角From Url…,弹出的对话框中点击new,如图1所示:5 T) f2 l  m2 }1 I$ X5 T
4-2.JPG
, O5 m, o4 `; Q! u5 I2 d% H2 j5 @6 U5 H9 q2 H& m5 }
图14 D6 y4 O9 [- T9 [9 R+ N
输入RTT的网址,https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc,然后点击check,旁边显示绿色,既显示校验通过。点击OK,回到User Defined Packs Manager界面,再次点击OK。这时,CubeMx自动连接服务器,获取包描述文件,选择RT-Thread Software Components,点击install now,等待安装好后。
6 H1 C0 u% E, k1 k5 I, b) v, L$ s- k
安装好后,显示绿色。如图2所示:
0 K6 R7 }" N: K; D. F2 u 4-1.JPG 0 z! n8 Q: h4 C  A
' s2 O% }1 X2 }- t% n$ |3 G
图2+ a6 W0 d1 T) q& G: v$ k) s6 q
然后回到主界面,选择芯片,双击进入工程参数设置。
( X- m+ \* b' z4 v5 _, {5 J. t
  k) `2 M; r( j7 j* F3 O点击左边栏的Middleware and Software Packs->X-CUBE-RT-Thread_Nano,进入组件配置界面,选择RealThread.X-CUBE-RT-Thread_Nano,当前四个都选上,如图3所示:7 J" q; Y6 l( r, @6 u' M! {
4-3.JPG
! Y! E5 L( D! _1 c" M; P* {: U% `# ~: l
图3
5 |% C2 n7 R+ Y+ G回到主界面,在左边的菜单Middeleware and Software Packs中,再点击X-CUBE-RT-Thread_Nano,选择RTOS RT-Thread,参数默认,如图4所示:
+ m$ [( v5 v3 K9 {4 W2 R# | 4-4.JPG   s0 B5 ^4 W# L2 F0 X3 J8 I

5 |7 q& S* L. H9 v! X% _图4
8 O" ~7 j( l$ V9 V8 j5 D 配置PA5作为输出测试引脚。配置时钟等,无需多言。0 Y3 f! X1 X# G. n. ?# J* E
: `# H/ E" m2 R& Z  N
需要在NVIC中去掉三个中断,HardFault_interrupt,Pendable_request interrupt,System tick timer,如图5所示:1 G6 n. l0 W5 C, H$ ~9 U, Y
4-5.JPG
- m* Z+ @9 Y9 [+ C* P
% M' x: ]2 y0 H( x( i' T; Q图56 J. C" V0 }  m: Z
因为RTOS使用了systick,所以为了避免冲突,SYS->Timebae Source 选择TIM15。如图6所示:, P+ o- ^* j# l
4-6.JPG ) Y/ K& ~3 \* \! }" [

+ S. e$ m1 ~% X5 q图6! F/ A" }0 l0 X0 ^/ T; G6 E
然后配置Project Manager,Toolchain/IDE使用MDK-ARM.
. Z# W! v& U& y# ?4 e; B. O, z) H- k
Generate code.) S7 m! m7 q2 `
  D0 `" a$ ?& b  H9 B' H- Y5 d
在生成的main函数中添加#include "rtthread.h",编译。
1 K+ m1 f. e  O2 k& h- L$ M6 N2 Y1 Q3 _1 w: [0 D, ]
会发现提示board.c文件中,UartHandler错误,没有定义。是因为CubeMX中没有配置这部分。回到CubeMx中,选择UART2,如图7所示: j* }" J& L1 W
4-7.JPG
- W( v1 y8 y$ f8 I( W
; R) o6 J% s) b- T图7
: k# f5 d4 J& O( i2 H按照参数进行配置即可。重新Generate code.7 t  e* X1 {) G4 M: N& [: z

" t( g5 p3 a% Z' X2 W编译,正常" Q1 P% g, @4 A0 \. l1 A

: h7 T* M& _* R9 V! o在main.c文件中添加一个线程,如下所示:! z6 s8 v3 U8 F) p" F) a
  1. tatic struct rt_thread thread;
    1 B9 @* Y( t# z3 c9 B5 l
  2. static rt_uint8_t thread_stack[THREAD_STACK_SIZE];* l- v0 o; k3 u( U! P. X( ?
  3. void thread_entry(void *parameter)# G5 l  s& K) L! f( @; L- X) j+ \" |* F
  4. {
    * a2 n  y* M: t4 ~* a
  5.     while (1)0 z% Z! B- \4 \: b3 a
  6.     {& A) M4 [+ a; G* O3 x( n4 I
  7.         HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);9 y5 i0 B- A: d) p
  8.         
    . w' h6 Z+ U/ F2 B2 t
  9.          rt_thread_mdelay(1000);
    $ v1 z( u( [/ K6 e% e) N/ |: S
  10.     }
    8 n$ Y7 K# d8 i% N# f1 p
  11. }
复制代码
* q5 x3 N. _' u: p
6 X* h. m- ]0 P
main函数中启动线程,并开启调度函数,如下:
  m) `* p% I+ W5 g
  1. rt_thread_init(&thread, "my_thread", thread_entry, RT_NULL, thread_stack,THREAD_STACK_SIZE, 10, 10);
    ' c+ C/ ~4 @5 V1 }! D; E0 X0 p
  2.         rt_thread_startup(&thread);! r! l) n# ~8 M* Q4 g( R
  3.                                 rt_system_scheduler_start();
复制代码
编译,debug,就是单任务点个灯,效果如图:$ r+ Q& m* |' l
4-8.gif
7 H  y$ R6 z+ }9 p! D! i4 k4 Y/ \: ~( C, J8 ]
移植没啥问题了,就可以多任务模块添加了。
2 }4 @$ ]- L. c9 s$ K3 Q3 [
收藏 评论1 发布时间:2024-7-17 21:10

举报

1个回答
yang9397 回答时间:2024-8-6 08:58:40
初学者适合看看
* Z8 d6 L% B* l

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版