|
主频72MHz:最大计时59.65s- \: y. A: y7 O0 a6 M& o " p1 e( z- H+ g- `; _
% w( h; Q b% s, R+ | n6 z* ~ 基本定时器: 基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应1 P# n }4 }+ h/ k$ K% \+ D 8 y* h, ?% ^& a9 F+ j 主模式触发DAC 硬件自动化 6 B4 D2 m, `! o6 g4 [ 通用定时器: ! d# N0 u- T0 A
6 b- j& y$ ?/ J2 J 计数模式不只一种:8 k1 I+ ~ N- T9 e6 t9 s 向上计数:计数器累加到自动重装载模式的值后进行中断相应 向下计数:自动重装载模式中的值向下减到0后进入中断 中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生, ?) U" T% ^% @( d: \% r- w- B6 z 2 ^+ U7 D7 O7 L* C
定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO 选择外部时钟1 ) @4 p& K( d* @) b: E 定时器的使用: ETR引脚,CH1、2、3、4 边沿 其他定时器 输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率 / }: k* A5 T5 {( D/ Y
初始化定时器2 G- w: Y, D+ K 开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组 ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器7 q& Y' E2 W, }! n1 J/ c; ] 定时器中断函数:判断标志位,清除标志位( o: @9 v+ b) U7 _. T# m8 Z 0 a9 T& S6 P3 g6 k5 Y& i# u0 T NVIC结构体:中断通道,使能 抢占优先,相应优先级- ~1 \1 e) G! X4 C& m* d, ^- m 时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0 + f* ~' M$ v% t 预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0 以定时一秒为例:1 r9 F& a1 H1 c* s 预分频: 7200-1 时钟周期: 10000 定时的长度=72000000/ 预分频 / 时钟周期9 F+ |) L; ], g- b. I2 { 找到TIM的定时器库函数: 3 B" z* i" |" X
第一个:清空配置 第二个:时机单元初始化 Timebasestruct 附一个默认值 TIM_cmd 使能定时器
TIM——ITconfig 使能中断+ d% n6 \& ?( g" b/ O 4 U; q ], Q" _$ j+ }3 R+ z
选择时钟# ]/ i ]& L. o; g' r Q/ X- n" Q1 `9 K% [- e& z. j* d: G 具体步骤: - t. R( m h; K' k# f
这里的分频和自动重装值需要理解一下0 ?; w/ ]1 ^1 G' n5 V
72M/分频/计数个数:5 s+ g; C2 A# F0 N 72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s, i" r3 |7 V$ ^! M0 | ! O8 [4 h' x9 o9 k1 g% h
打开定时器时清除中断的标志位6 ~; {1 @ {) U S! ^" v / |2 N c5 T$ n& R
判断中断标志位然后进行相关的操作 外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断- z! j; Y9 F8 ~; ~% f 使用的外部时钟,需要用到GPIO' ?+ o. J, P! y, A! s/ r* \. O $ u& V5 R8 F0 c) q( D/ ~; X2 d6 r 配置外部时钟; 配置外部触发的时钟0 `5 u) U, ~* D( t; l+ ^) R6 T. i
) A% a; D# P. h! u" { 复用的是PA-0口% F+ d( n; P' k# c1 ^ ; t0 x8 G) J. a
- g2 z# ]2 m: J5 D2 r
外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,; w; i/ d% i: u$ K$ l( [5 P e2 ?: Z2 f5 g 预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+13 G d& s0 p/ _ _" F6 I B 3 ^% N0 W0 ]% Q6 C# q' g 定时器中断代码总结:: } T. v `# X; m 3 f5 Z1 C" ^# N' [0 m 打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体, 打开中断定时通道进入NVIC4 V/ I4 X9 }" j6 L: ] 配置NVIC中断优先级,打开计数器# A1 r* o0 q r+ X , r q2 T! K* k ^, r( m2 N' e+ | 外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发 不用预分频 就直接用周期来进行判断进入中断 ————————————————* v$ c8 q9 D$ X R 版权声明:小聪不想秃头7 A$ o, `/ K( k3 O 如有侵权请联系删除 & f5 X( G* C' s* l- _ 5 u- c$ \# I2 X# b. }& r + w! O! I0 Z1 r6 U |
【福利三:雨露均沾·逢7狂欢】之一:STM32F1外部中断异常故障的解决办法
经验分享 | 利用TIMER定时和捕获功能实现编解码演示
STM32 LSE 不起振排查指南:五大核心原因与快速解决方案
我心中的ST中文论坛
经验分享 | 利用STM32 TIMER实现同频跟随输出示例
2025软件工具兔哥知道
经验分享 | 利用STM32 TIMER实现同频跟随输出示例
经验分享 | 一个基于TIMER事件的中断响应话题_续
经验分享 | 一个基于TIMER事件的中断响应话题
11张图学会STM32定时器!
微信公众号
手机版