主频72MHz:最大计时59.65s6 {' G4 a3 w/ |! J, F8 k* ]2 n f U% i2 |2 M 3 A0 |) _* W0 a/ g: P 基本定时器: $ V! R. N, `8 {3 a% q 基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应 2 t9 h7 j- t$ l9 } y 主模式触发DAC 硬件自动化 通用定时器: 计数模式不只一种:9 [/ R8 w' n; X, g: v) v1 ]6 { 向上计数:计数器累加到自动重装载模式的值后进行中断相应 向下计数:自动重装载模式中的值向下减到0后进入中断! O( }" ^/ b9 c! F6 M2 s# h0 L$ a 中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生 + `; R1 c2 f' L Q! w8 t* Y/ b 定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO 选择外部时钟1/ O1 z' T' N2 A ^( E 定时器的使用: ETR引脚,CH1、2、3、4 边沿 其他定时器 |. z. w5 s& K8 Z8 _/ I6 b! c 9 K2 y$ r" T3 B 输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率 " k/ r4 H( ]+ }/ z, c4 f' Y 初始化定时器* i" {7 \& M7 i* } 开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组 ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器 i8 O3 r/ y; U9 Q& o 定时器中断函数:判断标志位,清除标志位' [% r* Y4 y) W0 B + ?5 ], _8 |. F4 a0 Z' Q NVIC结构体:中断通道,使能 抢占优先,相应优先级 时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0* V" f: k- h' x) s) Q# R ) K+ a+ M0 y& p5 D; D 预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0 以定时一秒为例: 预分频: 7200-1 时钟周期: 10000 定时的长度=72000000/ 预分频 / 时钟周期 # D0 g* }! }' D; ~2 Q6 \ 找到TIM的定时器库函数:5 H# q; T& B6 o$ O5 M, q 第一个:清空配置& q. Z) o9 R" L `( p 0 [2 m0 }4 B, A$ X7 H 第二个:时机单元初始化 & f* G I, M& Z: Q3 z g9 n Timebasestruct 附一个默认值% T$ p9 g, y( ]. ~3 z- ? TIM_cmd 使能定时器% O$ [- [" E3 L$ k" T! ~6 d TIM——ITconfig 使能中断 ! L# |, B8 Z6 |+ c( J 选择时钟 ' d2 A9 y2 f# f2 V 具体步骤: 0 {. t, g+ P. w# |) G 这里的分频和自动重装值需要理解一下 72M/分频/计数个数:; ~1 {9 c0 K, k8 [! R( O 72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s 0 d9 C. q' g! f2 l3 `/ l 打开定时器时清除中断的标志位1 x# Y! t5 Z. x& K Y7 U0 F% M0 a2 k 判断中断标志位然后进行相关的操作 外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断 使用的外部时钟,需要用到GPIO 配置外部时钟; 配置外部触发的时钟. {0 E9 [9 \& I! U k) `: T : f" ?0 W" w. |* Z+ W * @/ \. h* }1 L/ E4 u" d/ U: ` 复用的是PA-0口+ V! ^7 ?! A# r* S1 J4 {: H ; T( ?: u. o& | + v( H8 @ Z% ]2 \! L 外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断, 预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1" u5 ~' n. U- C* q; A2 P* | ; {$ z0 E8 O6 h5 H 定时器中断代码总结: 打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体, ! ^- t1 s# {1 @' Y4 _ \+ F: ^ 打开中断定时通道进入NVIC6 h: `; v# I2 ]( s' J/ X 配置NVIC中断优先级,打开计数器 外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发 * w. L+ M4 M* v 不用预分频 就直接用周期来进行判断进入中断' `& X+ `5 u7 z ———————————————— 版权声明:小聪不想秃头 如有侵权请联系删除 @/ [6 X* N1 D5 _5 C" V 3 b) Z3 n8 L. a; N) X4 F9 ?- u% R/ t - ]) F. ~4 X" F |
【狂欢三】STM32C031使用TIM定时器DMA方式实现PWM输出(二)
【狂欢三】STM32C031使用TIM定时器PWM输出
stm32使用定时器触发dma传输,启动dma没反应的几种情况的解决方法
基于STM32串口中断之缓存区溢出卡死经验分享
基于STM32数组越界异常中断经验分享
基于STM32之数组越界异常中断经验分享
定时器剩余通道是否可以做PWM输出呢?
基于STM32连接参数更新进程后导致断连的问题分析
基于STM32连接参数更新进程后导致断连的问题分析
基于STM32双定时器+ADC+DMA实战经验分享