|
主频72MHz:最大计时59.65s9 n' h+ X2 _5 n3 c" B$ Y$ D " ?" k3 u7 K( }, ?; H, Q, f2 l
+ L2 r, g5 k6 _; C& ~4 {3 I; f) d & b+ z) n; x9 d 基本定时器: 1 B/ g0 L& B! x* c 基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应 " J9 z! H/ v! ]% u 主模式触发DAC 硬件自动化 . N* S/ S" c' b% U 通用定时器: 7 _8 w3 V& j1 W ^% }
; v R& y6 y: q 计数模式不只一种: 向上计数:计数器累加到自动重装载模式的值后进行中断相应0 J X- z8 g/ R1 p( [" m v 向下计数:自动重装载模式中的值向下减到0后进入中断( k) N$ D# @4 L/ W# q$ v* c 中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生
/ ?1 N" J' d$ T" I E 定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO 选择外部时钟1 定时器的使用: ETR引脚,CH1、2、3、4 边沿 其他定时器 输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率
1 [& h, _2 _# v 初始化定时器 开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组 ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器" F& w c3 \8 @: s" c* Z% c; G 定时器中断函数:判断标志位,清除标志位5 ? Q+ G! G& L2 G, \1 { ' Z; u( y- A9 W1 x, a4 s" E9 [ NVIC结构体:中断通道,使能 抢占优先,相应优先级$ x q) t V, T( t T# d 时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0/ Q9 t1 u% \+ M* r6 l ' Y% o+ K$ m- ^, N. H& m* E: u- d 预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0 以定时一秒为例:" Y( x$ k) G) S# b' u0 a: p* ~ 预分频: 7200-1 时钟周期: 10000 定时的长度=72000000/ 预分频 / 时钟周期 8 k- a8 e& l: i% _% J) {' n1 x 找到TIM的定时器库函数: * ]4 r, ~; R$ Y8 u7 h. f
1 A5 h/ t3 M7 R5 S, g7 Q) f" Q; g ; M3 \) L+ A `' Q+ g$ a: P! g- V 第一个:清空配置 第二个:时机单元初始化 Timebasestruct 附一个默认值7 L0 ~6 m1 m8 y" G# F" F) O 7 }% o) s$ \' E. `' F) q, P TIM_cmd 使能定时器
TIM——ITconfig 使能中断$ ~' D* j& P9 p I, k ( _; Z/ f3 ]* Y$ B( {+ `- P7 D5 K
6 @% y, v( w- l x7 b) Z 选择时钟3 P5 w8 @) g* a2 g4 Z* `8 J 具体步骤:
* [& o6 G0 c" X0 r 这里的分频和自动重装值需要理解一下: \5 s+ |! _/ K j
6 |/ P1 F0 S+ Z0 K; Z- O& q 72M/分频/计数个数:# l7 [- q8 f4 a 72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s
打开定时器时清除中断的标志位 8 f% _# y; k* o- e2 H/ N
判断中断标志位然后进行相关的操作 j+ {: Q: r4 c: Q, I* k 外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断( Q; r/ t- L5 \* P5 @7 j 6 w5 W: d& e& c5 Z+ m3 _# r0 l G1 N3 d 使用的外部时钟,需要用到GPIO 配置外部时钟; 配置外部触发的时钟 / M5 x4 V" ?; R' c
* _/ N8 _7 V# I: h 复用的是PA-0口8 k# ~ e& I+ R s% ]
6 ]6 u* z; B4 k. U2 Y& z0 k
外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,: g* E- F( P1 ?6 s; M d/ W: G 8 C8 P5 f- |/ q2 ~0 ]. Q 预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+10 J$ i' z5 y) e& C$ o. p8 } - \* ]' b; \2 V1 J u# z* M 定时器中断代码总结: 打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体, 打开中断定时通道进入NVIC! N# }$ i7 p/ o" W 配置NVIC中断优先级,打开计数器 2 ^- |3 s" N5 V: c8 T9 a1 L 外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发& e+ B" j6 \$ A+ ^ 不用预分频 就直接用周期来进行判断进入中断+ \, G0 L4 Y4 ?! L# b) V- Y ———————————————— 版权声明:小聪不想秃头 如有侵权请联系删除$ N/ D* C& f" D1 L$ ~; n 7 l% C, z. S. J0 Z |
【福利三:雨露均沾·逢7狂欢】之一:STM32F1外部中断异常故障的解决办法
经验分享 | 利用TIMER定时和捕获功能实现编解码演示
STM32 LSE 不起振排查指南:五大核心原因与快速解决方案
我心中的ST中文论坛
经验分享 | 利用STM32 TIMER实现同频跟随输出示例
2025软件工具兔哥知道
经验分享 | 利用STM32 TIMER实现同频跟随输出示例
经验分享 | 一个基于TIMER事件的中断响应话题_续
经验分享 | 一个基于TIMER事件的中断响应话题
11张图学会STM32定时器!
微信公众号
手机版