|
主频72MHz:最大计时59.65s0 L5 I! b& r% Q) Z . d+ K8 r0 A4 |" b: r5 e. G# A% E
3 y& U+ o5 W n9 D 基本定时器: 基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应$ [- v% S/ u5 s; i: Z 主模式触发DAC 硬件自动化 , |0 P1 I$ F8 {" J& z0 ?$ g. C, J 通用定时器: 0 @$ w! L' h! r0 c
+ C2 c9 J. `9 f6 d0 T1 t 计数模式不只一种:- w% k! `6 |8 S$ c5 v1 | O 向上计数:计数器累加到自动重装载模式的值后进行中断相应6 J; y* [: i* c* w; s% p" i 向下计数:自动重装载模式中的值向下减到0后进入中断' l' \3 E2 B J 中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生 8 o. z& z3 O( \
定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO 选择外部时钟16 v+ z9 l& s7 ?+ h 定时器的使用: ETR引脚,CH1、2、3、4 边沿 其他定时器6 k7 T" h$ n& r 输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率# O2 @1 A( G9 e6 |, R) s y! }$ i# d# X4 Q( p+ Q
初始化定时器 开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组 ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器+ u& U( w' E4 D0 U9 J1 J: v- i: t8 R 定时器中断函数:判断标志位,清除标志位9 A0 ^( U* b" ]" m+ l' a7 t NVIC结构体:中断通道,使能 抢占优先,相应优先级* v; M6 [$ \3 ~0 E2 K a/ _1 K/ c 时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0) t* l) Y: R V# _( G. } 预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0 以定时一秒为例:0 G; {$ U- z0 ]; G1 K% ]5 P" r 预分频: 7200-1 时钟周期: 10000 定时的长度=72000000/ 预分频 / 时钟周期 找到TIM的定时器库函数:' {8 V3 h8 p1 Y/ i& Y" }. f3 f
+ _) B* u& w; w ; v8 t+ l I5 V/ ~ 第一个:清空配置& o& J: D z V# S4 Z * R( t- _3 \- O 第二个:时机单元初始化 # ~& z7 T: O/ v Timebasestruct 附一个默认值 " [$ e( t9 q$ g; V2 M TIM_cmd 使能定时器
h8 }' |6 O2 Y( x3 n$ ^7 d TIM——ITconfig 使能中断
# x. v( k8 H! f6 B 选择时钟, ~' C9 _! S' k) j+ ^+ G+ N. n ' Z6 h/ a* f. x. X, i- I 具体步骤:
这里的分频和自动重装值需要理解一下0 k r* N3 ]! W4 \- F9 D9 i$ W( ? 6 n/ N9 p# Y4 ^" M9 E
$ a* X# G" p; a% x/ A4 D d 72M/分频/计数个数: 72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s 7 z, z/ t! T7 U* r
% w' G: U. [: t0 A7 n# g 打开定时器时清除中断的标志位" J0 r! L8 K* j5 Q% z 5 o: [6 q$ P( w
" V% O% L+ \! U 判断中断标志位然后进行相关的操作) g$ \6 z. i7 G$ [' E9 L) { 外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断- A' d: @7 X( H9 u ; B. G' Q8 }6 u- a5 c! I! p4 E 使用的外部时钟,需要用到GPIO9 d2 E% J; z! m4 E ' x1 c) l& o2 @! h) l 配置外部时钟; 配置外部触发的时钟 9 N! [* a% m3 `5 k1 p
6 B. X9 d0 @& K4 E# g5 S+ H 复用的是PA-0口 . C) [, S$ @( ~1 s0 T! I
0 q: {8 y$ u6 B
, B9 D, x: |1 D7 Q: Z! z 外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,) h/ Y+ @' h% m" `+ c7 r + o7 s1 ]: q( N 预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1 ~. f5 x3 |; { 定时器中断代码总结:5 I6 J2 _ \0 b4 z" \) d . H* W; }, S/ A4 G. x) e 打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体, 打开中断定时通道进入NVIC( O( w2 b+ r, h! \ 配置NVIC中断优先级,打开计数器 外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发; E7 ~/ l5 k# c. I 3 D3 k5 z+ Q) b3 v$ u5 t Y 不用预分频 就直接用周期来进行判断进入中断 ————————————————: h5 H5 M; c8 ]3 h- ? 版权声明:小聪不想秃头) a/ d! t; ]. k) t3 x 如有侵权请联系删除 5 E. Z0 E* `# |+ D7 x: t( h: p0 l . k) l( h9 ]) K3 O. y' k |
【福利三:雨露均沾·逢7狂欢】之一:STM32F1外部中断异常故障的解决办法
经验分享 | 利用TIMER定时和捕获功能实现编解码演示
STM32 LSE 不起振排查指南:五大核心原因与快速解决方案
我心中的ST中文论坛
经验分享 | 利用STM32 TIMER实现同频跟随输出示例
2025软件工具兔哥知道
经验分享 | 利用STM32 TIMER实现同频跟随输出示例
经验分享 | 一个基于TIMER事件的中断响应话题_续
经验分享 | 一个基于TIMER事件的中断响应话题
11张图学会STM32定时器!
微信公众号
手机版