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

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

[复制链接]
jundao721 发布时间:2024-7-17 21:10
RT-Thread作为国产OS之光,实际应用中总会遇到的。如何结合Cubemx快捷移植RTT呢?下面结合H533板卡简单的测试一下,然后就是举一反三了。8 m& x# r, b6 Z2 C' v) a3 @
首先打开cubemx工具,点击help->Embeded software packages manager菜单,打开软件包管理界面,cubemx提供了离线及在线安装软件包方式,选择左下角From Url…,弹出的对话框中点击new,如图1所示:
  G# v9 D/ e; G+ l 4-2.JPG
/ `% o- _4 K; t( ^3 i+ f6 |' `5 i' [2 i5 a, m, M* J
图1
: @7 D! \# y( _) w 输入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,等待安装好后。
# [0 C  X" z( x, a1 l, X- z% g" v
3 x) {0 ]6 q/ H: S) v, d  m 安装好后,显示绿色。如图2所示:8 ?( ?* O. T7 G* b
4-1.JPG ! s$ a6 v4 I5 [6 A' ]

: P! |! c7 p* Y5 ?/ L图2+ s1 x' U% I7 ^% @8 G& n1 [1 N
然后回到主界面,选择芯片,双击进入工程参数设置。" ~( `5 V: d  w" t
0 A, N4 J2 o: o' K$ g
点击左边栏的Middleware and Software Packs->X-CUBE-RT-Thread_Nano,进入组件配置界面,选择RealThread.X-CUBE-RT-Thread_Nano,当前四个都选上,如图3所示:- b, |4 O( [5 `2 D( T
4-3.JPG
! L  E0 I- F: [3 p0 ]3 g" F# j
( T' u3 N& W, E图3
6 M7 @) j# Z% T, A9 c; X% J3 d9 e回到主界面,在左边的菜单Middeleware and Software Packs中,再点击X-CUBE-RT-Thread_Nano,选择RTOS RT-Thread,参数默认,如图4所示:' r. W% h' p+ w; C7 E  X! X
4-4.JPG
$ K2 A- @, Y* y% i9 M
. t; Y- L; i; z7 O9 g图4
: Q3 A4 D% i' z: U! s 配置PA5作为输出测试引脚。配置时钟等,无需多言。; W- o; Z" V" E
6 O9 M& s2 i/ d- R
需要在NVIC中去掉三个中断,HardFault_interrupt,Pendable_request interrupt,System tick timer,如图5所示:
5 e$ `# x- d2 c$ e- F 4-5.JPG % v1 c7 _, @; `& }; O0 S. D

  t6 C! W' L, U, b3 d, m图55 }3 M! i4 V. I# @2 h: |
因为RTOS使用了systick,所以为了避免冲突,SYS->Timebae Source 选择TIM15。如图6所示:$ C& G8 j! `) \. z
4-6.JPG
7 t, `, Y$ o# V( K# G  @6 }
8 |  s! t. j6 r9 y图66 M5 f8 K4 C2 \
然后配置Project Manager,Toolchain/IDE使用MDK-ARM.0 k9 T! N$ O6 F! ~8 B& L% R: f

6 Y* r7 p. i. tGenerate code.. L' M$ u" r% H6 W* j2 n% A

! _8 g) b. O& `) V: a4 C) m, }+ X1 L在生成的main函数中添加#include "rtthread.h",编译。
% w$ Y+ y  j8 [$ G7 s/ q8 C
  V3 N* g, _8 D会发现提示board.c文件中,UartHandler错误,没有定义。是因为CubeMX中没有配置这部分。回到CubeMx中,选择UART2,如图7所示
% z, u6 C/ N$ W$ N8 e* R 4-7.JPG
0 Y2 ]7 |* c8 ^: I. Y$ E' L) D5 o1 w" d3 U
图7
8 r: Z0 ]) q+ N, j3 ~按照参数进行配置即可。重新Generate code.7 |! D( X! q1 P. S
, [! t* W8 i; ^2 M" e
编译,正常1 Y' G. O! K6 Q3 T& A
4 p9 _& g" X3 w5 U" \. B- r
在main.c文件中添加一个线程,如下所示:
# ?+ b: v: f/ c( x1 m8 b. O4 @/ k
  1. tatic struct rt_thread thread;
      y3 x& @0 W+ M3 R4 O
  2. static rt_uint8_t thread_stack[THREAD_STACK_SIZE];
    ' {/ r9 ^6 \0 z! M! P+ C
  3. void thread_entry(void *parameter)! d( U6 x$ Z, h
  4. {
    ; X8 `( E! Q$ C
  5.     while (1)! U1 L! w6 f+ J8 G8 P( _
  6.     {
    & d* L% Y# A7 l) l) a8 h8 ^
  7.         HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
    ( G1 U" [" ~' Y! p. \9 R' d9 w
  8.         
    4 M/ N" c0 |: l3 h( z
  9.          rt_thread_mdelay(1000);
    % k; Y) D8 S4 L& R1 q5 V1 l4 g6 x
  10.     }1 Z  A8 e& H- |+ v& ]
  11. }
复制代码
8 J: U; ~$ E, z4 u3 D

# l  {" T1 x6 R* ~% ~main函数中启动线程,并开启调度函数,如下:1 U, T4 k! Y& B5 r
  1. rt_thread_init(&thread, "my_thread", thread_entry, RT_NULL, thread_stack,THREAD_STACK_SIZE, 10, 10);
    # ]; S0 ?" `+ G  \
  2.         rt_thread_startup(&thread);4 Q( N! U- x4 }% `. P! G1 y
  3.                                 rt_system_scheduler_start();
复制代码
编译,debug,就是单任务点个灯,效果如图:
4 b- e: u' E2 q6 X7 U 4-8.gif 9 J" p, c& R8 r0 `# o9 k. r" b1 B

! c( U8 v' Y0 T' b. N2 g移植没啥问题了,就可以多任务模块添加了。
" Z) H) D5 x3 z+ D2 q) ]5 v# P
收藏 评论1 发布时间:2024-7-17 21:10

举报

1个回答
yang9397 回答时间:2024-8-6 08:58:40
初学者适合看看: q2 o( m+ n" P

所属标签

相似分享

官网相关资源

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