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

B-U585I-IOT02A--8.ThreadX点灯

[复制链接]
奇迹 发布时间:2021-10-22 22:05
只从ThreadX开源之后,凭借降维打击的优势吸引了一票开发者,也吸引越来越多的厂家加入其中。
; G/ J6 v4 e  _: f/ W' u. RST也在U5的时候,第一次完全摒弃了以前大杂烩的模式(FreeRTOS+lwip+FatFS+自家USB),完全投入ThreadX怀抱。当然为了保护自己TouchGFX的尊严,ThreadX GUIX是没有引入滴。看这形式,老一套大杂烩在新的芯片是不会在被支持了,兄弟们,ThreadX搞起来。当然也可以研究一下CMSIS RTOS适配层,一招吃遍天。( ]8 L/ X5 O1 O+ h* i8 }
今天就简单拿ThreadX跑个LED,小小一颗LED,让我水了多少文章啊,哈哈哈。& l" }  M  k8 Y4 }# f1 X
5 N+ A- F) _1 O% V! k* r/ U
打开STM32CubeMX,创建一个工程,具体可以看我之前的文章。
0 B# l' X& u5 E; M, b$ v  O3 Z! {
7 H! E8 J7 G2 {- E( g- V; K
简单配个时钟
$ r& I4 {1 n  f* c QQ截图20211010205358.png * T% `: b) S3 K0 d3 J4 d9 d
开一下ThreadX* q2 c/ |% Y7 }$ o1 F. f; t5 g
QQ截图20211010174559.png
4 n% ~% k, ?, u) m8 ~$ A& a3 f2 N  w  o8 h) |5 \
配置一下,加大一下内存池,10ms的节拍实在不习惯,改成1ms
1 D8 D7 @7 l' H* j& C( X QQ截图20211010205449.png * ~& {+ w. w! D/ i0 ]8 n! c
; k) H: }' \" {

+ Y! |2 x0 ]6 j6 Q配置一下俩小灯! d4 q2 g- v% L+ z8 i
QQ截图20211010205546.png : X! _" A" A+ G. |

# Z) ^, r0 H2 G" Z! m" [Icache老是弹窗,太烦人了,给它打开。
" x1 D1 J. B. T' s, ? QQ截图20211010205603.png
: |* S# o( @7 h$ g' m
5 G* F6 j0 Y  A) g5 ^- p更改一下库ms延时的定时器,滴答让给ThreadX。. b( |6 v9 a8 j
QQ截图20211010205650.png ! @& O. K! z5 h$ W% C" L& I& K

# g9 ^* J1 \% }8 e) u配置一下别的,然后生成代码。
# O, P3 K6 }) Q
1 s6 x/ v: s) S+ [4 b) b* [任务配置" x# V' b1 u4 l6 a  A$ B
  1. #define APP_LED1_TASK_SIZE 512* k2 r! v& c4 ]! m2 n3 Q
  2. #define APP_LED1_TASK_PRIO 4
    ' b1 y, [$ S, m8 E* z5 g- v! v8 c
  3. TX_THREAD MsgSenderThreadLED1;; y  y: Q. G; L+ |2 N$ K' y5 z
  4. 5 N7 }" ?/ V! Y# l6 b" C* F
  5. #define APP_LED2_TASK_SIZE 512
    , h; W/ |# I! r$ U3 P
  6. #define APP_LED2_TASK_PRIO 42 h0 r  N+ U$ j
  7. TX_THREAD MsgSenderThreadLED2;
    & ^, M4 t/ R, D. R4 b3 Q" P
复制代码

1 e( `4 ?9 o  t& v, ~6 x任务初始化代码+ b' d& N& {# z' o( k. I1 G
  1. UINT App_ThreadX_Init(VOID *memory_ptr)
    : g9 }5 u8 q1 @" e- m8 A
  2. {2 i) N0 @3 b5 C; W
  3.   UINT ret = TX_SUCCESS;
    # T( R* n, q0 N3 G: J
  4.   TX_BYTE_POOL *byte_pool = (TX_BYTE_POOL*)memory_ptr;
    / i9 v9 j2 i; Q% G! y% W+ W
  5. ; a7 S9 d4 Z* c: w8 H
  6.    /* USER CODE BEGIN App_ThreadX_MEM_POOL */: e5 x: m" s. y( v$ [
  7.   (void)byte_pool;3 S" f% g- y, w% N, {
  8.   /* USER CODE END App_ThreadX_MEM_POOL */1 u; S3 Y+ H, ~6 C1 q! }+ ?
  9. 7 F2 W- N$ f- C7 `# j$ ^7 n' c1 H
  10.   /* USER CODE BEGIN App_ThreadX_Init */! {2 n, o3 D) v5 [; s; x; @+ R
  11.     CHAR *pointer;
    7 D  U2 l# ^3 T$ [7 Y2 @) \) N
  12.     if (tx_byte_allocate(byte_pool, (VOID **) &pointer,& F, p# G# T3 i
  13.                          APP_LED1_TASK_SIZE, TX_NO_WAIT) != TX_SUCCESS)
    ' R3 j/ E/ k0 q0 ^
  14.     {
    & Y; t3 f3 x. t* ~0 m/ A* V
  15.         ret = TX_POOL_ERROR;7 @$ d) ~5 _  Z" a8 ^
  16.     }. t" q- u% e* j6 X) P( q
  17.   2 A9 D/ K6 F6 v: x* ~8 E7 R  v
  18.     if(tx_thread_create(&MsgSenderThreadLED1, "LED1 Task",
    - @# u  L5 p1 Q' Y- F1 W+ T
  19.                         MsgSenderThreadLED1_Entry, 0, pointer, APP_LED1_TASK_SIZE,
    , s$ D' y; q6 }# e: z/ D) x
  20.                         APP_LED1_TASK_PRIO, APP_LED1_TASK_PRIO, 2 x6 i0 {+ E! s1 I
  21.                         TX_NO_TIME_SLICE, TX_AUTO_START) != TX_SUCCESS)- o5 G* Y+ b; X. O
  22.     {
    ! X- I9 V: q+ Q, i' F2 B
  23.         ret = TX_THREAD_ERROR;9 [5 |" H( s) g& S
  24.     }3 m3 N) G# Z2 C; ?; P" P# T
  25.     3 H/ f5 Y( l! f1 R( M. w% g
  26.     if (tx_byte_allocate(byte_pool, (VOID **) &pointer,* ]* _' {2 i) q1 r3 F7 A) _
  27.                          APP_LED2_TASK_SIZE, TX_NO_WAIT) != TX_SUCCESS)+ L1 U9 L% Y- C; t. B0 ]: o1 |
  28.     {
    3 G, ~# }2 G; g1 y* h% U/ l% U/ S
  29.         ret = TX_POOL_ERROR;
    ! K) U% A$ _' w/ P0 g
  30.     }8 s  Z. W0 ~8 w9 z' W# |; o* _6 y
  31.   
    & H& c! g" e# u- H  S
  32.     if(tx_thread_create(&MsgSenderThreadLED2, "LED2 Task",
    2 T. V- g' N" f! E4 y+ r" J
  33.                         MsgSenderThreadLED2_Entry, 0, pointer, APP_LED2_TASK_SIZE, " |, y) C1 @- v& H3 a4 X+ J; m
  34.                         APP_LED2_TASK_PRIO, APP_LED2_TASK_PRIO, . f- ?2 o9 V- a- U' l& ^5 ]
  35.                         TX_NO_TIME_SLICE, TX_AUTO_START) != TX_SUCCESS)6 N& |* T* @7 Y- N1 K5 Q
  36.     {2 x- [: Q& n% e. B0 M3 ^& R1 ]6 F
  37.         ret = TX_THREAD_ERROR;/ j% d' j- C; E1 F
  38.     }5 U5 _7 W$ k. A) C. m( w6 g
  39.   /* USER CODE END App_ThreadX_Init */6 W  e( P& d- L$ X
  40. 2 J1 T- n1 d5 p; Z
  41.   return ret;! `2 f; _8 A# c4 F. n- e
  42. }
复制代码

0 K( w0 Q6 m5 ~+ V$ I  u俩任务函数,绿灯1S翻转一次。红灯0.5S翻转一次。" K6 H/ ]- K. h# p+ E8 S
  1. void MsgSenderThreadLED1_Entry(ULONG thread_input)
    + u: f5 U) P0 c) H3 m$ Y, a! l
  2. {1 j! w/ z$ q$ R/ e, b
  3.   (void) thread_input;
    * h: A( Q4 v5 N$ {
  4.   while(1)
    # {# T/ [% V# P, A
  5.   {- F: o2 l0 \& d# J2 ~
  6.     HAL_GPIO_TogglePin(LED_G_GPIO_Port, LED_G_Pin);
    / p2 V+ G; E  @& d2 _
  7.     tx_thread_sleep(1000);6 `: f+ x* ~. _( j0 e1 ]7 A, p' h4 v
  8.   }( q9 L5 \! f2 c, Y; t4 U; N
  9. }1 @0 b4 ^2 P' ~' [6 I
  10. " |& ^+ Y0 k- m( @- T6 d
  11. void MsgSenderThreadLED2_Entry(ULONG thread_input)
    ! b7 L  ]' ~) l' f% P1 v' [3 `
  12. {) R; |; {8 O" p6 a* h
  13.   (void) thread_input;
    9 E3 `$ ?7 x8 Y8 e. v
  14.   while(1)5 w/ E) C; t4 U
  15.   {3 E9 y4 M( e) X. ^6 p, e
  16.     HAL_GPIO_TogglePin(LED_R_GPIO_Port, LED_R_Pin);
    9 `/ j( O0 `. a  R8 C
  17.     tx_thread_sleep(500);3 Z$ W3 Y& `3 w3 [4 @
  18.   }
      ~& x+ Q2 S8 W  x) \
  19. }
    8 r$ |$ v5 ~: M8 o
复制代码
2 k! a1 B# U% {1 f: |; K
下载验证,完事。
, t1 h. C: G6 o! _4 Y; F
) Y  Y' _2 i- p6 z
5 R# r/ X- l5 Q4 k

  b( j! P, x4 p2 k# J
收藏 1 评论12 发布时间:2021-10-22 22:05

举报

12个回答
子曰好人2号 回答时间:2021-10-27 10:16:13
捧场~' z5 s+ u* B% F; y0 e1 q
昱枫 回答时间:2021-10-27 10:22:14
学习了7 q2 r9 V! q* W# {* t; q
joshua天宇 回答时间:2021-10-27 10:27:19
学习* S+ ~' K* }4 C3 I( |8 x
wudianjun2001 回答时间:2021-10-27 10:29:32
学习学习
6 f0 t! F1 ]6 {2 i- s
zhangt0713 回答时间:2021-10-27 10:47:56
行云流水般的操作
5 D% `; P  Z2 F9 g. _, ~
QIANYING79 回答时间:2021-10-27 14:33:07
这算是独占了?4 a" a5 b6 H6 D& ^4 w! J% A
moluxiyan 回答时间:2021-10-27 16:28:55
ThreadX过了很多认证& r; r  W% i2 B6 V6 ]$ `# j- Z9 |
orima 回答时间:2021-10-27 21:58:31
学习了,很详细。感谢!
; J$ K; T6 {+ D0 k
qiangtech 回答时间:2021-10-28 09:58:04
会者不难,难者不会。( R6 H* t, w& @
orima 回答时间:2021-10-28 20:59:11
学习学习) M# X3 o/ G- [8 z' s/ D
EricCheng 回答时间:2021-10-28 22:36:19
ThreadX有什么优点?" p) H, `' h; y( f
BEEE 回答时间:2021-10-28 23:40:40
想赶快使用ST新推出这款STM32U5系列产品,学习学习* [* a1 D- L) c& h# H+ m7 J6 O5 w8 L

, Q& A+ {" a3 V. T0 b( |) C

所属标签

相似分享

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