主频72MHz:最大计时59.65s0 j! h5 z/ \$ G+ M' e
8 w/ `4 j7 a& ^" z & f: w3 G4 _+ y: H 基本定时器: 基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应! \$ e) l; N: O3 r6 \) j 主模式触发DAC 硬件自动化 通用定时器: : X# x0 H6 q$ Q3 u2 \
计数模式不只一种: 向上计数:计数器累加到自动重装载模式的值后进行中断相应 向下计数:自动重装载模式中的值向下减到0后进入中断5 U* g; ]$ G5 Y2 E$ f- C 中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生 4 I- F% Q4 S1 a% Y% c9 N
& j1 u0 ^6 r8 E& o 定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO 选择外部时钟1 4 }$ I/ W, a3 R4 p0 c 定时器的使用: ETR引脚,CH1、2、3、4 边沿 其他定时器 输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率
初始化定时器 开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组 ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器 定时器中断函数:判断标志位,清除标志位 NVIC结构体:中断通道,使能 抢占优先,相应优先级) |; K6 X2 D$ w$ D' b / C' C z5 f0 |" \ 时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0# e9 r3 @- f3 R7 o9 E: p y) c5 B% ] 9 W" _# R9 V! {6 w: a! O3 v 预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0 以定时一秒为例: * n( F0 M5 ], o7 V$ g5 c8 C2 n* T0 e 预分频: 7200-1 时钟周期: 10000 定时的长度=72000000/ 预分频 / 时钟周期/ Y8 ~$ W, d1 H 找到TIM的定时器库函数:
7 O- I+ J! N [1 c: |* |& e! ` ( P' ~$ \$ m" r. |5 I8 [, t. | 第一个:清空配置: t3 ]3 f2 Z9 a1 ^ 第二个:时机单元初始化- n( M! l9 p+ t. k# J8 } Timebasestruct 附一个默认值 4 S# u n! L5 y; e TIM_cmd 使能定时器* E5 P9 f1 ^! T
TIM——ITconfig 使能中断. _$ F# Y* m& p" r J. n& P4 k, W
选择时钟2 o- Y, f2 d& O: a) t# u7 W / H9 U( o3 ]4 }$ t 具体步骤:$ `& }8 B1 C! _+ h7 [+ u- }
9 ^( H) Y+ m. x* J% M 这里的分频和自动重装值需要理解一下 M, ]1 d* d( A h2 z" e
72M/分频/计数个数:4 ]& G5 g d0 h* w & M$ J% f+ g' s+ I 72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s
打开定时器时清除中断的标志位
判断中断标志位然后进行相关的操作 , l* L. ~! Y* c3 R 外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断 . ?4 c- z7 f- k3 y+ k, a 使用的外部时钟,需要用到GPIO . z8 M0 P! l% M) V# m+ A: A 配置外部时钟; 配置外部触发的时钟 + T( X6 z$ s S: x# N: S3 C
复用的是PA-0口3 u/ h, _2 y$ r8 F
J- O# [7 {1 R- `+ j) D
外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,9 n; H6 D. Y; ^; `1 d 预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1 0 e$ ]- K. E( k; O+ G9 s6 ` 定时器中断代码总结: 打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体, & t$ ?/ s4 e N& k0 { 打开中断定时通道进入NVIC. Z4 G' D/ P# k: Y 配置NVIC中断优先级,打开计数器. O! `" P; _% [4 E 外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发 ! s' k. ^8 P1 w8 t s# D 不用预分频 就直接用周期来进行判断进入中断 ————————————————, [9 U) U- s$ a( d 版权声明:小聪不想秃头 如有侵权请联系删除 |
【福利三:雨露均沾·逢7狂欢】之一:STM32F1外部中断异常故障的解决办法
经验分享 | 利用TIMER定时和捕获功能实现编解码演示
STM32 LSE 不起振排查指南:五大核心原因与快速解决方案
我心中的ST中文论坛
经验分享 | 利用STM32 TIMER实现同频跟随输出示例
2025软件工具兔哥知道
经验分享 | 利用STM32 TIMER实现同频跟随输出示例
经验分享 | 一个基于TIMER事件的中断响应话题_续
经验分享 | 一个基于TIMER事件的中断响应话题
11张图学会STM32定时器!
微信公众号
手机版