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

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

[复制链接]
STMCU小助手 发布时间:2021-11-8 14:30
时钟配置
$ o5 T/ @5 `/ p4 R
20210710145725120.png
* v. E: x1 M# \
# E$ Z# o3 H# ]; s  J7 h
TIM配置
% X' H# F# W+ A$ t8 O7 p
2021071014574973.png
  J( l4 y% s6 u3 b

( v0 t) E& u# u9 w  D$ V/ r+ e3s一次中断
9 l$ Y  D# E- f: R2 K$ a. q* i& {" y- q4 j+ I' ?: l( ?- M0 C+ \1 @
中断配置6 m* ?: g3 K0 J8 d
20210710145824733.png

. H- i! c7 W' A" x) h1 K& C4 D# |7 L8 h
开启
) C; d1 E4 `' b      
  1. HAL_TIM_Base_Start_IT(&htim1);
复制代码
  1. 任务中的临界区
    9 o9 |7 Z) B1 A3 f
  2. static void vTaskLED(void *pvParameters)0 z# j' [8 G8 [3 p
  3. {  m4 i. K. V3 Z2 c1 ?" b
  4.     while(1)
    $ I4 e/ X( W' T# H' w. j
  5.     {                        4 c( w3 _% {* A: [
  6.                         uint8_t data[]="LED";7 R! C% S/ G: E3 U0 L4 m
  7.                         taskENTER_CRITICAL();   /* 进入临界区 */+ t3 L! @7 g' T4 b
  8.                         HAL_UART_Transmit(&huart1,data,sizeof(data),0xff);. J1 t# `* I1 G! e! w' u" d
  9.                         taskEXIT_CRITICAL();          /* 退出临界区 */        6 M$ l9 Y& y) }9 R
  10.                         HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);4 \0 i0 C& t4 `  _; i
  11.                                         vTaskDelay(500);5 ?$ S) I/ _' |4 X8 O" X. |3 ~
  12.     }2 H  a( x% o6 J0 [# B- k7 p1 U- x
  13. }
复制代码
  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)+ a% v) b$ y- L: w* M$ y2 A+ h
  2. {
    4 _! i$ I1 E  A( L% w
  3.         if(htim->Instance==TIM1)
    0 s( S( E) N! B- D/ w1 |
  4.         {$ D$ \  c3 c6 V4 n3 X
  5.                         uint8_t data[]="TIM1 Interrupt";1 Y8 T7 H6 s1 y( L; K, B
  6. - o0 S4 @7 V/ t' ]7 n3 Q
  7.                         HAL_UART_Transmit(&huart1,data,sizeof(data),0xff);
    + b4 Q4 s2 x; f" L1 P/ n2 [/ T
  8. 0 Q1 A7 S5 \9 w8 t& Y
  9.         }
复制代码
6 y, A. M4 F* c7 K3 M
带有FreeRTOS
; f) b8 U( Q5 p# Z) ]. Q中断的临界区
. z+ {+ k& M4 q) U, m  d
3 s, R% }* h, e3 R; @" {5 L  @9 g
  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)7 i9 b% B/ R: C1 _7 e9 ], o
  2. {2 A' H6 n4 F- b9 ~- G" ^) W

  3. 8 n' W2 ^. y8 f6 a: }7 z
  4.         
    2 y6 r/ q4 g# E& W$ B/ T& _: b
  5.         BaseType_t xYieldRequired;
    # x3 I1 A! s( l0 |
  6.         UBaseType_t uxSavedInterruptStatus;
    7 }) \7 [5 K! v' U
  7.         uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); /* 进入临界区*/
    ! ?" o& y2 {6 @* S. N( r4 D5 {3 S0 o
  8.         {- p/ c5 V, l4 V( ~7 C
  9.                 /* 用户可以在这里添加临界段代码,我们这里暂时未用到*/6 _$ y* V. Y6 F5 B. C
  10.                 if(htim->Instance==TIM1)8 R& v- i/ h2 p" I
  11.                 {9 S* @$ Q, Y& N! M
  12.                         uint8_t data[]="TIM1 Interrupt";+ R1 ?. C+ f6 H( n7 L
  13.                
    ; X8 ]  V$ D9 n3 f5 p
  14.                         HAL_UART_Transmit(&huart1,data,sizeof(data),0xff);
    0 c' r- K6 _0 O
  15.         , m% J) V$ z6 Y+ r) \) x
  16.                 }
    , j6 J4 J8 G% l+ x7 v
  17.         # j% c1 S; E0 N" r! m( K
  18.         }
    . Z) Y1 h  M$ K
  19.         portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); /* 退出临界区*/
    + a+ v; N! I% C$ F
  20.         /** 恢复挂起任务*/2 J+ Y5 b  y, l$ H1 X
  21.         xYieldRequired = xTaskResumeFromISR(xHandleTaskLED);* C; L: K( @) s4 b
  22.         /* 退出中断后是否需要执行任务切换*/( d( r5 @  s/ S" y
  23.         if( xYieldRequired == pdTRUE )
    3 B' ^7 x4 d* P* W( `7 _+ u+ \
  24.         {1 U3 {# Z$ }" ^" C
  25.                 portYIELD_FROM_ISR(xYieldRequired);
    * c+ d/ u' E: |7 c  I. O
  26.         }
    7 m3 F3 @2 l. ^1 [- c" q. i
  27. }! L9 b0 W  c  n" Y% a3 @. P/ G+ C1 A
  28. * |2 z& k2 {+ \
复制代码

. L9 M* b+ y. I' |% N' x
收藏 评论0 发布时间:2021-11-8 14:30

举报

0个回答

所属标签

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