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

基于stm32通用定时器1s延时实现LED闪烁经验分享

[复制链接]
攻城狮Melo 发布时间:2023-5-11 17:41
stm32有很多定时器,每种定时器的功能也不尽相同,今天学习了如何用通用定时器实现1s延时,使LED灯闪烁,现总结如下:
5 h- ?- k. w5 f0 ~1 T. c/ u, }3 J: e/ Y
步骤总结:% D  S4 e4 z$ V# e
使能定时器时钟->配置定时器结构体->清空定时器标志位->开启定时器中断->使能定时器->编写中断服务函数4 U. j1 P9 @: Y$ F5 J4 b

! C$ Q  |" J* D: N6 CTimer.c:) J2 ~* p* Y; Y4 l' k1 I
  1. #include "Timer.h": U: k# \) ~, K  r
  2. ' W4 F0 O+ i/ V) t0 J- a
  3. void TimerBase_Config(void)
    7 D( `& _1 _4 W* |% I
  4. {5 D2 `! k2 \' Z% e1 m
  5.         //开时钟
    % E" h$ n- _/ O
  6.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
    3 ]: E% r/ R7 {- x$ @; G
  7.         //定义结构体变量! |! G. |! W8 ]
  8.         TIM_TimeBaseInitTypeDef TimerBaseInitStructure;
    7 j, a2 T! i1 \2 |0 _9 C
  9.         NVIC_InitTypeDef NVICInitStructure;
    , \" I4 H/ L2 r
  10.         //配置定时器结构体
    9 y  L$ E5 a, `* x$ x8 i. P7 ^+ I
  11.         TimerBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;6 W4 ?8 u$ z5 v5 m: j! W
  12.         TimerBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    ) a: E+ _! O- y5 a  [
  13.         TimerBaseInitStructure.TIM_Period = 10000;
    - ]1 r0 ?8 |/ ~4 v' M. _0 e
  14.         TimerBaseInitStructure.TIM_Prescaler = 7200;/ t0 Y9 Q  C' n. L2 n$ c7 m
  15.         TIM_TimeBaseInit(TIM2, &TimerBaseInitStructure);7 H% ~- J! v% Y
  16.         //清空标志位
    5 b8 P" j( y7 f6 b- l( l
  17.         TIM_ClearFlag(TIM2,TIM_FLAG_Update);
    . w2 i1 R, h0 _. g' P8 H7 [
  18.         //开启定时器中断
    " O- V/ x5 k, u9 I
  19.         TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
    8 q/ F) {: P/ R( h8 C
  20.         //使能定时器
    1 I& i& C  ?! F" y8 n
  21.         TIM_Cmd(TIM2,ENABLE);) r; b! C0 V8 |6 }6 p
  22.         //配置NVIC结构体
    ; ~3 y) H- [+ M6 a/ h
  23.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    ; X9 i# j2 z* s) m& Z3 g
  24.         NVICInitStructure.NVIC_IRQChannel = TIM2_IRQn;
    4 {9 K4 G) y5 a9 [. \. Z: c7 g6 {+ Y& R
  25.         NVICInitStructure.NVIC_IRQChannelCmd = ENABLE;
    + h9 Z- y' U7 b
  26.         NVICInitStructure.NVIC_IRQChannelPreemptionPriority = 1;9 v" R- t9 p( ]# ~  O
  27.         NVICInitStructure.NVIC_IRQChannelSubPriority = 1;# j; r6 N( q: h/ h# s2 K; j
  28.         NVIC_Init(&NVICInitStructure);7 |8 Q3 ?  v2 B8 t0 c
  29. }
复制代码

" `3 v% J5 A' Estm32f103x_it.c:& D( a+ P8 }, a4 f
  1. void TIM2_IRQHandler(void)4 j4 _* S. I7 h- O1 `; @
  2. {/ ^4 H3 n4 s/ ]. @
  3.         static uint16_t temp;5 |5 \" W+ N$ t
  4.         # |8 P$ _' |5 g5 @$ v( I
  5.         if(TIM_GetITStatus(TIM2,TIM_IT_Update) != RESET)& {& k  g8 U0 C: s2 z% [
  6.         {* H' H' o. o6 H5 I" `7 O
  7.                 if(temp ++ %2 == 1)
    , V, e4 a+ ]8 ^; U7 {1 m
  8.                 {: a; s/ I: K0 [, b4 Q
  9.                         GPIO_ResetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);' ^& ^) R( p4 U9 @
  10.                 }
    ; w7 {4 ^, G6 S8 \7 S) f) k
  11.                 else
    1 E5 v: d  n& Z8 L, r" k
  12.                 {
    3 V" }' z5 z9 N/ E/ b
  13.                         GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);
    ) ?' b. W  n1 e1 @( w. z2 V
  14.                 }
    ) [# W7 |# I3 \/ n* r0 q
  15.         }* U3 d4 u, O* q+ H$ C
  16.         TIM_ClearITPendingBit(TIM2,TIM_IT_Update);0 C1 l. N4 @8 E
  17. }
复制代码

2 @* ~8 U- }' M& M5 `; Lmain.c:6 k# e$ |6 V) }; W
  1. #include "stm32f10x.h"1 E) ]) L2 V- b; t
  2. #include "led.h"
    , D0 e- r! a% g. ?1 ]" _) H  V
  3. #include "Timer.h"% e7 o0 J0 ^8 w* h) [

  4. 3 e) ^# }4 k* h9 [5 ~
  5. int main(void)& L& c3 a% C% L( `
  6. {6 O4 m5 D- L" J
  7.         TimerBase_Config();( q/ b! W# w) {2 x. O" r* T2 e
  8.         LED_GPIO_Confing();% S* W  ?3 h: M% `3 _
  9.         GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);4 @: L+ ~- T9 F
  10.         while(1)1 X: X1 V2 W6 {2 l, j
  11.         {
    / x, Y$ h* [  E$ ^! [8 O8 \7 u* k
  12.         * y8 A7 `0 {# R- c7 A
  13.         }
    8 w  w% X/ h$ r' w9 n: o# D
  14. }
复制代码

# J! A8 O7 }# g; I4 {2 r注意事项:5 l- ^& i8 j7 f; ?7 }+ G
一定要记得清空标志位,尤其是中断服务函数里的清空标志位,博主就因为此检查好长时间) b/ @+ ~5 k$ {6 v
————————————————
: p3 b! M8 ^/ E" g: T8 B/ A版权声明:fake 钢铁侠" v' V' U2 \8 e$ ?( ^
如有侵权请联系删除
: }- m9 O& g+ O+ ]2 E2 R! k
* A$ H* X/ j  G/ @
# o  m3 L6 m+ @8 Q) F( u
收藏 评论0 发布时间:2023-5-11 17:41

举报

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