![shequ.stmicroelectronics.cn](./template/st_v1/static/img/logo2.png)
主频72MHz:最大计时59.65s + ] X0 Q, u* i( i3 l, `' u ![]() 9 N g* N: j9 E6 n: ] 基本定时器:5 R/ ^! N# b4 R( f, `3 a 6 q% Y. }. C4 h8 x9 g% K! s+ _ 基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应 3 n6 q& G9 M) }) e: t+ V; q 主模式触发DAC 硬件自动化 " V5 u' V4 e4 T 通用定时器:2 s1 P8 O3 @' w; J' \$ G ![]() 计数模式不只一种: 向上计数:计数器累加到自动重装载模式的值后进行中断相应% ~3 A( v1 y+ d1 {+ x. V7 f 向下计数:自动重装载模式中的值向下减到0后进入中断) l d3 V$ `2 l* n2 A 中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生 3 s4 ] d( \+ T4 m% p5 N ![]() 3 |. m! D% f7 g! b: E4 A 定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO 选择外部时钟1% ?3 m6 ~) F5 [, i8 T$ C/ D ) ^9 Z3 F! `4 p E% ? 定时器的使用: ETR引脚,CH1、2、3、4 边沿 其他定时器 3 v. \% G4 G3 {* C6 g 输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率 9 `! |+ e, k/ U$ i+ l% f+ s' p ![]() 初始化定时器 开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组 ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器 定时器中断函数:判断标志位,清除标志位) K: y4 F$ l( A; { 0 P! p/ `5 \8 y- l NVIC结构体:中断通道,使能 抢占优先,相应优先级 S y6 J6 O) K l6 U2 q! L 时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0 预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0 以定时一秒为例:) g/ L; B8 V5 I( c: V $ _5 y' A0 w" i" N' G9 u9 ^ 预分频: 7200-1 时钟周期: 10000 定时的长度=72000000/ 预分频 / 时钟周期5 y% @, y3 Q. x) n* l 找到TIM的定时器库函数: ![]() H7 y8 q; `/ V' ~' y 第一个:清空配置 % |7 F2 ^/ }+ X/ _/ F 第二个:时机单元初始化 0 y8 R: H4 d" g U Timebasestruct 附一个默认值 TIM_cmd 使能定时器 % Q% ^8 ]/ U: n# y3 l ![]() TIM——ITconfig 使能中断 8 j7 F) c4 C4 N8 W+ W1 U ![]() 选择时钟- F$ S& o2 v8 u8 e( R$ V# v 4 ^1 e4 \$ B$ N+ ~ 具体步骤:: h4 }# H _& |) M1 R- C% I8 ^ ![]() 3 ]1 a: U. H5 K% x 这里的分频和自动重装值需要理解一下 j: L b& w& Q' g) G# D ![]() 72M/分频/计数个数:+ H7 H5 c# V' D# L 72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s7 E: Y, z+ U% ]- j ![]() 8 A- b# z3 _. Z4 o/ d, a# @% v 打开定时器时清除中断的标志位 ' r9 c+ I: ]$ O* Z7 [' n2 g& M ![]() 判断中断标志位然后进行相关的操作. F z( H v* j2 t3 B$ ] 外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断 9 O' U. p- _% q$ V 使用的外部时钟,需要用到GPIO& H v X O& T& @8 ^" E5 \6 ~ 配置外部时钟; 配置外部触发的时钟 - E) ]& y- [0 ?! k2 A5 z2 v$ I ![]() 6 H3 x7 ~, j/ q1 G2 [" h# O, F 复用的是PA-0口 ; I. |0 y" r+ v ![]() ![]() 外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,& H* [4 z1 f4 \" X; s% { ( {, J/ ^, {+ _ 预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1 ; d5 c5 S. V0 X5 [& F; l 定时器中断代码总结:+ B6 Y$ q# r+ I a5 {$ B 1 ^) I9 w9 [2 S) i. V 打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,7 X1 c. D9 b: f, Z4 @4 S# N4 \% P# p 打开中断定时通道进入NVIC 配置NVIC中断优先级,打开计数器 外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发 不用预分频 就直接用周期来进行判断进入中断 ———————————————— 版权声明:小聪不想秃头 如有侵权请联系删除9 e# J- a e; I( Q* c7 V s9 [ / Y$ s5 s) q& U9 q* |9 R" g- i Y% C7 p4 ~( y1 {2 w+ j( Z' h / G/ U8 z+ M2 T" v* c |