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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-11 17:41
stm32有很多定时器,每种定时器的功能也不尽相同,今天学习了如何用通用定时器实现1s延时,使LED灯闪烁,现总结如下:
5 T" B* L7 j2 E5 b3 R. J8 |( d
* s  S$ d, T$ H. R  X步骤总结:
) l+ X) ?( E: x5 n使能定时器时钟->配置定时器结构体->清空定时器标志位->开启定时器中断->使能定时器->编写中断服务函数; J: Z" L, I) o' \

( q+ T, ]. w( v/ M$ k5 LTimer.c:
  O7 c2 S& e9 d* `2 z
  1. #include "Timer.h"
    / V; H' v" l& T& D9 {; o$ i) T. i/ o

  2. 9 }/ S, E6 t+ o4 F. @
  3. void TimerBase_Config(void)
    ' D* s3 A( R1 t$ k! s; A$ V
  4. {
    # C* r% A0 b0 e2 B) p& G
  5.         //开时钟
    ( Y  Y" I1 {  F" r* [
  6.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);) G9 C. a0 D4 c/ O
  7.         //定义结构体变量
    - {: O- @. D2 N! ^1 t: R
  8.         TIM_TimeBaseInitTypeDef TimerBaseInitStructure;
    1 [' S9 g4 e; w9 [& P! c8 S
  9.         NVIC_InitTypeDef NVICInitStructure;
    8 n5 G  w+ [7 U: G7 V+ f1 O" q. v
  10.         //配置定时器结构体
    3 v3 j, r+ l2 u+ @5 G8 C
  11.         TimerBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    " C+ k' j9 H3 v6 {4 h% R4 O8 n
  12.         TimerBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;( F+ v7 p" g7 ?1 K% d/ N& L
  13.         TimerBaseInitStructure.TIM_Period = 10000;
      }4 a3 c7 {! s* f7 ]: W3 ^, o
  14.         TimerBaseInitStructure.TIM_Prescaler = 7200;' o" y* I& Q6 f! L
  15.         TIM_TimeBaseInit(TIM2, &TimerBaseInitStructure);" x: x' X; m2 u: Q
  16.         //清空标志位# l& Q) _" m5 o% P+ r
  17.         TIM_ClearFlag(TIM2,TIM_FLAG_Update);9 N  }. B5 L/ x3 T) z! D; b" _
  18.         //开启定时器中断
    7 R$ H: m7 X/ N- H
  19.         TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);. R0 y) X1 q! J- e2 _4 Y
  20.         //使能定时器  ]- |1 Y' j+ m) t# j
  21.         TIM_Cmd(TIM2,ENABLE);
    , X# D% a, L% l2 c/ P$ K! A
  22.         //配置NVIC结构体
    ( b, {& s; B* H  S$ [2 `' R( E, h( z
  23.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);- ?7 y9 K! e4 P' F) S7 c2 P/ f
  24.         NVICInitStructure.NVIC_IRQChannel = TIM2_IRQn;
    2 ]$ e4 l' r9 q; h/ T' L$ J
  25.         NVICInitStructure.NVIC_IRQChannelCmd = ENABLE;
    2 s0 O- ?1 D! H: |
  26.         NVICInitStructure.NVIC_IRQChannelPreemptionPriority = 1;; T+ |* F- M" }3 R
  27.         NVICInitStructure.NVIC_IRQChannelSubPriority = 1;/ S# ?2 N: O* t6 X( R
  28.         NVIC_Init(&NVICInitStructure);. }$ F  b1 a' B4 s$ U
  29. }
复制代码

6 ]0 T6 V. g6 E5 e/ U+ c4 v, Nstm32f103x_it.c:
, d5 t& [7 q/ \+ F) x
  1. void TIM2_IRQHandler(void)
    7 L# c* h) e& w; ?  W  }
  2. {
    . z* Y5 _. P5 b2 P, l0 ]+ R
  3.         static uint16_t temp;! v5 a7 D4 K4 G8 u* O
  4.         , T3 B* g! y; G, G6 u' z0 @* R2 @
  5.         if(TIM_GetITStatus(TIM2,TIM_IT_Update) != RESET)
    7 F0 ]1 g) t8 Q: ?  ^
  6.         {
    ) a; x2 N1 ]1 c9 i* ^- I" {+ b
  7.                 if(temp ++ %2 == 1)# w; r& V0 V2 U; F  l
  8.                 {
    * h: \, A" ]# h2 m
  9.                         GPIO_ResetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);
    # W9 P  }$ p+ L0 G3 c8 ~
  10.                 }
    ! d3 N& t* G& k4 w! K0 c6 F% P
  11.                 else 6 J2 ]' z/ K1 @  G5 m
  12.                 {2 ?! [; ^3 f6 s1 \
  13.                         GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);
    4 `. ^7 B2 ^$ R" t2 u
  14.                 }9 k$ F) \+ o! Q' P( [  ^2 }5 K
  15.         }. m3 N, W  j( ?  [& U
  16.         TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
    & c) d6 J% @2 y. D5 B" ~! v
  17. }
复制代码
7 Y, i" V# @& w/ S
main.c:- M5 D7 g3 i; b- B0 ?+ k
  1. #include "stm32f10x.h"
    ' B- O' _! g' J; L; S
  2. #include "led.h"
    - j, g1 L" ~# v. k
  3. #include "Timer.h"9 O  Z! D) O/ e! p: t4 L6 A
  4. 1 v( O" R# H! i6 ^3 g- e" I& b2 [
  5. int main(void)
    3 `7 `* X3 e' a: P# j
  6. {
    7 O4 s0 o. d3 B+ j6 K
  7.         TimerBase_Config();5 Q3 p6 n" g1 i( F# p  n9 \: t( B. S
  8.         LED_GPIO_Confing();6 F' s$ ?% d) Z
  9.         GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);; V, f3 r0 j. T$ E8 f& K% C
  10.         while(1), Y2 {1 a* U' D5 ], c
  11.         {
    . R: @3 k. M; ~0 a/ w3 ^; }3 H
  12.         , f  _8 n5 x, H( M2 \4 X. w
  13.         }8 h! c, Q6 z* i' M# J! K; f
  14. }
复制代码

6 T5 q8 u! S' {9 x) g注意事项:
  l2 B! G1 D  w5 n) l) o一定要记得清空标志位,尤其是中断服务函数里的清空标志位,博主就因为此检查好长时间
* m0 u: k. v' k# _  C) l% h, C————————————————. B% }" I4 s) C* Z4 q
版权声明:fake 钢铁侠4 o, s, m5 y/ S3 Y6 B; S
如有侵权请联系删除; y: ^( b) o7 |. ^# m
1 B/ S- d6 u+ N& P; W

' h+ @. e: O" u3 C+ R  F' B- T' q: f
收藏 评论0 发布时间:2023-5-11 17:41

举报

0个回答

所属标签

相似技术帖

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