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

【NUCLEO-H533RE评测】-03-FreeRTOS移植

[复制链接]
shenxiaolin_mai 发布时间:2024-7-2 18:17
**如何在** **STM32H533** **开发板上移植最新** **FreeRTOS**
- O5 T' F7 ^; z; d/ ^& i  [. l) ^1 E1 c
1:官网下载FreeRTOS源码
; N2 [: |9 D( c- C" j- ?/ w8 v, a! q3 t9 y
FreeRTOS官网:[https://www.freertos.org/( g  Y' M  W2 T) J4 @" Y0 F

  _- T! L% B1 _; M
1.jpg
' j8 o9 ]# B6 K3 X! {, I
前面一个是最新版的,内部包含了一些典型的单片机的例程,下面一个是长期支持的版本,相对来说稳定一些,所以如果是工程上使用建议使用LTS版本,如果是学习的话,建议使用上面的版本,毕竟有例子,移植起来相对来说比较方便。我们这里选择就是上面的版本。* n4 T1 V( G% Z0 R( l, i

: T0 n4 K2 K8 M4 U官网上还有很多资料可以参考和下载,大家有富裕时间的可以认真研究一下。
# C, P* Y$ ?$ E  r6 g
# P. `) z% b# F
2.jpg
7 w- Y2 y4 E2 c. q6 B5 i, K; x: g
$ L+ q$ ]: s# L# t- |
2 找到合适的案例,完成文件的拷贝,我们目前使用的是H533的芯片,属于是M33的内核,我们这里就选择M33的核作为参考工程,完成文件的拷贝工作。- N' R3 k" [6 o+ A
% ^+ S8 Z" b$ F5 @9 e: u9 ]& j$ k" z
3.jpg
4 S. L. ^- H3 J6 c
' f. ^0 a$ D1 Q
我们首先在已经测试好的工程下面建立三个文件夹,分别装内核,头文件,接口文件。6 d" i! z+ M' M
8 [: N( T2 @6 g  r8 e- [  i
接着就是拷贝文件了。
, Z" B! ~0 {) g3 W8 Q0 p% u0 Q; B; t/ @) B
4.jpg
. j/ w" Z0 G) ~5 h9 F

# w; k; r* r9 C7 }上面的就是内核的几个文件,对应的拷贝到Core 文件夹。0 J" m+ w8 S6 Y
6 s; s  ^0 i6 G: {  P6 r7 F2 L1 E4 G

) X8 G4 j* o' f4 g$ s
5.jpg
( k4 K% `$ Y9 k9 {5 Y* S0 A% P
Include整个文件夹直接拷贝
: [7 h7 H: d2 w, ?2 P还有就是最后的PORT文件,我们按照现有工程的文件路径的文件进行拷贝。0 N5 N, y* e: n2 ^; ~3 c1 S
3 R( t( s0 O8 {3 Y2 R
6.jpg 7 o8 w: ]/ i6 p
. Y% ^6 h! R: q; ]) k2 ^' a
7 u) O, \. ~. n3 o) l) K1 z. ]
我们在工程内建立路径,并且添加文件以及文件路径。7 f% C" i( I5 x, T$ v- T
: E& |8 y& w4 X5 m
手次编译出现如下问题,我们将宏定义做一下修改,不使用TrustZone。
9 ?: U4 h9 U' M" e8 ?: w0 i! E/ K
7.png
. t0 r) N$ |) q& k
& E3 R7 Q$ d+ {! D- s
接下来就是我们的重复定义的我们将函数的内容拷贝到滴答函数里面去,完成整个系统的计时的要求。- s- R6 P; F* g4 W7 T
8.png

! s6 z, u- V9 A! D5 A$ s接下来编译出现这些问题,基本都是task.c 和port.c的,我们根据情况做修改。0 E( B4 n1 ~3 l! F* p
还有一个就是添加heap4.c到工程。6 y' p" g; ^  q+ n) T% A8 F1 u
9.png
( P5 o% ]) G. a7 f/ c8 k$ s

1 V1 }" p( u" z将MPU设置为0 ,错误会减少很多。
1 p0 c% z( W* w8 h& Z9 d1 C; o' `$ U; i
10.png
/ i$ x' D7 [  {- ^& \; C& p
7 v8 T, ]0 ^9 i9 Q1 f0 `1 Z
然后后就是各种改配置,最后建立自己的任务,实现任务调度。5 x6 P6 v# p8 g0 s+ b
! J* Q- Q# \4 s
下面就是任务调度的函数,这里就简单发一下2 D, D5 b, @  @. \5 |0 V7 u

  1. % K. w, t" S" ]: \
  2. void Task_LED(void * pvParameters)6 {3 i) ], H' o
  3. {6 V9 X. |) s  o% p8 y7 j6 [& ~
  4.     while(1)
    : }* h6 w* Q! _8 O, L6 a
  5.     {
    ' \3 f( X1 t( \6 ~, K/ c/ I: d: d8 ^
  6.         LED_Test();
    " [0 F; z/ Q& Y: g/ G
  7.         vTaskDelay(  500 );% y  c% g2 R# o8 p2 b2 A$ I
  8.     }
    6 v; q) {- K4 k* n9 ^* ?
  9. }5 ^7 M- q' g& E* w* h

  10. 2 |) E# V5 ?7 N; \& R% [

  11. + Q6 P  t+ O; x$ D
  12. void vApplicationStackOverflowHook( TaskHandle_t xTask,& Y$ G- F" v. `$ p
  13.                                         char * pcTaskName ). \  b: I( \0 |$ B' E8 G; E8 I
  14. {" r- A4 F2 ]% k
  15.        
    ! J' A% j$ J, W) f' ?
  16. }
    " p8 ^8 h8 Y! t. w
  17. 9 E$ o: j0 R) E
  18. int main(void)3 P( Y# y) L2 J- f2 P' b  m0 I
  19. {   
    . V' n4 n6 L( ?! M0 l5 O' \, D& F; J
  20.         SystemClock_Config();% T: L( T9 v6 d& H1 K7 x6 S) T
  21.     HAL_Init();
    & O3 g% U" a! g- [; @# I. o: f: z
  22. 9 D' H; v- b( O, c& R' ]3 J
  23.     LED_Init();
    / f  A' T- ~- W& `# x4 s
  24.     UART_Init();* x  k; k: R& Z8 P; G1 T( Z
  25.     TIM_Init();/ m( ?  y2 |) q5 f7 C1 h+ D
  26. ; n# X0 |+ q. B
  27.     xTaskCreate(Task_LED,"Test_LED",1000,NULL,NULL,NULL);
    . g% Z, W' _1 R5 U
  28.     vTaskStartScheduler();
    $ k0 {- o) u) t5 h+ i

  29. 1 H9 p3 p5 Y/ d2 u
  30.   while (1)) X, X( X' X% y1 W, D$ b/ v
  31.   {2 Q$ C  E9 F. Q- l
  32. //    LED_Test();
    * R  W, a  L+ A- n9 n3 `3 G
  33.   }
    ; t! H/ C! Q) ^) _# ?- B
  34.   /* USER CODE END 3 */
    ) F7 N# U7 w* j: L
  35. }/ N! p8 T' E; `- u( \
复制代码
好了,我们就把源代码发上来
. M% G, x% g" O& c  A: E==============================================
! Z1 }0 V% a2 ?- e& o1 E  z1 x, yRTOS源码: 04-Demo_Free_RTOS.rar (3.15 MB, 下载次数: 0, 售价: 2 ST金币)
1 收藏 评论1 发布时间:2024-7-2 18:17

举报

1个回答
STMWoodData 回答时间:2024-7-3 09:17:20

学习学习

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版