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

【经验分享】STM32cubeMX快速配置FreeRTOS任务

[复制链接]
STMCU小助手 发布时间:2022-5-22 21:46
前言5 x: A: J: b! L, l, y8 k6 x+ C
本文带大家使用cubeMX快速配置FreeRTOS的任务。5 x. a6 H- `: m9 o' P' b# c) S' R# a1 _
( ]! T( p. O: K" ~" ]7 W
一、cubeMX配置% E( x/ K$ f- M
1.选择FreeRTOS0 g$ ?3 _2 _8 Z# V3 Y  L
~$[57C1MPECO6{TQYILLA@N.png 2 |/ u9 p* w! M+ E4 \: F

( Z5 x$ b6 W8 e, {, T2.为FreeRTOS分配任务栈大小
- t5 `4 _7 ~; r: n; L% K. ]1 X, g* S; J
5)LA(OK]N1JHF}K3IYEF5~X.png , h% |( R$ z4 A7 e

( `! ^- d8 H- z' R) \$ r3 y, f+ m这里内存可以设置大一点,内存不足会导致任务无法创建。' @" r; Y8 G" q' m2 |
  T9 V, K; s" Z. f7 T: b5 O
3.创建任务! ]  d) \/ u* B! \; F2 z  a
点击Add添加一个任务: T' Y( E) A/ }+ W
0 u" u* v3 b" k9 P% Z3 z
%_BH68D0RW{)7P{}NPXE0.png
  i: ~2 r/ W8 f  K
- o' t% O' `+ F3 D, s4 g: t1.Task Name:任务名字
$ f: I& J- z+ n5 _) m2.priority:任务优先级
6 N* I2 n- `- P3.Stack size:任务堆栈大小(字节)
" H7 [2 F" H0 T& p- A4 Q- R! Z# S; w/ e4.Entry Function:任务函数名字1 U2 g' ]1 j3 X7 c4 f" I' o
其他几个参数我们设置为默认值就OK了8 d5 {. `- _3 S5 _* D" ^

. c9 U0 b" ]& I3 q, a二、代码查看3 s! w3 p6 V- w
1.创建任务
# Y% ~4 i/ V! m4 K& h) O- b3 r: i5 x
  1. //cubeMX帮我们自动生成的任务
    2 b$ D7 D! n6 C* H
  2. /* Create the thread(s) */# e" s9 e1 w7 [# G1 @
  3. /* definition and creation of defaultTask */- ~# [$ `; T( G
  4. osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);5 ~9 I3 V( y5 h( v
  5. defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);: f. U1 I4 n8 o" X

  6. ) c) B! j, R# L8 C( k
  7. //我们自己创建的任务9 X8 E: P  F  d* P6 X
  8. /* definition and creation of Task1 */. |1 d/ t& o; q" J' w9 D  j+ H. e
  9. osThreadDef(Task1, StartTask1, osPriorityNormal, 0, 128);
    4 \2 F$ C+ N: p7 W, S/ c7 n* F1 B. [
  10. Task1Handle = osThreadCreate(osThread(Task1), NULL);
    , i" y3 o+ g& W( K1 t1 x
  11. 2 f* r) n2 N. S" r
  12. /* USER CODE BEGIN RTOS_THREADS */
    $ g" r$ _+ s) Q  M; e
  13. /* add threads, ... */
    6 a: R9 q/ `7 \: ^/ x' A9 J
  14. /* USER CODE END RTOS_THREADS */; x3 ^# C0 e6 L( Q

  15. 1 w/ U7 T0 F1 t8 T5 h* a/ f
  16. /* Start scheduler */) |! P* C' S4 ?$ {. o
  17. osKernelStart();//开启任务调度器
复制代码

, _  {8 k. T5 a6 {2.任务函数& Z" K5 ^6 r7 }: M9 v
使用osDelay函数会释放资源使任务进入阻塞状态。! J5 l! Q5 |3 `
3 N: _/ ]* d( {  |' j
  1. /* USER CODE END Header_StartDefaultTask */3 _5 Y) F! a3 z; W3 c$ b6 s7 n
  2. void StartDefaultTask(void const * argument)
    4 g$ ^, m: {: L- T
  3. {0 t( |0 q) D, i$ _! \
  4.   /* USER CODE BEGIN 5 */, y# F, b- D) f3 P! S' Y' z
  5.   /* Infinite loop */5 y9 H' w+ A- w5 A6 Y( K
  6.   for(;;)
    ( X' u0 w" T/ z& e! l; L+ r( s
  7.   {
    , Q! F1 M* P4 K- D2 c' m9 z) o

  8. ; S, s$ N( X* X  e% T' ^5 U8 e
  9.   }
    + M1 E2 j/ G7 r
  10.   /* USER CODE END 5 */: |) p3 k1 U) p: y" ?
  11. }$ Z& U9 Y- b. }% E4 u1 {4 ^

  12. - k3 `# z7 h  R" S. X
  13. /* USER CODE BEGIN Header_StartTask1 */
      e- ~# @; ?0 E, F. [& p( q$ g' p
  14. /**2 L1 |+ E: A8 f9 o# b- @
  15. * @brief Function implementing the Task1 thread.9 x2 t7 @- w3 M' A$ g  v3 H, s- I5 C
  16. * @param argument: Not used
    & r( Q5 P9 B$ y0 H: e( x
  17. * @retval None, W2 ?2 s7 D( \, U' X' F, ?0 C5 v
  18. */
    ; u- G- }, z% C# ]+ t+ o
  19. /* USER CODE END Header_StartTask1 */
    ) m: n$ F( \/ D: j
  20. void StartTask1(void const * argument)
    * C; V& \  Q. e; a
  21. {
    8 ^/ D6 p  \4 ]" y2 K
  22.   /* USER CODE BEGIN StartTask1 */( r( `' T1 K0 J1 C7 X" C
  23.   /* Infinite loop */
    8 o7 \. V. T* I
  24.   for(;;)' `- G( _8 _( z! u
  25.   {
    - B* r$ S8 t, @1 q: F; M  I- A
  26.     osDelay(1);- Z. m& q: G" M' w4 c6 O
  27.   }
    2 T; P! d; D  y0 {3 Z2 Z
  28.   /* USER CODE END StartTask1 */. e. Q1 G% \  w* ]8 N. g( b8 O
  29. }
复制代码
  [( i+ C4 i( O3 A
总结
4 W: u! S% ~5 |" ^* b" G0 U使用cubeMX配置能大大减小我们代码的书写量。. P9 a& |' h0 J" ]" c

# g. Y, E' d$ c. }7 }) A  W
' m3 m" C& b- `* ^# [
  t( R" K" L" E  p
收藏 评论0 发布时间:2022-5-22 21:46

举报

0个回答

所属标签

相似分享

官网相关资源

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