【STM32】入土笔记——定时器攻略
程序员文章站
2022-06-08 16:37:30
...
欢迎来到精神小火君的科技主义教室!
记录STM32入土路上的艰苦旅程,加油UPUPUP!
@Author: 精神小????君!
????想要我的财宝吗?想要的话可以全部给你,去找出来吧,这世上所有的一切都在那里!
????
ONE PIECE地址: ✨ 精神小????君的博客✨
/*
* _oo0oo_
* o8888888o
* 88" . "88
* (| -_- |)
* 0\ = /0
* ___/`---'\___
* .' \\| |// '.
* / \\||| : |||// \
* / _||||| -:- |||||- \
* | | \\\ - /// | |
* | \_| ''\---/'' |_/ |
* \ .-\__ '-' ___/-. /
* ___'. .' /--.--\ `. .'___
* ."" '< `.___\_<|>_/___.' >' "".
* | | : `- \`.;`\ _ /`;.`/ - ` : | |
* \ \ `_. \_ __\ /__ _/ .-` / /
* =====`-.____`.___ \_____/___.-`___.-'=====
* `=---='
*
*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* 佛祖保佑 永不宕机 永无BUG
*
* 佛曰:
* 写字楼里写字间,写字间里程序员;
* 程序人员写程序,又拿程序换酒钱。
* 酒醒只在网上坐,酒醉还来网下眠;
* 酒醉酒醒日复日,网上网下年复年。
* 但愿老死电脑间,不愿鞠躬老板前;
* 奔驰宝马贵者趣,公交自行程序员。
* 别人笑我忒疯癫,我笑自己命太贱;
* 不见满街漂亮妹,哪个归得程序员?
*/
文章目录
前言
已经学习过一边STM32,但没有系统的记录下来,导致很多东西都是只知道名字但不了解具体是什么原理。借用这个暑假在详细记录一下STM32的入土实况!!加油以下是记录一些定时器的的相关知识内容,下面案例可供参考
一、定时器分类
- 基本定时器
基本定时器 TIM6 和 TIM7 是一个 16 位的只能向上计数的定时器,只能定时,没有外部 IO。 - 通用定时器
通用定时器 TIM2/3/4/5 是一个 16 位的可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕捉,每个定时器有四个外部 IO。 - 高级定时器
高级定时器 TIM1/8是一个 16 位的可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕捉,还可以有三相电机互补输出信号,每个定时器有 8 个外部 IO。
二、基本定时器
2.1 基本定时器功能介绍
TIM6 和 TIM7 是STM32的一个 16 位的只能向上计数的定时器,只能定时,没有外部 IO。
基本定时器的核心是时基(时基的配置),不仅基本定时器有,通用定时器和高级定时器也有时基的配置。
下面是基本定时器功能框图:
- ① 时钟源
确定定时器的时钟源,即内部时钟CK_INT,经 APB1 预分频器后分频提供,如果APB1 预分频系数等于 1,则频率不变,否则频率乘以 2,库函数中 APB1 预分频的系数是 2,即 PCLK1=36M,所以定时器时钟 TIMxCLK=36*2=72M。 - ② 计数器时钟
通过PSC预分频器来计算计数器的时钟,公式为:计数器时钟频率(CK_CLK) = 定时器时钟源/(PSC+1) - ③ 计数器
CNT为一个16位计数器,基本定时器只能向上计数,最大值为65535。当计数器达到ARR(自动重装载寄存器)的数值时清零,配合计数器时钟可以计算周期与延时时间,可以用来计算中断时间。 - ④ 定时器时间的计算
产生一次中断或者更新的时间为:
2.2 定时器时基初始化
定时器时基初始化:TIM_TimeBaseInitTypeDef()
// 定时器基本初始化结构体
typedef struct {
uint16_t TIM_Prescaler; // 预分频器
uint16_t TIM_CounterMode; // 计数模式
uint32_t TIM_Period; // 定时器周期
uint16_t TIM_ClockDivision; // 时钟分频
uint8_t TIM_RepetitionCounter; // 重复计算器
} TIM_TimeBaseInitTypeDef;
-
TIM_Presacler: 定时器预分频器
时钟源经该预分频器才是定时器时钟,可设置范围为 0 至 65535,实现 1 至 65536 分频。设置为(72-1)时即为1Mhz。 -
TIM_CounterMode :定时器计数方式
可是在为向上计数、向下计数以及三种中心对齐模式 -
TIM_Period:定时器周期
设置的为自动重装载计数器的数值ARR,可设置范围0~65535 -
TIM_ClockDivision:时钟分频
设置定时器时钟 CK_INT 频率与死区发生器与数字滤波器采样时钟频率分频比 -
TIM_RepetitionCounter:重复计数器 (只有高级定时器有)
属于高级控制寄存器专用寄存器位,利用它可以非常容易控制输出 PWM 的个数
三、通用定时器
对于STM32F103ZET6来说,通用定时器为:TIM2、 TIM3、 TIM4 和 TIM5
下面是通用定时器的基本功能:
关于定时器的时钟源(4个):
1) 内部时钟(CK_INT)
2) 外部时钟模式 1:外部输入脚(TIx)
3) 外部时钟模式 2:外部触发输入(ETR)
4) 内部触发输入(ITRx):使用 A 定时器作为 B 定时器的预分频器(A 为 B 提供时钟)。
3.1 通用定时器输出比较模式初始化
先介绍一下输出比较模式的初始化和一些参数设置
输出比较模式:TIM_OCInitTypeDef
1 typedef struct {
2 uint16_t TIM_OCMode; // 比较输出模式
3 uint16_t TIM_OutputState; // 比较输出使能
4 uint16_t TIM_OutputNState; // 比较互补输出使能
5 uint32_t TIM_Pulse; // 脉冲宽度
6 uint16_t TIM_OCPolarity; // 输出极性
7 uint16_t TIM_OCNPolarity; // 互补输出极性
8 uint16_t TIM_OCIdleState; // 空闲状态下比较输出状态
9 uint16_t TIM_OCNIdleState; // 空闲状态下比较互补输出状态
10 } TIM_OCInitTypeDef;
-
TIM_OCMode:比较输出模式选择
总共有八种,常用的为 PWM1/PWM2 -
TIM_OutputState:比较输出使能
决定最终的输出比较信号 OCx 是否通过外部引脚输出 -
TIM_OutputNState:比较互补输出使能
决定 OCx 的互补信号 OCxN 是否通过外部引脚输出。通用定时器没有。 -
TIM_Pulse:比较输出脉冲宽度
实际设定比较寄存器 CCR 的值,决定脉冲宽度。可设置范围为 0 至 65535。与PWM模式选择有关。参照下图:
-
TIM_OCPolarity:比较输出极性
可选 OCx 为高电平有效或低电平有效。它决定着定时器通道有效电平。它设定 CCER 寄存器的 CCxP 位的值。 -
TIM_OCNPolarity:比较互补输出极性
可选 OCxN 为高电平有效或低电平有效。它设定 TIMx_CCER 寄存器的 CCxNP 位的值。 -
TIM_OCIdleState:空闲状态时通道输出电平设置
可选输出 1 或输出 0,即在空闲状态(BDTR_MOE 位为 0)时,经过死区时间后定时器通道输出高电平或低电平。它设定CR2 寄存器的 OISx 位的值。 -
TIM_OCNIdleState:空闲状态时互补通道输出电平设置
可选输出 1 或输出 0,即在空闲状态(BDTR_MOE 位为 0)时,经过死区时间后定时器互补通道输出高电平或低电平,设定值必须与 TIM_OCIdleState 相反。它设定是 CR2 寄存器的 OISxN 位的值。
在使用通用定时器时不需要配置这么多参数,例如进行PWM输出时只需要配置如下参数
//初始化PWM模式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
TIM_OC2Init(TIM3, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3 OC2
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的预装载寄存器
TIM_Cmd(TIM3, ENABLE); //使能TIM
3.2 关于定时器输出引脚的定义与重映射
下面是基本定时器功能框图:
-
TIM1:
-
TIM2:
-
TIM3:
-
TIM4:
四、总结
- 定时器的使用极大的方便了PWM的输出,为调试舵机等提供了便利
- 通过定时器的使用,更好的理解STM32的工作原理,程序四路更加清晰。
- 关于高级定时器,在以后使用的过程中再进行补充。