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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-11 17:41
stm32有很多定时器,每种定时器的功能也不尽相同,今天学习了如何用通用定时器实现1s延时,使LED灯闪烁,现总结如下:6 v( l% e( i5 `2 ~

2 D, _6 R" s/ o1 `步骤总结:
, V/ g" p" V& t4 `; ~/ X3 e使能定时器时钟->配置定时器结构体->清空定时器标志位->开启定时器中断->使能定时器->编写中断服务函数0 |, v; |: q* f) J6 o5 _' b! M

* R, ]9 T8 |" K7 ^* a. \: P  {Timer.c:
" N, R% T; r" U2 }3 C
  1. #include "Timer.h"
    ( r$ `! I+ U; @- J( J* t4 A, F
  2. . B1 V: b8 ?3 s# w* M2 F/ X
  3. void TimerBase_Config(void)
    * q0 }. s% L% y4 n" Y, [! j$ u
  4. {( v. P  n) k% F7 r0 Q% _
  5.         //开时钟2 l6 w5 }# U$ v5 d
  6.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);8 m% M7 m+ f6 [& b, \
  7.         //定义结构体变量2 ^& s+ M/ D+ ?7 p4 B  ~
  8.         TIM_TimeBaseInitTypeDef TimerBaseInitStructure;( J5 X" O/ p+ v9 m
  9.         NVIC_InitTypeDef NVICInitStructure;5 E  K4 S# L1 M% ^* T
  10.         //配置定时器结构体. _! O0 M' V: E5 c4 i
  11.         TimerBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;5 G4 X; |: p# Z
  12.         TimerBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;& M# A5 B0 S0 q
  13.         TimerBaseInitStructure.TIM_Period = 10000;
    9 l  C5 B. |9 O# Z3 ?: Z0 Q
  14.         TimerBaseInitStructure.TIM_Prescaler = 7200;2 A! ?5 f2 N1 _8 F$ h8 L0 |
  15.         TIM_TimeBaseInit(TIM2, &TimerBaseInitStructure);
    # ^5 ?  l9 a) G7 R8 n
  16.         //清空标志位
    ) W" v! X* f; _# o; w3 N, e9 \7 g, v( z
  17.         TIM_ClearFlag(TIM2,TIM_FLAG_Update);
    9 B# T5 @% K( B4 c/ b3 V( R# C/ d
  18.         //开启定时器中断
    + A8 W- \, g* s! E
  19.         TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);7 ]& a  q, J5 Z- f
  20.         //使能定时器
    0 j( m* j8 D  {( Z0 _
  21.         TIM_Cmd(TIM2,ENABLE);( \5 I" C; k/ |% u
  22.         //配置NVIC结构体( d. L" j' w9 f% ~0 N
  23.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    / h5 v* D& O3 q( G1 {! Z7 H4 E
  24.         NVICInitStructure.NVIC_IRQChannel = TIM2_IRQn;
    1 Q5 ]  i3 s. @0 [
  25.         NVICInitStructure.NVIC_IRQChannelCmd = ENABLE;( D( \& W% {! u0 z% I8 C" U# k. `
  26.         NVICInitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    - Q! o, C* e& s8 g" j4 G& j+ V
  27.         NVICInitStructure.NVIC_IRQChannelSubPriority = 1;. F$ }% U! d" D- Y$ H3 t/ Q
  28.         NVIC_Init(&NVICInitStructure);% {( W5 c$ j+ N2 j3 o" }" L7 z0 r
  29. }
复制代码
. ]0 `0 M* q, r5 G" A+ A3 M
stm32f103x_it.c:  {9 v  l: }. \% ^
  1. void TIM2_IRQHandler(void)3 \" g, j$ k5 c/ R( A6 v
  2. {/ @( }& B% C3 m
  3.         static uint16_t temp;
    " A5 d6 `! [6 o
  4.        
    * W" ~" Y3 j, Z( q
  5.         if(TIM_GetITStatus(TIM2,TIM_IT_Update) != RESET)2 }1 Z7 `9 \' D+ H7 g
  6.         {: N  q/ {  p* Z' S0 b& X, P; i
  7.                 if(temp ++ %2 == 1)
    . p' A( w- Y1 O! ?9 P
  8.                 {
    5 d: Y& _& o3 c% b
  9.                         GPIO_ResetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);) O7 M* J1 L( q: v0 G
  10.                 }+ {2 v4 z+ ^) n( s  v& r( K
  11.                 else " \6 j) {+ f, V6 ~# E7 Y
  12.                 {
    * q4 D9 k( @$ C1 b  h. g  S0 U' N
  13.                         GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);
    ' H- _7 R( \$ }' W1 M) m: \8 ~
  14.                 }( J5 c5 ]) O( A) Y  |( R
  15.         }
    . S7 q, [; Q, T3 n, l* L
  16.         TIM_ClearITPendingBit(TIM2,TIM_IT_Update);6 n1 f4 A( l% m0 `0 s0 J) E( E
  17. }
复制代码
4 ~( l' t! ?% l7 W. C
main.c:
' K3 e: j5 |+ [! K. @2 F) `
  1. #include "stm32f10x.h"
    * a. W; e: f# G( q
  2. #include "led.h"
    " S: V# ^" ^! F9 |
  3. #include "Timer.h"; K: ?. G3 f9 t7 U

  4. 5 M6 ^8 ], G2 [* K8 o; x9 r
  5. int main(void)
    $ a0 U/ B3 B. _9 o- _7 \
  6. {  N: u  r( O* P) }% N5 Y* L0 [
  7.         TimerBase_Config();, o: m# T7 S6 {
  8.         LED_GPIO_Confing();
    5 i9 }# i" k' j' r
  9.         GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);; g3 F9 r7 L* c; ]
  10.         while(1)+ s) u* N+ |- n- h4 [; b
  11.         {
    ) e4 W. o- D, `9 {* |. z! v- o5 n
  12.        
      X1 S$ H$ d- j5 W6 H
  13.         }/ _. D0 t3 ?; k5 k
  14. }
复制代码

+ a  b* Z/ E, Q) P& c& n: P/ {注意事项:
+ U0 b* \, W3 ]) u" O5 j一定要记得清空标志位,尤其是中断服务函数里的清空标志位,博主就因为此检查好长时间
0 x, U4 v- |4 |& `————————————————
$ J- H( A+ }. N1 K- V版权声明:fake 钢铁侠( v- o5 A7 T- ^1 D
如有侵权请联系删除
2 x# H) N. g8 o2 o/ S: a& {7 F; R1 ]: V
. M! c, {, L% ?2 O; D- g, m# c0 @: E; J6 e0 M8 H+ W& x" b
赞 收藏 评论0 发布时间:2023-5-11 17:41

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版