
主频72MHz:最大计时59.65s& F9 @) u+ O" R& G+ |' B + ` ?0 ?2 I7 l" b$ w4 G ![]() + h6 o) b/ c6 K9 s0 F4 b- x 基本定时器:6 u1 a& d& @$ t8 M, ?3 k 基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应& Q# C4 ]! F8 u& t 主模式触发DAC 硬件自动化 通用定时器: ; v: @- |% `: b2 t* K* o ![]() 7 t8 I7 f% w# a" ~ 计数模式不只一种:* ~) J/ H/ i) \9 J/ j9 A 向上计数:计数器累加到自动重装载模式的值后进行中断相应7 i% \' W1 b2 y& U 向下计数:自动重装载模式中的值向下减到0后进入中断 中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生; v/ W* y7 P" A1 y1 v; S! m; p ![]() 9 K [ ?9 t. ^ 定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO 选择外部时钟1 {# V9 N9 U2 M Q1 X 定时器的使用: ETR引脚,CH1、2、3、4 边沿 其他定时器 输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率 ![]() 初始化定时器 开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组 ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器! ^+ p% C! J5 A# Q 定时器中断函数:判断标志位,清除标志位- d' u8 w& w! x; p+ {' Y, Y/ ^ NVIC结构体:中断通道,使能 抢占优先,相应优先级/ Z: g3 y! |) W5 |8 z5 Q 时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0 7 Q& Z- q4 n" } 预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0 以定时一秒为例: 预分频: 7200-1 时钟周期: 10000 定时的长度=72000000/ 预分频 / 时钟周期( n% Y& p, d7 g* e. ? 找到TIM的定时器库函数:7 `# I M9 v+ v" j* D" P6 W ![]() . s! t" t" F# D% ~4 ]& P# K4 Q ; ^ G3 s' l( e4 I. b0 y- ` 第一个:清空配置0 Q2 ?/ j+ T8 e8 L8 N 第二个:时机单元初始化 Timebasestruct 附一个默认值 TIM_cmd 使能定时器, D$ a5 A% ^2 |0 \' b x3 h P c- {" K) X) H* Y ![]() TIM——ITconfig 使能中断- P9 M" P" e9 V: s; @! p/ M* W, O 5 ?% G' Z- B- [8 \7 x8 F5 A, { ![]() 选择时钟 % B4 R' V2 @) ^8 R' B 具体步骤: 9 Z; _+ l: `( e# f6 D. z, z$ h ![]() 9 m8 m- ~1 j) ]2 ~: `* u 这里的分频和自动重装值需要理解一下 ![]() 72M/分频/计数个数: 72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s" v8 e$ P: \2 y: ]7 E2 n & J+ D; a+ u5 ]1 S* C, I4 U5 t/ p ![]() 打开定时器时清除中断的标志位 * {6 P/ g0 Y6 x$ n ![]() 判断中断标志位然后进行相关的操作' S/ M, ~# ^1 V# v3 R/ E% H 外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断 使用的外部时钟,需要用到GPIO4 q# @8 I4 u4 ~( {( m4 W & a) z$ B) m( W* V 配置外部时钟; 配置外部触发的时钟 6 i: r2 p/ h$ H) t2 T ![]() 复用的是PA-0口 ![]() ) C2 J* [! ]2 ?. ^ t. J/ b ![]() 外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断, 预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1 [" G; r2 H$ \, ], B) i 定时器中断代码总结:' o1 f0 u/ ]+ v; x 1 F& n* B6 G5 n* @* ?- ~ 打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,+ W8 {8 P7 n7 k: l: l , C% q8 N! g: V8 g; |$ F1 C 打开中断定时通道进入NVIC( J! e, o0 d% }2 m; u: ~ ! ]: e. X$ L1 P. U0 p; p$ Y+ L 配置NVIC中断优先级,打开计数器 " K4 P0 U! T7 l* s5 w7 O 外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发 4 F8 n" V4 a, l V2 ~8 q+ x 不用预分频 就直接用周期来进行判断进入中断 ————————————————( ], B9 F6 P5 T) ^1 \ 版权声明:小聪不想秃头 如有侵权请联系删除2 B4 E4 d+ m7 g) S2 p$ N. T ; Y5 z7 l5 i) y, w3 H0 C |
基于定时器捕获测量脉宽的应用示例
狂欢三】STM32C031使用TIM定时器DMA方式实现WS2812彩灯输出(三)
【狂欢三】STM32C031使用TIM定时器DMA方式实现PWM输出(二)
【狂欢三】STM32C031使用TIM定时器PWM输出
stm32使用定时器触发dma传输,启动dma没反应的几种情况的解决方法
基于STM32串口中断之缓存区溢出卡死经验分享
基于STM32数组越界异常中断经验分享
基于STM32之数组越界异常中断经验分享
定时器剩余通道是否可以做PWM输出呢?
基于STM32连接参数更新进程后导致断连的问题分析