主频72MHz:最大计时59.65s! ]" ^7 S! V7 o
基本定时器: 基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应# V3 O2 t2 j E# u% f$ @ 主模式触发DAC 硬件自动化 通用定时器:1 J. P! F! S0 B ; q% U _- b1 @2 |" \
计数模式不只一种:# c- F3 Z. E& Q# N 向上计数:计数器累加到自动重装载模式的值后进行中断相应 向下计数:自动重装载模式中的值向下减到0后进入中断/ O1 J$ N6 M( O' q* v0 H" w 中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生& e2 \1 S0 I) Y0 F( K* f: x7 N
) u0 }; s1 `1 y 定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO 选择外部时钟18 b/ E1 m% u+ @0 f' l* w ' ?" z3 }9 y u 定时器的使用: ETR引脚,CH1、2、3、4 边沿 其他定时器 ; `! w, E, F) d d1 x2 @/ k* @6 s) F 输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率
初始化定时器 开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组 ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器! K* Q9 b- O# Q# X6 P; e 定时器中断函数:判断标志位,清除标志位 NVIC结构体:中断通道,使能 抢占优先,相应优先级 " H+ u% L8 w+ \ 时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0& L. Y, s3 u, b+ Y" B 预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0 以定时一秒为例: $ [! j/ f ?& F, {( L6 f2 S 预分频: 7200-1 时钟周期: 10000 定时的长度=72000000/ 预分频 / 时钟周期5 I- B2 Z: w+ P6 C& x. s& [ 找到TIM的定时器库函数:3 @6 ?9 F2 L6 u; `4 Y $ [0 a4 O: Y; y! o
* u# r6 u$ o- v9 ` ' S0 B( D% `9 b3 S( K9 v 第一个:清空配置, O# F* ]$ G+ F+ u# x3 M6 D* ^* C 第二个:时机单元初始化 1 w6 E) B1 J* S! {: @' ~ Timebasestruct 附一个默认值 TIM_cmd 使能定时器
TIM——ITconfig 使能中断 [) M" N* U* s" n! V6 H z- ~ - s4 @8 B/ O1 A: m( c9 L* @* e
选择时钟" a3 M7 E1 B) d 具体步骤:, o+ q8 J8 g* d6 ~; u % y- v7 d m. {1 x, E/ M
这里的分频和自动重装值需要理解一下 / a" T; H- W" t$ C( \0 ^; u8 T
6 e# _) J' K2 V+ X; D* B# u1 s" I 72M/分频/计数个数: & f" C% a- s/ P0 Q+ Q" d 72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s + T4 y8 x& p4 Y. g
# \" l6 `- ~- K' c1 }# g: F 打开定时器时清除中断的标志位 ' T$ e6 f& b; x% v9 @
判断中断标志位然后进行相关的操作 , a, v. M+ @% ^: H. q) ~ 外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断 使用的外部时钟,需要用到GPIO4 I. C9 Z% }2 z+ B4 Q' B 6 B5 d9 j/ r& ]5 r 配置外部时钟; 配置外部触发的时钟6 i" G% X; T! y; \. y: e2 v5 P4 ~
: Q; r. [8 j4 ^) B3 g' d: d1 [# x 复用的是PA-0口9 c5 B3 o4 z# b# ?3 T . z) I' E' T3 f) s5 A# u& U
/ M$ T+ L/ g* i% c- r' m3 e 外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断, % [% u( a1 s9 r, P" X Z 预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1) T8 O0 K7 v- `2 e7 }& v9 o 定时器中断代码总结:6 x8 {7 x4 o: z8 ~5 B 打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体, " ]5 u" K }9 s$ t* {) p, f 打开中断定时通道进入NVIC/ X5 H7 M: b; k7 A8 ^ 配置NVIC中断优先级,打开计数器0 Y& v4 ]# J- w * o* W- I% K4 {+ d$ Q# l3 X3 E: H+ \ 外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发 不用预分频 就直接用周期来进行判断进入中断0 ~4 `) R6 S' f6 E9 m1 Z ————————————————5 A+ }% U- x2 J 版权声明:小聪不想秃头) E( s- r1 G* E% O; _5 K4 P 如有侵权请联系删除 " b' t. G$ E8 w/ K1 I * O$ d6 }- j3 P |
【福利三:雨露均沾·逢7狂欢】之一:STM32F1外部中断异常故障的解决办法
经验分享 | 利用TIMER定时和捕获功能实现编解码演示
STM32 LSE 不起振排查指南:五大核心原因与快速解决方案
我心中的ST中文论坛
经验分享 | 利用STM32 TIMER实现同频跟随输出示例
2025软件工具兔哥知道
经验分享 | 利用STM32 TIMER实现同频跟随输出示例
经验分享 | 一个基于TIMER事件的中断响应话题_续
经验分享 | 一个基于TIMER事件的中断响应话题
11张图学会STM32定时器!
微信公众号
手机版