
主频72MHz:最大计时59.65s![]() 0 }9 v/ E3 C: j; {' i, h: \ h: k, `% u' M) }) j- y 基本定时器: 基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应3 w; ^; q) b6 D5 W- ~# z% f 0 x/ b" r1 G5 A# ? 主模式触发DAC 硬件自动化 通用定时器: ![]() 6 B, F5 i" w+ J1 v- Z" v 计数模式不只一种: 向上计数:计数器累加到自动重装载模式的值后进行中断相应, B$ O1 I/ |6 Q$ E* L Z 向下计数:自动重装载模式中的值向下减到0后进入中断 中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生 1 u2 Q7 {; c2 B$ L" V$ c% K ![]() 定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO 选择外部时钟1 # @. z5 J3 q1 p7 K2 Y 定时器的使用: ETR引脚,CH1、2、3、4 边沿 其他定时器& G$ g; j4 q, x6 D6 M 输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率 ![]() ( p) Q q: d, o% B 初始化定时器 开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组 ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器) [- ]+ @, U: M* k! M% ` 定时器中断函数:判断标志位,清除标志位 NVIC结构体:中断通道,使能 抢占优先,相应优先级. k5 W$ n+ Z; ^5 Z 时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给03 A5 m' B& |6 A; q4 h$ |# @- B 预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0 以定时一秒为例: ! k2 A" }0 M" L 预分频: 7200-1 时钟周期: 10000 定时的长度=72000000/ 预分频 / 时钟周期! d4 D" d; j( | 找到TIM的定时器库函数: ![]() 第一个:清空配置 第二个:时机单元初始化! n1 o1 n: |9 j Timebasestruct 附一个默认值 6 Y( f& V% y( B( p9 K$ [ TIM_cmd 使能定时器4 l6 G& v A+ M+ y9 S - R. ?" B8 S+ F7 C/ v9 E5 |. Z ![]() 7 I9 `2 m, Z+ Z# X TIM——ITconfig 使能中断0 d6 [- Z7 \0 B( { % [2 j5 Z2 |9 ?3 k- | ![]() 选择时钟 ! T! w# c4 h5 ^' Z2 i9 T! N9 G2 W 具体步骤:3 v0 L, x2 w) K 4 [4 Y: w' v* j ![]() 这里的分频和自动重装值需要理解一下7 @. n0 ~6 A! b4 S ![]() + S3 d6 O3 \6 I5 Q. x+ F2 q' S 72M/分频/计数个数:5 M. \* G: X* ^ 72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s 1 w0 `5 O5 B" G R0 p9 F ![]() 5 Q! A K) d" d6 ]' @) ?. ] 打开定时器时清除中断的标志位 & e* ?# }3 y- x$ z' N b: s0 c ![]() 判断中断标志位然后进行相关的操作- T4 K* e* `) O2 B 1 e9 X2 ~* f7 | 外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断 - @0 D7 C8 R4 l+ z* { 使用的外部时钟,需要用到GPIO 配置外部时钟; 配置外部触发的时钟8 ~" P: }: g6 K* ^6 H( ?4 R$ {( u$ `4 y2 \, A - R/ m: _4 @5 e/ L6 b) z ![]() 2 i8 }% N3 ]* v9 Z0 N 复用的是PA-0口 n8 s0 M, n# |' F- K- { ![]() ![]() 外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断, , {- E( R& g! | l 预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1 , I3 Q P( }6 @* U- n1 D; ?2 \2 U 定时器中断代码总结:: a y2 ^! M3 l 打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体, 打开中断定时通道进入NVIC. T# E3 ~' x0 `; r) ~3 S7 a) B 配置NVIC中断优先级,打开计数器; I6 m8 |0 Q" M/ T* D/ L2 u7 d6 f+ s) D ' U( n" G; E) S* B* {/ r 外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发5 X) m) k/ C; X: L+ R 6 R6 o- y. `8 s8 | M. A, H% O' |! R( i 不用预分频 就直接用周期来进行判断进入中断 ———————————————— 版权声明:小聪不想秃头; q2 i2 u. }; N! j 如有侵权请联系删除" q4 w c" O; z T# U9 W2 p ( n. O0 ^* Y k. t8 o3 ~1 ^9 G0 h |
基于定时器捕获测量脉宽的应用示例
狂欢三】STM32C031使用TIM定时器DMA方式实现WS2812彩灯输出(三)
【狂欢三】STM32C031使用TIM定时器DMA方式实现PWM输出(二)
【狂欢三】STM32C031使用TIM定时器PWM输出
stm32使用定时器触发dma传输,启动dma没反应的几种情况的解决方法
基于STM32串口中断之缓存区溢出卡死经验分享
基于STM32数组越界异常中断经验分享
基于STM32之数组越界异常中断经验分享
定时器剩余通道是否可以做PWM输出呢?
基于STM32连接参数更新进程后导致断连的问题分析