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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-11 17:41
stm32有很多定时器,每种定时器的功能也不尽相同,今天学习了如何用通用定时器实现1s延时,使LED灯闪烁,现总结如下:" @. O  u" Y0 N0 M* Z, O' B, W" n% N
) s8 b9 \! @" [
步骤总结:
) w; o1 o/ ^6 K5 ^# D使能定时器时钟->配置定时器结构体->清空定时器标志位->开启定时器中断->使能定时器->编写中断服务函数
5 \; A) r; l; R2 A- ~$ o' l) E1 W0 R5 t* }% x. R
Timer.c:
# r; S3 F" A3 \/ w' q0 n
  1. #include "Timer.h"
    ; E- s8 F2 D; \" }0 B* {

  2. : u/ }- K6 }$ G
  3. void TimerBase_Config(void)
    ( D, T1 O% h2 O
  4. {- Q5 n; G; o. O+ H3 s
  5.         //开时钟; d5 n# {* ?5 f% X
  6.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);9 ~* n: i# q" f% U2 x
  7.         //定义结构体变量
    6 f; H& I; w( z
  8.         TIM_TimeBaseInitTypeDef TimerBaseInitStructure;& W' ]; J: d8 V0 I
  9.         NVIC_InitTypeDef NVICInitStructure;
    ; ^' w, E3 ]( |- P: d2 f  S* t
  10.         //配置定时器结构体- z9 P, E$ n' B0 \- h' H
  11.         TimerBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    4 @- n7 u& D3 y$ `- _& ^) Y9 `
  12.         TimerBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;9 w4 Z( H! I0 }1 E4 ~* C+ q
  13.         TimerBaseInitStructure.TIM_Period = 10000;
    + j' Z9 V$ `/ v1 E( b' ?
  14.         TimerBaseInitStructure.TIM_Prescaler = 7200;
    7 x/ g9 L/ R" g+ q3 [7 a2 M
  15.         TIM_TimeBaseInit(TIM2, &TimerBaseInitStructure);: ^, j8 Y% J9 v8 I: W
  16.         //清空标志位3 v9 C5 r* b* Z1 L; x
  17.         TIM_ClearFlag(TIM2,TIM_FLAG_Update);
    : D' W/ y  |1 I. H
  18.         //开启定时器中断/ e& Y: R2 ?: t. h+ Z" I9 w+ G
  19.         TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
    ; }, h) X% k! F% \/ M. t5 v* x
  20.         //使能定时器
    % b# Q5 p) {9 F2 _
  21.         TIM_Cmd(TIM2,ENABLE);2 C$ W: @+ V0 c: ?/ V! k& S
  22.         //配置NVIC结构体
    ! x/ L1 ^  `, o9 R5 G! W  Y2 q
  23.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    9 G6 |# |6 e- g4 \
  24.         NVICInitStructure.NVIC_IRQChannel = TIM2_IRQn;  R$ w0 {+ \( w7 Q* e1 {
  25.         NVICInitStructure.NVIC_IRQChannelCmd = ENABLE;* d" X! ^+ t& ?  ]+ k- S, q3 T* c6 s: M8 i
  26.         NVICInitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    5 J  `3 X" |5 D5 K
  27.         NVICInitStructure.NVIC_IRQChannelSubPriority = 1;' n5 @2 R" z7 p, T
  28.         NVIC_Init(&NVICInitStructure);# G: l& ]( p* N! u- }8 Z
  29. }
复制代码
" R! r4 E. d/ \
stm32f103x_it.c:! z7 `2 z9 I' ?9 E7 X5 v4 A
  1. void TIM2_IRQHandler(void)9 N  F" @& v% P% N/ o
  2. {
    / W2 W3 Y  C$ q, O9 R1 i
  3.         static uint16_t temp;# J2 _/ G% O& G5 t' K. `1 c
  4.        
    $ M' E/ v/ @9 W+ v
  5.         if(TIM_GetITStatus(TIM2,TIM_IT_Update) != RESET)
    ; J( t+ \, ]: {! j* M& _8 C/ A- G
  6.         {
    0 J1 ]( @7 m% f. Y& @- o. T1 A" I
  7.                 if(temp ++ %2 == 1)) v1 u0 G9 D3 A# `* Q* p  K1 O
  8.                 {
    ! a0 W$ W" J6 n) z% _; n
  9.                         GPIO_ResetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);
    6 O4 J( ?* S2 Z- L) G  M, N/ g8 M
  10.                 }
    : y0 w6 `5 X- G3 \
  11.                 else
    3 e: V1 w% F5 X
  12.                 {9 x0 |; z! k! V* {9 N1 K( `, H8 I% f/ Q
  13.                         GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);
    ' G9 M) V/ o8 n: g9 L4 p
  14.                 }3 o. o$ e; L. Q' w& a
  15.         }% z. a8 f6 O0 ^% _! ~2 a+ ^
  16.         TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
    0 Z: N6 z" Q8 b
  17. }
复制代码

- L# O; o- r1 C' k$ Q0 \" kmain.c:  ~8 U) j. \( }, y* b" f+ }4 v: U; Q- I
  1. #include "stm32f10x.h": d6 e. G  D  |) }. R3 m( Y
  2. #include "led.h"+ d+ u( Z9 I) ^! ]
  3. #include "Timer.h"( A% w% G. L" `# U
  4. + p( M" `* c2 D* J  u6 F
  5. int main(void)
    * ^# Z' n6 |# |6 J1 b; O2 \4 v
  6. {
    # E* G# b4 u1 t2 u2 L
  7.         TimerBase_Config();5 n; Z/ K5 T' R  m/ l" T
  8.         LED_GPIO_Confing();" d' h( u" h+ e* C- G* f2 y
  9.         GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);
    4 c6 F# U2 G/ V  p& k: a- D9 P) c' b
  10.         while(1)1 j7 D- p' |% m' V  f
  11.         {- ?# w* S6 E0 F/ Q# i0 {8 D
  12.         ! R% z# r9 e2 X; E! D
  13.         }6 n1 o8 I; z, N$ D1 H" P! G
  14. }
复制代码

7 n+ V, l$ K6 O! B注意事项:
6 H+ I% `$ W# r* ]: e, u1 ?% Z& V& ]一定要记得清空标志位,尤其是中断服务函数里的清空标志位,博主就因为此检查好长时间' z' B; V2 |3 O
————————————————" i1 W* m+ ]7 J# ~! y% H
版权声明:fake 钢铁侠
! \/ m# J; D$ A( B: l$ O7 X如有侵权请联系删除$ ]6 t; H5 H% \% q
: o5 Z7 L% h) f5 M  g+ k' D
. m- R6 ]  k/ `* L$ R" _2 _/ ^" g
收藏 评论0 发布时间:2023-5-11 17:41

举报

0个回答

所属标签

相似技术帖

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