|
主频72MHz:最大计时59.65s5 A+ M2 m* M# R) [ 0 v3 P U& u# D7 O
基本定时器:) p# K' J' G Z$ w5 y' E% ~- A8 N' F ) p$ ^* n* w' G* {2 c% o 基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应 ; i# h4 T* h* Z8 { 主模式触发DAC 硬件自动化 通用定时器: 8 y) }8 K/ M, c. T# ]
3 p [1 m2 H5 p7 ? 计数模式不只一种: 向上计数:计数器累加到自动重装载模式的值后进行中断相应& y% z! d; n! l. q 向下计数:自动重装载模式中的值向下减到0后进入中断+ c. p2 ~" S$ W U 中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生 $ Z: g! C# C/ T: N
: t3 _; F# h. A+ m8 \7 w 定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO 选择外部时钟1 定时器的使用: ETR引脚,CH1、2、3、4 边沿 其他定时器: g0 D+ l j6 p 7 l6 _* m/ H2 T' V 输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率9 g; P$ H' \" I9 U $ h" ~% ?6 z8 e2 [. P( ^' }8 z4 H9 }
初始化定时器 开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组 ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器* [+ G' p$ }8 G' O' M 定时器中断函数:判断标志位,清除标志位 $ s) p/ g# N$ f# N: V2 w0 J NVIC结构体:中断通道,使能 抢占优先,相应优先级) j; z R" z. `5 v* c* U. d 2 {% \- J! \) ?' `* r, A& D 时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0 预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0 以定时一秒为例:. Z3 b& R q6 o7 p7 p 预分频: 7200-1 时钟周期: 10000 定时的长度=72000000/ 预分频 / 时钟周期4 C$ j9 g) B( D9 o V. o7 ~6 c 找到TIM的定时器库函数:
* z! x0 Z4 h% b1 `, i5 S. {1 \8 h 第一个:清空配置" y1 P1 G4 w1 x 第二个:时机单元初始化 9 R9 M; J" v: t% v Timebasestruct 附一个默认值% @! y l, n* @# L TIM_cmd 使能定时器+ U( J& h# m" ~# x5 q; Q; U$ C
! r& {6 O8 D6 a6 u4 ^# o2 n TIM——ITconfig 使能中断 ; f3 n7 u8 S8 ]* ]& H+ C- N
选择时钟 & {) e- M. Q: Z! ? 具体步骤: 6 I6 m- k6 S0 [3 c2 p
% b9 F, E. R$ ]4 N0 q& W 这里的分频和自动重装值需要理解一下7 ~7 E8 ^% j7 H& r# t 9 A o$ A3 q0 N# l- g' L" n
8 S8 v& a6 U5 T* z) Z9 O 72M/分频/计数个数: 72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s( F3 m5 v- X& C: T6 H
. F6 t- b1 {1 e5 z% { 打开定时器时清除中断的标志位 - u9 j7 q* _* U+ _! X
% a9 J$ X) z2 ~ 判断中断标志位然后进行相关的操作9 {+ C$ {( b+ H; F) o3 m) T2 {, m $ }5 |4 y2 D" O& n 外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断 1 a, X+ }3 ]9 X2 A 使用的外部时钟,需要用到GPIO . l! E8 p! e& h# ] 配置外部时钟; 配置外部触发的时钟/ e3 t7 m* ~$ [4 r
/ u' }8 F* v0 |" a, j 复用的是PA-0口
2 X6 x6 [" ?( Q3 l5 E
外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断, 预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1; R0 z, {+ X4 G6 r& A 9 w! l6 W8 D: {3 W& q I 定时器中断代码总结:! v$ m8 a. ^ x, q. E 打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,7 \1 n4 O4 u1 @: V 9 l6 ?/ T1 t6 x. ^, ]: Q, ? 打开中断定时通道进入NVIC* X! `+ ~3 I% `% h* h 配置NVIC中断优先级,打开计数器' I: [- O( |2 n8 O1 s 外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发 不用预分频 就直接用周期来进行判断进入中断' w2 ^( D& U) }2 a7 K. E+ D9 z ———————————————— p" t6 }8 U; Z 版权声明:小聪不想秃头1 F: i/ q5 W8 A( k* \ 如有侵权请联系删除 1 H, B2 V% e8 k. G6 M4 R 3 H: ~2 }1 J* M |
【福利三:雨露均沾·逢7狂欢】之一:STM32F1外部中断异常故障的解决办法
经验分享 | 利用TIMER定时和捕获功能实现编解码演示
STM32 LSE 不起振排查指南:五大核心原因与快速解决方案
我心中的ST中文论坛
经验分享 | 利用STM32 TIMER实现同频跟随输出示例
2025软件工具兔哥知道
经验分享 | 利用STM32 TIMER实现同频跟随输出示例
经验分享 | 一个基于TIMER事件的中断响应话题_续
经验分享 | 一个基于TIMER事件的中断响应话题
11张图学会STM32定时器!
微信公众号
手机版