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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-11 17:41
stm32有很多定时器,每种定时器的功能也不尽相同,今天学习了如何用通用定时器实现1s延时,使LED灯闪烁,现总结如下:
4 y- Z# G1 X, {+ Q
' o" ]- r' Y/ X) P* e; K步骤总结:
" e$ E2 h  }- R' B3 n" Y使能定时器时钟->配置定时器结构体->清空定时器标志位->开启定时器中断->使能定时器->编写中断服务函数$ p3 y9 d' {" m. r3 `" b
1 [2 D" X' S- G; q7 ]
Timer.c:1 i, @: \/ H1 G( n
  1. #include "Timer.h"# F) d- ^/ h& K! c8 Y' S

  2. ) Y  G( @; I" M1 f0 R. g/ y
  3. void TimerBase_Config(void)
    5 ?# c* T& C9 }/ U
  4. {8 E! v0 _( [0 @3 u
  5.         //开时钟
    : _: p' O& O: @+ D& S: L1 \
  6.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);; `5 i+ r5 R* ?
  7.         //定义结构体变量
    ( Y2 l0 d1 R% z- Z) `8 V
  8.         TIM_TimeBaseInitTypeDef TimerBaseInitStructure;, a( \- q8 K% r7 z
  9.         NVIC_InitTypeDef NVICInitStructure;
    . [4 E) O; r" u; {& U# w
  10.         //配置定时器结构体
    % @$ E) s3 o% K" {1 o' z' S& N! Q
  11.         TimerBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    5 }2 p5 h8 I" u" I
  12.         TimerBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    2 x" \6 S' q5 @
  13.         TimerBaseInitStructure.TIM_Period = 10000;3 K) ]" n) @) \1 X; J# {, M
  14.         TimerBaseInitStructure.TIM_Prescaler = 7200;% z0 \1 l4 f- k& G0 p# j
  15.         TIM_TimeBaseInit(TIM2, &TimerBaseInitStructure);2 m( ?- w1 p; t2 X2 n$ A
  16.         //清空标志位( `) d# }2 r: {' z
  17.         TIM_ClearFlag(TIM2,TIM_FLAG_Update);9 H4 d3 \) P6 r- K+ d& ~
  18.         //开启定时器中断
    9 t9 u: |8 K3 X! X) n
  19.         TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);; K- w( `3 x6 c9 M3 t  w
  20.         //使能定时器: B. k9 U  P7 r/ y
  21.         TIM_Cmd(TIM2,ENABLE);
    0 _2 B( w5 M: o; U$ t
  22.         //配置NVIC结构体
    ( r6 v  ^$ x4 |
  23.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    , `8 X9 q1 ?8 o: _& _
  24.         NVICInitStructure.NVIC_IRQChannel = TIM2_IRQn;
    : j$ L4 K; g4 ?! U' N
  25.         NVICInitStructure.NVIC_IRQChannelCmd = ENABLE;6 a% c. h# E3 p' m( R$ H& t
  26.         NVICInitStructure.NVIC_IRQChannelPreemptionPriority = 1;; O$ E5 J& o. S
  27.         NVICInitStructure.NVIC_IRQChannelSubPriority = 1;2 v6 e, m9 o& x4 a, [2 K3 n+ R8 W
  28.         NVIC_Init(&NVICInitStructure);
    7 r- D: b8 x( _! L7 }2 R$ J3 J* Y
  29. }
复制代码

, f3 a$ T3 \* I% Zstm32f103x_it.c:
& j9 f; Q# E& o: W* a  B2 ^) d3 \* M
  1. void TIM2_IRQHandler(void)% F; F* W2 t! a: C
  2. {
      n# D  ]. d, S3 F. p9 P
  3.         static uint16_t temp;
    , o0 Z3 P) k+ V: o* b
  4.        
    2 M( z. e/ y7 r. i" B
  5.         if(TIM_GetITStatus(TIM2,TIM_IT_Update) != RESET). Z; B2 B( ^; j
  6.         {
    0 [' |7 q/ M  }% o, f
  7.                 if(temp ++ %2 == 1): R( ]$ _6 T5 s, Z( o% n
  8.                 {: l& j* H! D% Z3 A$ j
  9.                         GPIO_ResetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);
    5 I- ?4 o7 T9 e4 ^( l: j# Q7 k
  10.                 }, j, U" ?8 B" G2 [
  11.                 else ; b: B0 {& h4 n
  12.                 {
    5 K# n/ C' E& b1 n
  13.                         GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);
    , h, `7 ^; m5 i0 U; H  `- `9 }
  14.                 }
    3 k" }$ _, E/ F( v* g
  15.         }- V& J1 a9 F' e* b! L/ [
  16.         TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
    ) S4 T" O/ Z  t3 _/ }* F) E8 D
  17. }
复制代码

7 ?. M; g2 o$ ]/ F' Dmain.c:! n' @$ M7 @, F$ d
  1. #include "stm32f10x.h"* z8 r" ^- Y  l" P2 h& ?  |2 d, P
  2. #include "led.h"# c  n4 g* k% b, f) X+ b) a( ]- A
  3. #include "Timer.h"
    : }8 r. X6 {8 O3 p* L' z

  4. $ u  i. w$ \+ o* X* b
  5. int main(void)
    , C  a$ p6 x  Q. i
  6. {
    3 U: Y7 \6 ?- S6 [+ ^* P
  7.         TimerBase_Config();+ H6 j: q- g) }+ u0 I  Z
  8.         LED_GPIO_Confing();5 M- H+ J2 y. U2 q8 K
  9.         GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);
    , {4 H/ }  A) X1 t5 q( Z& q
  10.         while(1)5 N, ^8 a5 Q+ H% s: p4 L, X9 k
  11.         {
    9 M# R4 j" Q1 V; k& ]; o3 {+ H6 T3 I
  12.        
    2 I" {0 ^# M5 a+ Q+ h% K
  13.         }" `2 h  x& r7 @, j
  14. }
复制代码
) V3 J5 h3 B8 D
注意事项:
: m# C! ^0 T4 g% O  [( u一定要记得清空标志位,尤其是中断服务函数里的清空标志位,博主就因为此检查好长时间
, o; ^4 z/ e/ O: n$ Y————————————————
. h. m. p7 b- j- w* S& p) j版权声明:fake 钢铁侠) W5 T+ X# z9 `/ E; v* t9 m4 x
如有侵权请联系删除
& k1 o7 p( Q! s
1 H" s5 \4 N& c" I' t5 E* G# K0 F' i7 `
收藏 评论0 发布时间:2023-5-11 17:41

举报

0个回答

所属标签

相似技术帖

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