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

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

[复制链接]
jundao721 发布时间:2024-7-17 21:10
RT-Thread作为国产OS之光,实际应用中总会遇到的。如何结合Cubemx快捷移植RTT呢?下面结合H533板卡简单的测试一下,然后就是举一反三了。$ B( r+ v, \4 l
首先打开cubemx工具,点击help->Embeded software packages manager菜单,打开软件包管理界面,cubemx提供了离线及在线安装软件包方式,选择左下角From Url…,弹出的对话框中点击new,如图1所示:# Q  |- V: m4 q3 h  P. m
4-2.JPG
8 A/ o5 v5 w  t
8 u. o$ D$ `- H& F/ a6 U' r% n图1' V! p, W! v6 b8 r- e6 Q  z: i
输入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,等待安装好后。8 H& O; P7 b( h
' d' @9 Z3 s1 N! v+ @
安装好后,显示绿色。如图2所示:
$ l' l( M5 i! C. P 4-1.JPG
+ N2 X9 W* D: W% u. L; l2 B0 O2 x; S* g
图2# J! n  R: P1 h4 \% T
然后回到主界面,选择芯片,双击进入工程参数设置。
/ K& W4 m" D9 p" }( f6 F1 ?/ R: }( S
点击左边栏的Middleware and Software Packs->X-CUBE-RT-Thread_Nano,进入组件配置界面,选择RealThread.X-CUBE-RT-Thread_Nano,当前四个都选上,如图3所示:$ v  a5 [9 U3 [1 U% n! g  l
4-3.JPG & E. j# ?1 x+ N4 i) d

* ?# A8 i1 ?1 n( @4 o图3( k' p8 Q$ t& E. d7 Q/ I' ?) ]" ~
回到主界面,在左边的菜单Middeleware and Software Packs中,再点击X-CUBE-RT-Thread_Nano,选择RTOS RT-Thread,参数默认,如图4所示:
1 }3 s9 q$ Q  c7 Q 4-4.JPG
6 Q7 V- a1 U- X% E7 j! K7 e$ X( L( h) I* Y) c5 I
图4
, y" I1 b) l' z 配置PA5作为输出测试引脚。配置时钟等,无需多言。% \8 Q. O) d* r0 k3 n

, r* t% J& X* X0 r需要在NVIC中去掉三个中断,HardFault_interrupt,Pendable_request interrupt,System tick timer,如图5所示:- j" _/ C; i& s3 _
4-5.JPG $ P6 m$ A( i/ F

. ?+ E+ Q) i, u7 k7 H0 `5 }图54 k% T& E7 Q5 p0 T8 P, s
因为RTOS使用了systick,所以为了避免冲突,SYS->Timebae Source 选择TIM15。如图6所示:
0 B4 G$ H0 m' f6 }; u+ S 4-6.JPG
4 i' [  K0 k8 G  L/ s- z' s; s' V) T( Y3 A5 k2 u7 S# Z
图67 Q3 N* g* T+ ?# O0 p
然后配置Project Manager,Toolchain/IDE使用MDK-ARM.
1 v; E4 B* S" n8 o( @
! ]% X2 D# q5 s0 L' B7 E$ _) Z5 JGenerate code.
! X! L( d1 V, h2 N9 }% y, _& l5 v( c
在生成的main函数中添加#include "rtthread.h",编译。( B' m1 e$ m' f. G
+ @9 ^4 ?9 q$ q- U( W  Z
会发现提示board.c文件中,UartHandler错误,没有定义。是因为CubeMX中没有配置这部分。回到CubeMx中,选择UART2,如图7所示" i. f9 ^6 A- q- s% M% L9 v5 M& [
4-7.JPG
2 k! I- M9 z2 N: L  g3 Z
2 L) b. i! [0 M图7
* x, c( v: i, e" p+ u2 I( i) Q按照参数进行配置即可。重新Generate code.# Q, N, w" m) g, p

5 c) |. D0 z% l编译,正常
! [& h: N% L- `/ s. {! K+ s' H3 o+ y6 [' \) `& d" t/ S! ]0 \
在main.c文件中添加一个线程,如下所示:
5 _: t/ B( }4 c2 v4 [
  1. tatic struct rt_thread thread;
    5 V: z7 ~! E4 f0 p& P  Q9 m
  2. static rt_uint8_t thread_stack[THREAD_STACK_SIZE];
    4 f# a: B+ ?9 Y% L# S$ f
  3. void thread_entry(void *parameter)
    + ]% _! c6 B8 i, E) W& t9 o
  4. {
    0 |0 Q0 H) n7 z- z6 D$ I/ y3 z
  5.     while (1)
    ; ]6 K2 q, r* C$ u0 a6 O- z
  6.     {' x' H' p) ~+ h$ {  s+ _5 B# Q
  7.         HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
    4 e6 {: _0 ^" i8 T' Z! ]
  8.         0 @# k0 i; j1 X* _" [& Q0 e
  9.          rt_thread_mdelay(1000); 2 E$ k. V1 o+ ]# {, p8 p
  10.     }
      e7 K8 p: m) D. f- a( v
  11. }
复制代码
' {* P* e+ N: H- p* P" W6 u( B/ {
1 m/ _7 {) F: T% M
main函数中启动线程,并开启调度函数,如下:
' {# S- f/ E& J0 b$ R8 }4 r
  1. rt_thread_init(&thread, "my_thread", thread_entry, RT_NULL, thread_stack,THREAD_STACK_SIZE, 10, 10);# ^: w% P! Z! l# s+ O7 |
  2.         rt_thread_startup(&thread);
    ( Q  c# L9 ~! O9 k6 j1 z, j, B# Q( G% t
  3.                                 rt_system_scheduler_start();
复制代码
编译,debug,就是单任务点个灯,效果如图:$ |0 a) p3 h' e, r% }/ @4 L. g
4-8.gif 2 L' q! \" L- e) h& p
/ E5 d( D2 [( ~8 j5 B" i$ x
移植没啥问题了,就可以多任务模块添加了。% B8 p, F: n: {- k  V
赞 收藏 评论1 发布时间:2024-7-17 21:10

举报

1个回答
yang9397 回答时间:2024-8-6 08:58:40
初学者适合看看
6 K" P' @% I" h# h! p5 Q

所属标签

相似技术帖

官网相关资源

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