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

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

[复制链接]
jundao721 发布时间:2024-7-17 21:10
RT-Thread作为国产OS之光,实际应用中总会遇到的。如何结合Cubemx快捷移植RTT呢?下面结合H533板卡简单的测试一下,然后就是举一反三了。
/ ^$ p" s6 z( M. Q首先打开cubemx工具,点击help->Embeded software packages manager菜单,打开软件包管理界面,cubemx提供了离线及在线安装软件包方式,选择左下角From Url…,弹出的对话框中点击new,如图1所示:
5 j$ P, C/ F9 B5 Y# W 4-2.JPG 7 S: M2 m1 E3 r- U% }
! h* D1 }4 l9 N
图1
) u; z- r: h/ [2 A! _" }6 M& o% a 输入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 p, Y0 R6 C% w% H0 m/ h4 g9 y2 G2 f. B) V" V( _
安装好后,显示绿色。如图2所示:! w8 F: b( L8 F! F  h/ y, K- j$ W
4-1.JPG / a+ L/ [" p/ c: P6 G# v

3 s" b: G1 t6 E/ H8 W0 H& L图29 @# U+ ~! Z+ V& Z7 H  U2 H, b& R
然后回到主界面,选择芯片,双击进入工程参数设置。
" K1 V' V2 E5 E, X$ `( x: r* |- W1 ]/ t, L
点击左边栏的Middleware and Software Packs->X-CUBE-RT-Thread_Nano,进入组件配置界面,选择RealThread.X-CUBE-RT-Thread_Nano,当前四个都选上,如图3所示:' A, z. Y  D/ q7 _
4-3.JPG ! x* x: X; H) u% T6 w& ]9 z+ T
4 X3 n/ N1 V$ r9 {- y
图31 y, V5 G& `" k( c- o% J) ^+ b7 a
回到主界面,在左边的菜单Middeleware and Software Packs中,再点击X-CUBE-RT-Thread_Nano,选择RTOS RT-Thread,参数默认,如图4所示:
2 c8 f! L3 r0 M; M, {7 ?  Z! X 4-4.JPG 7 G% P* ?9 A- G/ i# E( u
! h$ A: o/ b& V6 J' m2 X+ J
图4
9 @$ A& j4 [" u4 J" o 配置PA5作为输出测试引脚。配置时钟等,无需多言。
) v$ \( |3 R1 v$ I. F
. y1 ]+ _; d5 R( b, M7 S1 b需要在NVIC中去掉三个中断,HardFault_interrupt,Pendable_request interrupt,System tick timer,如图5所示:
9 c8 M' h/ X. J  N8 ^  m+ n 4-5.JPG . J3 L" J- _/ I5 \3 U

2 t/ s- Q& N6 ?3 y- G图5
+ l4 W5 N7 _& @因为RTOS使用了systick,所以为了避免冲突,SYS->Timebae Source 选择TIM15。如图6所示:
( j# |0 j! R% A* U- @8 W" S  Q, @ 4-6.JPG - e2 t: ~7 I! I7 H

0 I- J% ~- d1 C9 \图6- M' T: t# R) G- W( D$ F/ q
然后配置Project Manager,Toolchain/IDE使用MDK-ARM.# S7 s/ r; r" Y# N2 U: g
: N3 M/ u1 T: @0 E4 B' y/ l
Generate code.
& O" @: R5 t0 q  t- I2 w, O2 O6 p* f5 u  _
; [  N( R6 Y, Q- R3 |$ N; \在生成的main函数中添加#include "rtthread.h",编译。
0 V) p; L7 ?! F0 D5 G; e# V. H
5 \, F) H1 F+ B6 k" V+ H会发现提示board.c文件中,UartHandler错误,没有定义。是因为CubeMX中没有配置这部分。回到CubeMx中,选择UART2,如图7所示
2 y# ?9 Q$ L/ }9 Q 4-7.JPG " o) w* p! P  A5 s9 M! a

5 w" u& I8 R" A4 r* e2 K  U0 P图7
' _) h5 s( y3 ^9 C+ J# Z, O2 Q按照参数进行配置即可。重新Generate code.
% q& u0 p8 p3 J1 y
1 u9 P) D' c( `- l+ _' B( u编译,正常# m4 n" Z* n% O4 p+ J

6 q2 j, Y6 |% F  ]( b+ u在main.c文件中添加一个线程,如下所示:
! `& M5 w$ y& L1 Q  S
  1. tatic struct rt_thread thread;7 l3 D' r  x7 R" Q" }; I
  2. static rt_uint8_t thread_stack[THREAD_STACK_SIZE];
    " G6 z. a, ]. ~- H" ^
  3. void thread_entry(void *parameter)+ G1 p% B3 c( ?. v/ ?% }+ {' L3 a
  4. {+ h- w+ X# d7 @# x$ t
  5.     while (1)+ Y- A. G! W2 [9 E. p; z3 x
  6.     {
    ( @2 U7 j% ~& l7 p0 ]
  7.         HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);( q. b  C- Q+ C* W% I8 w6 s
  8.         
    + ]+ T- @" w) g( N' E9 L! ]
  9.          rt_thread_mdelay(1000); 7 J) z) S+ L4 `
  10.     }& [8 s9 c+ c8 m
  11. }
复制代码

5 X. f" \. i( J6 i/ H1 C, e3 y+ `5 k- v: {( ^* @- F
main函数中启动线程,并开启调度函数,如下:
% ^3 u$ P3 s4 R$ j1 ^
  1. rt_thread_init(&thread, "my_thread", thread_entry, RT_NULL, thread_stack,THREAD_STACK_SIZE, 10, 10);$ K% X4 ?2 i$ x
  2.         rt_thread_startup(&thread);0 l9 {& T1 O  q9 H- s8 [) r
  3.                                 rt_system_scheduler_start();
复制代码
编译,debug,就是单任务点个灯,效果如图:0 ~9 s8 v! L$ Z' V/ y/ {; p  B9 h
4-8.gif 9 |  Q3 ?7 `  e( h: j# {
5 g0 d6 w' z3 T+ d7 Q9 d! ~! Y
移植没啥问题了,就可以多任务模块添加了。: r, L4 c6 y, v' |5 [. S6 E5 z0 j' {
收藏 评论1 发布时间:2024-7-17 21:10

举报

1个回答
yang9397 回答时间:2024-8-6 08:58:40
初学者适合看看
3 g/ C) Y* |6 K) K" n3 I

所属标签

相似技术帖

官网相关资源

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