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

【经验分享】STM32G0 TIM中断使用

[复制链接]
STMCU小助手 发布时间:2021-11-8 14:30
时钟配置
0 _2 G+ P1 c! E5 w2 @
20210710145725120.png

- o0 r' n/ h- q2 V8 _5 V7 x8 C2 N1 x( ?: @7 |1 U1 d
TIM配置
( ]1 A9 A1 d$ ?( m
2021071014574973.png

6 {2 M! F, K1 C: x' g9 r2 f$ Q& j9 |' I( y
3s一次中断8 i8 ?  y) S) o6 I% ~& v& ~7 G3 N

! B) x/ K& P# i6 ~. O中断配置3 o, ]( n5 t/ R- t6 E
20210710145824733.png
. K# |: ]- n% l5 u* g
1 Y# Q1 ^, k) G; v
开启
1 E* ?' t4 A+ {1 a      
  1. HAL_TIM_Base_Start_IT(&htim1);
复制代码
  1. 任务中的临界区
    ) o$ N! c% ~0 t' v
  2. static void vTaskLED(void *pvParameters)) i2 c; q, h9 c8 }2 Y
  3. {
    $ I  c6 P9 @$ C7 b2 L
  4.     while(1)" u; E# D9 Y; `
  5.     {                        ; A+ p8 G& m6 r. m& Y2 O
  6.                         uint8_t data[]="LED";' O: B- W. d  M3 r
  7.                         taskENTER_CRITICAL();   /* 进入临界区 */
    + n4 E2 i# S7 i9 [) z  ~+ Z
  8.                         HAL_UART_Transmit(&huart1,data,sizeof(data),0xff);
    % K0 D+ F8 S3 W9 U+ ?( n
  9.                         taskEXIT_CRITICAL();          /* 退出临界区 */        
    3 K4 W8 m. J- ^8 u, k' E
  10.                         HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);6 Q5 h# b  l8 N$ w* q
  11.                                         vTaskDelay(500);  _3 ~* c$ b! A8 b! A& y9 B1 R
  12.     }
    , x( g0 l( }' O. i- \/ W9 Z6 T3 F4 S
  13. }
复制代码
  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    8 h& s: |2 P$ ?/ d! w1 e2 A
  2. {3 I6 r% ^2 u) h3 m& v! H8 R* H0 \
  3.         if(htim->Instance==TIM1): k. W: C( D/ ], w% O1 |3 a' Z
  4.         {
    " Q2 I# G9 o+ ?& Z8 Z
  5.                         uint8_t data[]="TIM1 Interrupt";5 e  m' {8 j, l1 y# Q) L9 b8 G

  6. 6 y3 {1 g$ c4 b, m& R# t8 }6 k
  7.                         HAL_UART_Transmit(&huart1,data,sizeof(data),0xff);" C7 S9 p) U+ a$ w
  8. ! e. M6 U- z/ w2 P1 ~0 [8 {% |
  9.         }
复制代码

5 @7 o: \: ~+ r' I  R$ F6 }带有FreeRTOS* F0 I' v& Q: ~6 Y  o: D
中断的临界区
7 t3 g6 b2 I. T% w2 F3 j' f0 X- _. k
  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)+ E0 s1 q4 n; r7 I1 d5 v  L1 x
  2. {: N8 h7 _6 L' ?% R1 _- x' z

  3. ( q# E, G! p9 p
  4.         " G  `; x8 Y+ U1 E: b
  5.         BaseType_t xYieldRequired;
    ' m! O+ s/ Z; c, B6 y+ U/ h4 D% |
  6.         UBaseType_t uxSavedInterruptStatus;0 S  A5 v4 z8 u, G
  7.         uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); /* 进入临界区*/
    ) f! u$ J3 }7 g9 g9 M
  8.         {, ?- y- }  L6 _! u, X' o/ R% {( D" r
  9.                 /* 用户可以在这里添加临界段代码,我们这里暂时未用到*/
    2 N$ `, F7 J9 P+ B# {! [1 X
  10.                 if(htim->Instance==TIM1)
    , X, Q/ D+ R  b! D* `' W
  11.                 {
    * ~2 B! q& a% ?1 T/ v! Y( m8 \
  12.                         uint8_t data[]="TIM1 Interrupt";  p- c3 t( R$ P4 @7 j- P- t
  13.                 6 \6 @% J# X8 Q* A2 f; L) P
  14.                         HAL_UART_Transmit(&huart1,data,sizeof(data),0xff);  T/ c/ @* K* _1 C. _
  15.         
    $ I4 K1 W9 W3 m: J
  16.                 }
    : P: y! ]* ?' m$ N3 f3 f
  17.         3 ~* ?2 h" l% L& [( b
  18.         }7 A. G  I2 J: _+ x3 `- q
  19.         portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); /* 退出临界区*/3 ?( n0 b9 v! c! N0 L
  20.         /** 恢复挂起任务*/
    2 Y7 F4 V0 f) S3 E0 M' B* W9 l
  21.         xYieldRequired = xTaskResumeFromISR(xHandleTaskLED);7 g( n8 X, l* _3 @( v) g: s  ~% V% P
  22.         /* 退出中断后是否需要执行任务切换*/: @9 T! K! m" s& R  C, S
  23.         if( xYieldRequired == pdTRUE )* v; S) a" {$ V* R! I
  24.         {& P: C9 z+ o4 y, y& ?
  25.                 portYIELD_FROM_ISR(xYieldRequired);- B) j- B/ U  T3 q, e1 W
  26.         }
    0 |& {# v/ I4 Z9 T" i) c  r
  27. }/ Q* i6 i7 j, H
  28. 9 K6 l& a) n6 F
复制代码
( P: b" J$ _' V" t1 }
收藏 评论0 发布时间:2021-11-8 14:30

举报

0个回答

所属标签

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