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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-1 17:26
stm32有很多定时器,每种定时器的功能也不尽相同,今天学习了如何用通用定时器实现1s延时,使LED灯闪烁,现总结如下:
; e4 j# g; j" z0 n0 ~$ R

: e5 S3 d# p9 K: O2 i步骤总结:
$ n4 {9 ?: n8 R2 S( X, v使能定时器时钟->配置定时器结构体->清空定时器标志位->开启定时器中断->使能定时器->编写中断服务函数+ N. m6 ^8 R  {1 j, |0 T2 p$ s
  K: K" q  \% X3 C  d
Timer.c:$ g' T' c0 d, Y! U' Z9 m
  1. #include "Timer.h"
    5 j- }6 ^9 {; s2 N8 d5 T
  2. 1 w1 ^/ P- U. V2 U1 l
  3. void TimerBase_Config(void)
    3 P  h# c1 I7 \) V8 F6 P
  4. {
    ! @# a" o0 w2 J, r2 l
  5.         //开时钟
    1 ?9 V0 O+ ~- g  ?0 ^
  6.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
    1 d4 `9 y) K; \0 z
  7.         //定义结构体变量
    $ C  G& `7 w3 c& c
  8.         TIM_TimeBaseInitTypeDef TimerBaseInitStructure;
    ( Q. b" j' ]. |& C
  9.         NVIC_InitTypeDef NVICInitStructure;3 o4 f9 x9 n8 j9 B9 n
  10.         //配置定时器结构体
    7 ~7 z* S  \# _' C4 m
  11.         TimerBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    0 c/ H8 ]. v2 Z1 C) |
  12.         TimerBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;2 E- b- ~  h+ X4 g. o) C9 H
  13.         TimerBaseInitStructure.TIM_Period = 10000;. J' @0 n0 k1 C0 x
  14.         TimerBaseInitStructure.TIM_Prescaler = 7200;! }' u- N$ z2 ]9 h4 R3 p
  15.         TIM_TimeBaseInit(TIM2, &TimerBaseInitStructure);9 {$ p4 J2 o. [- @: z# `& h
  16.         //清空标志位7 j6 d6 T% c+ r7 j' @5 s6 p. R
  17.         TIM_ClearFlag(TIM2,TIM_FLAG_Update);
    1 A* s5 x* L, k* X& W! e. f
  18.         //开启定时器中断: h# V& W" ]; H. C; d/ i8 z
  19.         TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
    # W6 s  e1 x' g5 L$ w5 S* m
  20.         //使能定时器
    , o  H+ `' Q( t9 x) E: h. C2 ^
  21.         TIM_Cmd(TIM2,ENABLE);
    & F' C1 D& {. V" |& z
  22.         //配置NVIC结构体3 V% h0 ~/ i2 z1 f4 W# e3 ~7 K
  23.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);, D% k% V' k! }# h8 s7 T
  24.         NVICInitStructure.NVIC_IRQChannel = TIM2_IRQn;
      Y* k% `: c( `+ T% A
  25.         NVICInitStructure.NVIC_IRQChannelCmd = ENABLE;) j5 b$ Z% }9 l( f1 A) j5 `6 S2 t
  26.         NVICInitStructure.NVIC_IRQChannelPreemptionPriority = 1;( J5 A8 w9 T  a. i% A6 K- Z
  27.         NVICInitStructure.NVIC_IRQChannelSubPriority = 1;' m" n# @# x/ n3 d
  28.         NVIC_Init(&NVICInitStructure);
    - d% N1 h/ E$ {# j, o3 K
  29. }
复制代码

( x% R: w0 @) W# r, f: l9 c9 ~

, S& M, ?3 l3 h. hstm32f103x_it.c:& q/ Y# ~! X: r( S
  1. void TIM2_IRQHandler(void)
    % S$ b. q& K7 d0 y  m
  2. {- s7 |) r( M& Q% `
  3.         static uint16_t temp;: t. `8 V& D0 _& z8 T
  4.         0 Q& y1 x) W2 ?1 \, r; Z
  5.         if(TIM_GetITStatus(TIM2,TIM_IT_Update) != RESET)8 D6 ~: u7 a4 x$ g3 O
  6.         {
    , Y( e( s/ f3 q' A( s; D
  7.                 if(temp ++ %2 == 1)
    . |1 T: ]1 ^# n+ m( W. f' z1 g
  8.                 {
    " F5 d! i+ |% A8 U
  9.                         GPIO_ResetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);9 R! C( h$ l& G) M: L' e
  10.                 }
    0 h0 G1 ~) z* B, U! W  s
  11.                 else
    * W$ b1 b$ I- O$ U2 }2 s
  12.                 {
    , F# T/ Q( u5 X. \  q$ n/ U& }
  13.                         GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);
    # \2 L1 j3 y. t+ g; M0 Q
  14.                 }) E3 S3 g9 ^: C/ }5 N
  15.         }
    ( o3 T& `. S9 Y/ ~+ K# @# K
  16.         TIM_ClearITPendingBit(TIM2,TIM_IT_Update);- t3 q! f! _0 Y! Q
  17. }
复制代码

5 C" u/ f3 d: a4 N: |main.c:- I5 U" |( I6 j- f
  1. #include "stm32f10x.h"4 q2 c- u, Q1 Y; q
  2. #include "led.h"% V  p/ n! R1 l6 `1 t
  3. #include "Timer.h"
    - r  i% @, a$ R) W- g9 X
  4. ' W% ?1 Z2 Q* `- R; g9 k7 g
  5. int main(void)
    2 {  W+ h4 M0 O3 k
  6. {+ z4 g0 ]3 `) O* S- X6 c5 E+ O
  7.         TimerBase_Config();
    / \# K5 Z1 K# ~3 J
  8.         LED_GPIO_Confing();
    * Y6 |& l  l. [5 }  v
  9.         GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);) v4 o  w  ^5 E8 U" `/ v& H
  10.         while(1)
    4 U2 K. T2 D$ i. N5 k! T
  11.         {
    ; Q4 B& M4 p, S2 n+ I
  12.        
    + K# T( R. c+ z$ F8 P
  13.         }
    3 w; }4 z. }0 i" a
  14. }
复制代码
5 \' ]) G/ ?4 \: z
注意事项:
' H( T0 Z: W9 h* W9 H) z' ?一定要记得清空标志位,尤其是中断服务函数里的清空标志位,博主就因为此检查好长时间8 H" f) s- {; W. d# T9 T9 k5 T, _
————————————————
& b$ T$ X3 S+ k/ I版权声明:fake 钢铁侠
9 ^9 I; G# U; V3 _/ T9 i如有侵权请联系删除. n- o- B, g1 o. Q4 B/ E6 f
% l; M/ y3 f6 H; v2 m8 q0 y( P
# @# K9 G& V9 b) @8 I: x
收藏 评论0 发布时间:2023-5-1 17:26

举报

0个回答

所属标签

相似技术帖

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