
主频72MHz:最大计时59.65s& z5 I6 H1 p% ~; b ' l6 Y; U+ j" O' u. @# B ![]() : J8 G' j( K$ O( t " Y/ [( m5 ^9 |+ I 基本定时器: , [+ u) N) J, ], ~4 W- P7 q 基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应) s- y [2 r' J 主模式触发DAC 硬件自动化7 ^: l# n& o% Y/ e 2 l+ I' a, U3 ?, P" S 通用定时器: 4 W5 L! n7 I8 i+ L9 X5 U ![]() " V; w5 p. \2 r0 z! p' P+ j 计数模式不只一种:0 }* q' V; _$ D: @ 向上计数:计数器累加到自动重装载模式的值后进行中断相应 向下计数:自动重装载模式中的值向下减到0后进入中断' j+ D" ^: h2 X7 c6 q" z- O0 c8 u 中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生9 H+ z% L+ ]) I' L, A2 a4 H 9 F! @0 U' L8 F& n# @ ![]() 定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO 选择外部时钟1: ?1 a+ n. F8 I , w9 L4 |- \/ A A 定时器的使用: ETR引脚,CH1、2、3、4 边沿 其他定时器 输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率 1 P0 ]# Q! ?* y$ A" W# K0 A4 g ![]() 0 ]: J* h; `9 N) K1 w( [6 Q9 ? 初始化定时器 开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组 ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器% R1 u- w; F. F 定时器中断函数:判断标志位,清除标志位) M9 s% S- n. O$ K# R/ H NVIC结构体:中断通道,使能 抢占优先,相应优先级& j: ~: Z7 ~9 J0 Y 5 j# ^0 U! U7 P 时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0- c% \/ Q- [) n3 T. o( P 预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0 以定时一秒为例: # E' C# _6 v+ S: L- G 预分频: 7200-1 时钟周期: 10000 定时的长度=72000000/ 预分频 / 时钟周期% l2 g) j/ V) e" O 找到TIM的定时器库函数: $ @! f, u3 m- f: X" z f8 v ![]() Q9 L+ a6 v$ N3 q; m0 Q 第一个:清空配置 第二个:时机单元初始化9 {* ]8 i/ c8 Z( D! s W9 G3 k6 \ Timebasestruct 附一个默认值 6 }4 F/ A5 }0 u% a( x TIM_cmd 使能定时器 9 u: J6 h' `5 Y; V9 m5 g) [ ![]() / p) J3 O/ f$ @" ] z8 c TIM——ITconfig 使能中断. W/ c; m2 p' t6 ~3 H8 _2 I* ?& v 9 d0 i1 i- i [) _ ![]() 3 V' w- g+ {# `+ _& i! y; z$ P- | 选择时钟 3 `7 u5 n) x6 O' b* |# X5 X 具体步骤:% m4 R5 V/ {# L) C) S3 r ![]() - b( S- `. o- _5 r! s" { 这里的分频和自动重装值需要理解一下 * x8 ]* b9 J! I, \+ h: D8 { ![]() 72M/分频/计数个数:7 q: a, p, d- o2 ^" |, x% R # j8 |1 @7 V" g% \9 ^/ F3 Z! x 72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s . b; T) k! J1 u _' p( ]7 j ![]() 4 |" S, F$ \. V, E4 e 打开定时器时清除中断的标志位, |6 r/ `. @- {9 g1 X3 k" b6 E# L " E- o4 a8 }6 \ W# s T ![]() 判断中断标志位然后进行相关的操作 % R- ?& ]% M+ c+ N z8 E |1 D3 n 外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断. w9 x$ u; |* w- D* ^ 使用的外部时钟,需要用到GPIO 7 E6 ^/ F+ {& K/ O& l, F0 [9 H1 _ 配置外部时钟; 配置外部触发的时钟, j; X, o+ v; H1 @* Q& U3 a9 D" a ![]() 复用的是PA-0口! S+ j3 ?- @; O. n0 D! g ![]() / e# m& D. o$ b1 U. d/ | ![]() 外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断, 预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1& D) z5 |3 u! J6 g" g- n% @ 3 W3 D# Q0 V- _% z5 s! V0 l 定时器中断代码总结: , ^- D6 |4 F$ N. c% T 打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体, 7 A9 N% g' ^# q. n5 }8 F 打开中断定时通道进入NVIC5 c5 N. o: T% g( p' @% D 配置NVIC中断优先级,打开计数器 & W2 E) |) C6 }: h 外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发 ' [; ], h: J9 i2 O5 V7 a4 P# S/ T 不用预分频 就直接用周期来进行判断进入中断6 @; x( C# M9 k& C% u ————————————————& @! `3 V3 Z+ m* g: s 版权声明:小聪不想秃头. Z5 M: j% h6 Y& Z 如有侵权请联系删除 3 n2 |$ y- t5 R1 E- x |
狂欢三】STM32C031使用TIM定时器DMA方式实现WS2812彩灯输出(三)
【狂欢三】STM32C031使用TIM定时器DMA方式实现PWM输出(二)
【狂欢三】STM32C031使用TIM定时器PWM输出
stm32使用定时器触发dma传输,启动dma没反应的几种情况的解决方法
基于STM32串口中断之缓存区溢出卡死经验分享
基于STM32数组越界异常中断经验分享
基于STM32之数组越界异常中断经验分享
定时器剩余通道是否可以做PWM输出呢?
基于STM32连接参数更新进程后导致断连的问题分析
基于STM32连接参数更新进程后导致断连的问题分析