|
主频72MHz:最大计时59.65s$ @* J8 F% x/ _% Y5 v7 f& ^7 }4 Z - O/ H- _; [% Q
基本定时器:' R2 v% _7 w7 N 基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应 主模式触发DAC 硬件自动化4 H( H* r' e+ c# H 通用定时器:4 V6 r" c' q( u6 [$ r * n( j: a( n) I% X; t( I, F
计数模式不只一种: 向上计数:计数器累加到自动重装载模式的值后进行中断相应 向下计数:自动重装载模式中的值向下减到0后进入中断' h' W! I0 ?% d0 m$ }! {" t! X! g 中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生; k5 o- _4 y* j ( z+ K5 Z% \! G; n
# o" r- c. D3 u) F; J. r# C+ Y 定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO 选择外部时钟1# [$ H% S8 F* O/ q4 G: `" { 4 t5 x4 x1 T$ n 定时器的使用: ETR引脚,CH1、2、3、4 边沿 其他定时器$ o% `* S5 s7 V- t # M* g3 ]* N0 _4 _ 输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率 ) N0 ~- {" c2 Q
初始化定时器 开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组 ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器+ s) |. v* [0 f" v* ^2 z 定时器中断函数:判断标志位,清除标志位. I I* b. e1 @8 S8 J" Q8 y* ?3 L ; g# ^$ u8 o8 p* }2 r NVIC结构体:中断通道,使能 抢占优先,相应优先级 ! q$ I0 m' U9 g/ E6 B* J# D& G2 W' c 时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0& e1 q$ G- v0 O% k5 _ 预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0 以定时一秒为例:% T! G( p) ]" b- e1 T+ v1 X' Z$ e 预分频: 7200-1 时钟周期: 10000 定时的长度=72000000/ 预分频 / 时钟周期 / p6 \9 R/ W6 m: m& Y& J/ _% | 找到TIM的定时器库函数:( a% R$ }4 L* v( X2 v3 }
( f7 j6 E1 s! u/ q3 o4 M0 k9 A; W 第一个:清空配置: ^, [9 n6 I* Z' T 第二个:时机单元初始化; z2 D7 N0 A7 c' k z4 }: { s Timebasestruct 附一个默认值 8 z' v7 b: e. @ TIM_cmd 使能定时器1 m Z, Y: J2 P% ~. v% X' { ^, S) B+ n
TIM——ITconfig 使能中断 / o& N1 H. z' _! |
7 p& S. x+ N7 j% e 选择时钟7 K# F R/ U1 z/ s. a1 @ 具体步骤:9 t! \& Z% i6 H7 }' g( s! M T
1 I, N* X% A, Q3 e7 z 这里的分频和自动重装值需要理解一下 ! F" ~: ^* u! I( H) Y% `" {
+ h% o$ V u9 q8 E4 g' z 72M/分频/计数个数:% X- p5 D" v0 ^/ n 4 J! A6 f$ k& B: ~/ H# s 72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s/ V- p0 a0 ~: ^, ?$ b) p
打开定时器时清除中断的标志位
判断中断标志位然后进行相关的操作0 w4 o* y1 Z- n! ` E' N 外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断% {6 k/ R! c4 R; @% b % ~( \/ b# R+ \8 s( ~2 e- r 使用的外部时钟,需要用到GPIO 4 @+ S% S7 @( ^/ J 配置外部时钟; 配置外部触发的时钟4 U1 o' J- G L X: t8 m ( a* i7 q0 Y Q ?# _5 Q
, q, j, G6 I$ _: O5 P2 O 复用的是PA-0口2 W$ \' [/ a( c 2 S' D0 D8 Z) d. S$ Z+ Q
" L9 N* M% w- E1 W6 i
' J7 ^! Q, g8 S6 ]0 g 外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,8 w1 a5 r: ]2 a$ |; g 预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1 定时器中断代码总结: 打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,, q- s, D' J! C+ g2 D - m) K" Q, R& j, w9 t- I 打开中断定时通道进入NVIC( l& f# [2 _9 n3 y2 A! `0 l 配置NVIC中断优先级,打开计数器" M; Q% H6 q* A% H0 v 外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发 不用预分频 就直接用周期来进行判断进入中断- h& @6 I) {) i2 B$ P ———————————————— 版权声明:小聪不想秃头$ X( P F/ f5 o3 n% N7 q, a 如有侵权请联系删除 P7 m% B Z _ C2 m& \& i# B # l$ @% n& E) R5 e% y% ^ N8 i |
【福利三:雨露均沾·逢7狂欢】之一:STM32F1外部中断异常故障的解决办法
经验分享 | 利用TIMER定时和捕获功能实现编解码演示
STM32 LSE 不起振排查指南:五大核心原因与快速解决方案
我心中的ST中文论坛
经验分享 | 利用STM32 TIMER实现同频跟随输出示例
2025软件工具兔哥知道
经验分享 | 利用STM32 TIMER实现同频跟随输出示例
经验分享 | 一个基于TIMER事件的中断响应话题_续
经验分享 | 一个基于TIMER事件的中断响应话题
11张图学会STM32定时器!
微信公众号
手机版