主频72MHz:最大计时59.65s ( ~1 ~* V& L% K7 ?' C 基本定时器: c; y+ Y, `5 _ 基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应 , R$ J1 a; {$ Q! P 主模式触发DAC 硬件自动化 通用定时器:: m" w9 _' }1 G 3 |3 M, O0 U+ N1 Z5 @8 P# y 计数模式不只一种: 向上计数:计数器累加到自动重装载模式的值后进行中断相应 T& }. Q2 ?5 U6 F |: T 向下计数:自动重装载模式中的值向下减到0后进入中断- N+ {( Q& g( w, N" u8 t5 g3 ~ 中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生. q7 p# |9 n9 k! n1 @7 T 定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO 选择外部时钟1 " e( x/ ~ D% \' R" q* ]( \ 定时器的使用: ETR引脚,CH1、2、3、4 边沿 其他定时器 8 ~: i: o. u1 m. E5 O 输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率 * ^- r: w- j# }+ q+ p 初始化定时器 开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组 ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器" P& R" {6 _5 n$ i% R P! K 定时器中断函数:判断标志位,清除标志位. Q% [' I; a* T f0 P0 S7 N 0 z3 l; E4 I2 _# s! U NVIC结构体:中断通道,使能 抢占优先,相应优先级$ t& p; @# V" J + Z+ I7 W4 u+ u8 J- k/ A: t5 Y 时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0 , t+ L- |" | y* u+ m/ g& {8 F$ l 预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0 以定时一秒为例:8 v; D/ B) B( d7 _& @8 d _ " }0 x. |! x& }/ y$ X) l( I9 C 预分频: 7200-1 时钟周期: 10000 定时的长度=72000000/ 预分频 / 时钟周期) E2 b T4 g, v0 A( M3 Z / y4 o# L7 H# }0 d) i' h 找到TIM的定时器库函数:& }1 D5 s) M( b2 l) L+ ^; Y 第一个:清空配置. O) q5 G% B1 l; N0 Y4 } 第二个:时机单元初始化 7 N0 k( a4 Q9 n8 M* J Timebasestruct 附一个默认值( q. m4 b O) h$ @0 u/ u TIM_cmd 使能定时器 ! r0 o* Z/ [, b1 D ; ~4 n6 R3 D4 \. m' ^ TIM——ITconfig 使能中断: R+ {' W3 o8 U& v+ p/ Z6 o" N4 g 选择时钟) V& ~5 k3 v* C; B1 K) ~7 {1 ~ 4 B2 x: Z" j$ ]7 q 具体步骤:3 ^/ Q( Y' O, Y( f 7 G+ p) h/ C _: U/ e 这里的分频和自动重装值需要理解一下 # H( U! U2 S3 u( b9 Y 72M/分频/计数个数: 3 |. O* g+ D/ J5 U) q 72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s7 @( Y4 l7 t6 a2 |% T$ u% T; w 打开定时器时清除中断的标志位 判断中断标志位然后进行相关的操作 外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断 使用的外部时钟,需要用到GPIO$ Y: x5 P$ y) _& D$ m 1 j7 S+ G- c& Q5 F/ b# o 配置外部时钟; 配置外部触发的时钟( q! J: p2 x g/ D' Q* K 复用的是PA-0口7 x& N/ U- P; k) O$ _ 9 j6 i; y* n8 D! T" {( {6 z5 [1 Q 外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断, Q: Q7 i# L6 N. z) c' ?4 {% L # K* }7 S @) b# e 预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1 - r' B) M, ?" E8 T9 P8 @$ T 定时器中断代码总结:( J& {- [) X! W, R2 ?2 Y ( R* C* i3 l* r9 ^& o3 v( e 打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,: b: W3 v! { q' Z9 d& T 打开中断定时通道进入NVIC# K, {2 S/ x" A0 F% O* B . O% X6 @) ^- x' [, k2 q+ `/ k 配置NVIC中断优先级,打开计数器 外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发 * {( j* e+ c$ y. R0 T' r& W; C+ S 不用预分频 就直接用周期来进行判断进入中断 ———————————————— 版权声明:小聪不想秃头 如有侵权请联系删除 4 X/ e, J$ a( [/ u; Z6 D8 H |
定时器剩余通道是否可以做PWM输出呢?
基于STM32连接参数更新进程后导致断连的问题分析
基于STM32连接参数更新进程后导致断连的问题分析
基于STM32双定时器+ADC+DMA实战经验分享
基于STM32的定时器触发ADC时可能遇到的情形
【NUCLEO-U545RE-Q评测】5. 基本计时器
基于STM32的定时器不按设定超时产生中断
基于stm32用两个16位定时器级联成32位定时器经验分享
基于STM32利用TIMER事件和栈帧体验中断响应经验分享
基于STM32外部中断原理和配置代码经验分享