|
主频72MHz:最大计时59.65s( B W9 f( G- w: K9 Z ) b9 h" l$ ?7 q. t& J0 E5 R
基本定时器:% h$ g/ F* o4 J, E/ ^& s9 e 2 V" r' L% a7 e/ B6 F 基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应/ J6 @5 i8 w" f5 v 主模式触发DAC 硬件自动化# U) ~% x* ?3 \2 w! `$ A 通用定时器: 9 o, Q& }1 w; Z2 R& K8 s
计数模式不只一种:' E c) F+ p! u5 d% A0 [! ] 向上计数:计数器累加到自动重装载模式的值后进行中断相应 向下计数:自动重装载模式中的值向下减到0后进入中断 中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生
定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO 选择外部时钟1/ `: Q* v& G+ u7 \% s# x 4 V' U1 A8 w7 ?( ]8 g1 g" S6 f8 u 定时器的使用: ETR引脚,CH1、2、3、4 边沿 其他定时器 ; t. Z- ^# y' v+ L0 s5 K1 A) N. w 输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率2 \; h# X8 u' v
- n8 ~9 A( v3 A! u* B w9 N 初始化定时器 开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组 ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器 定时器中断函数:判断标志位,清除标志位/ d& p: Y* o* {: _ e * l+ A' w6 s8 j6 Z2 I NVIC结构体:中断通道,使能 抢占优先,相应优先级1 J8 Q" i2 x5 S' Y( I+ V- x1 C : y5 @4 b& F( u2 g 时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0: l+ }1 j! p- ^3 W x+ C 预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0 以定时一秒为例: + f8 L1 Y* l4 y# ? 预分频: 7200-1 时钟周期: 10000 定时的长度=72000000/ 预分频 / 时钟周期+ d' u' v# ?0 x 6 ~: }; L X# l8 u4 ~) e' r 找到TIM的定时器库函数:: h0 y h# L5 D+ ^
( m8 I) s0 @1 ? w* ^! n 第一个:清空配置 4 j! l4 ]" G; @& Q9 U# I 第二个:时机单元初始化 7 U8 C$ z2 A4 H/ y& L9 G. D Timebasestruct 附一个默认值 U# n5 ]; [4 q; V% y; ^ " f/ F% l! V% ~6 U2 P! l; B TIM_cmd 使能定时器
TIM——ITconfig 使能中断7 Z$ x* B8 z8 f$ x& P7 c6 K% {6 Y
; W$ {& _. S1 x; a, e# \# A! I 选择时钟8 t1 ?- Q5 o- i % Z0 r# A. k6 r- i T7 d0 i 具体步骤:
. C8 y ^4 R- m, T9 D2 o 这里的分频和自动重装值需要理解一下 ( K2 x. o8 Z4 f A$ F* [, q
/ l2 E) B$ B2 m+ _6 e4 F; Q: N0 g 72M/分频/计数个数: ! O3 A! H1 ^, E* T# u7 F 72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s' Y( _8 `) R" N3 \5 Z9 E! \
打开定时器时清除中断的标志位 ' i1 q5 L4 \7 I7 ~! v+ b" f6 H" J
% U' B3 ^! l6 z7 k, | 判断中断标志位然后进行相关的操作 # C5 r! x% Y/ l8 g 外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断 n3 H; c0 n: X2 j+ [4 _ 使用的外部时钟,需要用到GPIO 配置外部时钟; 配置外部触发的时钟
复用的是PA-0口
* Y# m& f* S: e$ b- O1 d
外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断, 预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+19 `' }# Z% A% j- V+ a 定时器中断代码总结: 打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体, 6 z- e$ H( H9 M 打开中断定时通道进入NVIC ' k, t& k9 @* r! ^. J' q' `. p 配置NVIC中断优先级,打开计数器 外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发 8 ]: S+ o# b: L w8 K- C' `+ F; ` 不用预分频 就直接用周期来进行判断进入中断 ———————————————— 版权声明:小聪不想秃头 如有侵权请联系删除; C* A+ K1 d9 n' {3 d, i6 Q- b , I# q. d7 M2 C( Z( X5 v 8 [2 x! Z! c. ?' @( }" q# l4 } |
【福利三:雨露均沾·逢7狂欢】之一:STM32F1外部中断异常故障的解决办法
经验分享 | 利用TIMER定时和捕获功能实现编解码演示
STM32 LSE 不起振排查指南:五大核心原因与快速解决方案
我心中的ST中文论坛
经验分享 | 利用STM32 TIMER实现同频跟随输出示例
2025软件工具兔哥知道
经验分享 | 利用STM32 TIMER实现同频跟随输出示例
经验分享 | 一个基于TIMER事件的中断响应话题_续
经验分享 | 一个基于TIMER事件的中断响应话题
11张图学会STM32定时器!
微信公众号
手机版