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

【经验分享】STM32F0系列开发之定时器的使用

[复制链接]
STMCU小助手 发布时间:2021-11-25 15:00
以下源码以定时器3为例,其他可以以此类推" ]! {) F- C0 a
$ s5 X) f- q1 p4 L; y
.c文件1 _+ e9 D) x- Z  w
  1. #include "Time.h"! j2 @% k8 A5 f  E3 O9 D. w- U4 b# n

  2. , l1 ]* v# b/ Y# y$ A3 I
  3. void TIM3_Int_Init(uint32_t time_us)% r) Q1 ^1 `0 t# V1 A
  4. {
    % V5 E! |5 X, h
  5.         TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    / J) c" F( C( C, S7 j$ b
  6.         NVIC_InitTypeDef NVIC_InitStructure;
    . p$ T. A& P3 k: c! X  e1 a! {: b

  7. . b' |, P5 Y. E4 T7 {- p: s$ e: E
  8.         unsigned char prescaler = 1;
    % k6 N/ [* f3 N( I% U; ]2 c6 M; I
  9.         unsigned char clkDiv = 1;//根据“TIM_ClockDivision”的分频比来定
    ( ^- p* T1 M! f; P5 I# a1 x/ j
  10.         unsigned long period = time_us*(SystemCoreClock/1000000) / (prescaler * clkDiv);( i3 Z7 T$ l: |, x
  11.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
    ' v' S' R7 d! V! r

  12. + v# y/ e7 B4 N, A  [
  13.         TIM_TimeBaseStructure.TIM_Period = period;
    9 ]% u) d# J/ F7 E  s& f, }
  14.         TIM_TimeBaseStructure.TIM_Prescaler = prescaler - 1;        //时钟再分频,会影响TIM_Period的效果% y( _" d6 l# l7 H$ o6 ^, A+ ?/ H
  15.         TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;        //时钟分频,会影响PWM的计数个数& `! Q2 f: G# W9 {& T
  16.         TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;& e+ T2 S/ A" Z1 e+ Q
  17.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
    * Z! o7 o, K3 ]

  18. ) w# F( _- r# _# b* [0 Z# B
  19.         TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断1 W+ R% ^2 I2 K7 E
  20. ) N# @: ?! f. w. i
  21.         NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;) D3 x6 c, X1 K4 F/ x
  22.         NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
    3 j4 p6 R2 `; e$ j/ {9 A
  23.         NVIC_InitStructure.NVIC_IRQChannelPriority=1;
    ) O. `9 E6 S2 T8 j$ W
  24.         NVIC_Init(&NVIC_InitStructure);
    # O: X! I2 L( }7 D9 R) H6 r
  25. 8 Y9 a: u" S# w- O
  26.         TIM_Cmd(TIM3, ENABLE);        
    2 r9 t$ u1 B$ `7 u
  27. }5 j+ z7 S2 c: d- h; r9 \

  28. 6 c2 D0 G" A" [- N# H
  29. void TIM3_IRQHandler(void)   //TIM3中断3 n5 l9 f# C! z9 y: ]5 C% A
  30. {
    ! l1 H% `; c2 N$ Q0 B
  31.         if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否
    2 {+ s9 V' U- V9 G. N% M; \
  32.                 {          4 g  {% o+ }' s6 T/ O
  33.                         
    . W1 s- g+ R0 c8 ]% l
  34.                 TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  //清除TIMx更新中断标志 , t9 \9 `9 M+ t2 q3 b4 j

  35. 9 @; r3 `7 P% _% K$ x3 H
  36.                 }
    ) k1 Y, _% O2 X! a. L
  37. }
复制代码

. {* g2 _3 H8 E.h文件& b& h" a- p9 [1 C: `
  1. #ifndef _TIME_H- @5 \; _/ L) i: J$ r& e  @  r$ v+ s
  2. #define _TIME_H
    . n7 M4 L6 B+ @
  3. #include "stm32f0xx.h"
    % q0 a6 w/ _6 W" O0 X  s2 h2 ~: M
  4. 2 _. c3 e9 Q( H8 S$ |
  5. void TIM3_Int_Init(uint32_t time_us);
    6 f" S' J, i$ M+ f7 G

  6. ) u0 b5 Y+ ~! v9 T. _) S; n2 t" [# o- V
  7. #endif
复制代码
% \( d1 r9 D6 H+ N
6 w4 U/ f) N7 W; ~. e+ g" ~% n
6 o) {6 l& r  F: E* X2 v
收藏 评论0 发布时间:2021-11-25 15:00

举报

0个回答

所属标签

相似技术帖

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