|
主频72MHz:最大计时59.65s! r' i- G: w* E8 b( m: ` 3 y3 ?7 \7 j0 ?/ }$ o
" _1 P, B1 |0 |) c: E8 z- Y/ ] 9 o' }5 U4 W0 I 基本定时器: 基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应! b1 `, s$ E! R7 P O- D6 Q0 p- w3 c" r( _8 E* Z( ^ 主模式触发DAC 硬件自动化$ `7 \$ S1 W' t9 U& B 通用定时器:& f7 ?# s2 }! Z/ e6 P: V# G( W 3 f2 m, j( W% l# }: ^3 {
计数模式不只一种:. U t) |7 x7 U* t 向上计数:计数器累加到自动重装载模式的值后进行中断相应 向下计数:自动重装载模式中的值向下减到0后进入中断/ |1 J. e! x- S& D& i 中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生6 h+ s1 k+ n* x
! K( r* C, W K; }* v 定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO 选择外部时钟1 : {6 V# H9 u c! w- u 定时器的使用: ETR引脚,CH1、2、3、4 边沿 其他定时器 / B, H0 m. G1 t) ?- h: Q9 O 输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率
初始化定时器 开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组 ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器, l2 t9 r7 ?: A& U9 j4 o& U 定时器中断函数:判断标志位,清除标志位0 Q, ~' e. |2 s) g- O4 v) x/ f2 ~, A # X/ m7 S! v% ^7 n6 @. W NVIC结构体:中断通道,使能 抢占优先,相应优先级 1 V* R S8 }7 h7 P; N. Q 时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0 预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0 以定时一秒为例: 预分频: 7200-1 时钟周期: 10000 定时的长度=72000000/ 预分频 / 时钟周期 找到TIM的定时器库函数:% L+ k, c; I& l5 c* u( E. H
) B* `) M' L% k9 ?' r0 E ( z7 a% E- _3 J) r6 H& _( R 第一个:清空配置" w( |; r/ X" t$ W 第二个:时机单元初始化 w! X" ] }- v$ n# a- H% @/ X8 w! d6 e , F7 `3 h% Q5 U% N3 S7 X Timebasestruct 附一个默认值9 s- `$ B2 }9 @ B7 i 0 A. Q7 Q: C/ \3 [ TIM_cmd 使能定时器* u2 T0 b( o8 M' R( g9 d7 d# F " j7 j; g5 p& u5 _4 V" ]
) q, v. @7 x$ }! I* a8 e3 w1 E TIM——ITconfig 使能中断 * ?* g/ n1 E4 k( q& J& ^
) `- p1 F( r0 D$ D 选择时钟 具体步骤:3 q! J+ G1 g: T( s, V9 {$ r
" `$ A4 d/ Q' M: Y, C 这里的分频和自动重装值需要理解一下
/ T5 o# \- \6 a6 S 72M/分频/计数个数: 72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s 5 q& v/ A+ ?0 H/ ?0 e
打开定时器时清除中断的标志位. K8 B2 U9 D" ~( N5 k4 N7 u 9 O# ?) ?4 E, j
& H# a% N; C" \9 U 判断中断标志位然后进行相关的操作 ! {0 V" y2 G: w6 m$ ?: ` 外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断 使用的外部时钟,需要用到GPIO( f% Y+ z+ H1 {1 f. h) d$ j 配置外部时钟; 配置外部触发的时钟
复用的是PA-0口 # G5 s( |( a: U$ ]
$ Z8 X% W* L- ]" C& y 外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,/ B0 }- [2 t2 F2 X3 U& _ 预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+11 a1 [ y# B! l; W+ T. S' ?, r 定时器中断代码总结: # @2 T/ F' c) ]; G7 g: w 打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,- l6 O* K7 s6 N9 S 4 A' [+ O$ P, p) M& j! w 打开中断定时通道进入NVIC 配置NVIC中断优先级,打开计数器 外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发 / H( g1 {# Y$ c$ z" @ 不用预分频 就直接用周期来进行判断进入中断' y. q9 r$ b) e6 k5 z% }$ s( c ————————————————) G+ L, M4 b6 Y4 U& x7 e 版权声明:小聪不想秃头 如有侵权请联系删除 |
【福利三:雨露均沾·逢7狂欢】之一:STM32F1外部中断异常故障的解决办法
经验分享 | 利用TIMER定时和捕获功能实现编解码演示
STM32 LSE 不起振排查指南:五大核心原因与快速解决方案
我心中的ST中文论坛
经验分享 | 利用STM32 TIMER实现同频跟随输出示例
2025软件工具兔哥知道
经验分享 | 利用STM32 TIMER实现同频跟随输出示例
经验分享 | 一个基于TIMER事件的中断响应话题_续
经验分享 | 一个基于TIMER事件的中断响应话题
11张图学会STM32定时器!
微信公众号
手机版