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

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

[复制链接]
jundao721 发布时间:2024-7-17 21:10
RT-Thread作为国产OS之光,实际应用中总会遇到的。如何结合Cubemx快捷移植RTT呢?下面结合H533板卡简单的测试一下,然后就是举一反三了。  A5 o  l$ o2 [/ e2 T# B
首先打开cubemx工具,点击help->Embeded software packages manager菜单,打开软件包管理界面,cubemx提供了离线及在线安装软件包方式,选择左下角From Url…,弹出的对话框中点击new,如图1所示:
3 ?$ T7 Y8 K3 N/ ^ 4-2.JPG
' l- M' [8 J% U
4 f6 w" c/ k& F+ a6 {8 K图1* s) E( I4 i3 V7 U# c$ _% 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,等待安装好后。) j: V& X+ u# `
- I2 K  N8 L  }
安装好后,显示绿色。如图2所示:# ^& R' C& z) V
4-1.JPG 7 s2 K& T" S6 u

( S7 P3 w* b7 F图2
8 [5 M7 s+ V3 Z8 W8 g0 A然后回到主界面,选择芯片,双击进入工程参数设置。
/ q" G5 e, |9 M7 S2 v* {4 t
: I9 f) ]+ g6 P7 @! t2 d: {% r点击左边栏的Middleware and Software Packs->X-CUBE-RT-Thread_Nano,进入组件配置界面,选择RealThread.X-CUBE-RT-Thread_Nano,当前四个都选上,如图3所示:
! P: Y( F, q1 O 4-3.JPG 5 d; ?0 n9 O0 J" D* H

, C/ t/ }" P) v9 ^2 v7 M6 c图3
- g& [+ A) T; y* X- A( s回到主界面,在左边的菜单Middeleware and Software Packs中,再点击X-CUBE-RT-Thread_Nano,选择RTOS RT-Thread,参数默认,如图4所示:5 k8 S8 ~6 q3 ]. w5 _7 Q
4-4.JPG
3 ]! _' W7 l9 }% f: P( o
2 B9 V7 w. Y. e- ?8 B  y9 k( G% T8 S图4
1 ]* y* l+ ^6 `- M  ^9 p# O 配置PA5作为输出测试引脚。配置时钟等,无需多言。3 M4 R2 U# p+ n1 h: I0 F+ G

& Y+ \5 W6 g- F- V) O5 U  L需要在NVIC中去掉三个中断,HardFault_interrupt,Pendable_request interrupt,System tick timer,如图5所示:5 A, T- S6 ]; y6 n
4-5.JPG
$ @9 ^2 i6 ]# Y8 C; E
# ~2 W; C2 X* j% t) ?图5
4 `3 b  C+ ]# D5 l  x1 P因为RTOS使用了systick,所以为了避免冲突,SYS->Timebae Source 选择TIM15。如图6所示:# d' F( x$ M" J% p/ a/ {# @
4-6.JPG . T/ ?, C! q" k* M

; i; U' h, R, D  v& R图6
0 u0 l3 Z& L, [! r7 g( F& m/ H然后配置Project Manager,Toolchain/IDE使用MDK-ARM.' o/ @) C8 e, N* l: {& S- j- W
* W) G- S4 ]+ ]" l
Generate code.
$ I. L; R2 T% @" m6 R3 J
8 ^2 x" P$ j3 d在生成的main函数中添加#include "rtthread.h",编译。
+ F8 ^$ S4 ]' `$ D- [( C, y7 _2 c( C. a6 }  e) l
会发现提示board.c文件中,UartHandler错误,没有定义。是因为CubeMX中没有配置这部分。回到CubeMx中,选择UART2,如图7所示
3 V1 e! ~( z( h0 v1 J7 Z 4-7.JPG
! a) V7 M6 C( B5 J6 L: N; d. g9 }/ u
图7
: Z# n! U& J- P. g: Q  C) i按照参数进行配置即可。重新Generate code.
2 g9 e5 S; w- Z5 s
5 d/ K3 j2 E; G& ^编译,正常
7 L* z6 ?# z0 b5 h0 ?2 S
3 k- @) ^1 a: y+ F$ {9 o' `" z在main.c文件中添加一个线程,如下所示:' L- f; s: m, p; y0 H0 V
  1. tatic struct rt_thread thread;
    / X$ @$ i$ _6 y5 E  m
  2. static rt_uint8_t thread_stack[THREAD_STACK_SIZE];. ^: j' X5 T/ ^# ^9 j
  3. void thread_entry(void *parameter)
    5 p4 [7 A9 z* t6 R3 }
  4. {
    ) G3 d; Q, p1 q8 S, R7 v0 W" f
  5.     while (1)
    & d: E0 x( _  n
  6.     {
    7 l9 m( K# i. W" ]# T2 o3 R
  7.         HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
    1 h* l9 V7 V" F  \! O
  8.         ; [" ~4 @* B: w; j1 L
  9.          rt_thread_mdelay(1000);
    ' ~+ E  i" j! o; W/ ]: L
  10.     }/ t: l: ^# j( T  D
  11. }
复制代码
* t7 }/ {- n) D& P

0 K' s) B6 y$ pmain函数中启动线程,并开启调度函数,如下:
  O3 ^" a, _$ Z% u* Z
  1. rt_thread_init(&thread, "my_thread", thread_entry, RT_NULL, thread_stack,THREAD_STACK_SIZE, 10, 10);
    ; {3 I) y* {; [# D
  2.         rt_thread_startup(&thread);
    8 O' K4 r: ~1 O0 E
  3.                                 rt_system_scheduler_start();
复制代码
编译,debug,就是单任务点个灯,效果如图:% M/ [) T2 k* }
4-8.gif & H; f4 @" c# Q) U
  J1 _  X' ^$ Z' f5 J% _
移植没啥问题了,就可以多任务模块添加了。7 q7 f* T/ g6 s# {3 L6 K9 h
赞 收藏 评论1 发布时间:2024-7-17 21:10

举报

1个回答
yang9397 回答时间:2024-8-6 08:58:40
初学者适合看看5 f! w0 u" r2 L0 o

所属标签

相似技术帖

官网相关资源

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