自学STM32第七天——基本定时器(stm32系统定时器)
定时器的内容比较多,然后最近一周工作太忙,中断了学习,还好这个周末有时间了,总结一下今天所学的吧。
定时器简单的说其实就是用来延时的,之前用到的delay函数也是用来延时的,为什么还要学习定时器呢?因为delay延时函数是纯软件的延时,延时不精准,而且是让CPU死等,效率不高。要知道毫秒级别的延时,CPU能干多少事情啊,太浪费了。
定时器的原理
使用精准的时基,通过硬件的方式,实现定时功能;定时器核心就是计数器。
STM32定时器分类
基本定时器
基本定时器:没有输入输出通道,常用作时基(定时功能)。STM32-F1基本定时器——TIM6/TIM7。
主要特性:16位递增计数器(计数值:0~65535),16位预分频器(分频系数:1~65536),可用于触发DAC,在更新事件(计数器溢出)时,会产生中断/DMA请求。
STM32定时器的技术模式及溢出条件
定时器溢出时间计算方法
Tout 是定时器溢出时间
Ft 是定时器的时钟源频率
ARR 是自动重装载寄存器的值
PSC 是预分频器寄存器的值
基础定时器中断实验的配置步骤
相关HAL库函数
关键结构体
typedef struct
{
TIM_TypeDef *Instance; /* 外设寄存器基地址 */
TIM_Base_InitTypeDef Init; /* 定时器初始化结构体*/
...
}TIM_HandleTypeDef;
typedef struct
{
uint32_t Prescaler; /* 预分频系数 */
uint32_t CounterMode; /* 计数模式 */
uint32_t Period; /* 自动重载值 ARR */
uint32_t ClockDivision; /* 时钟分频因子 */
uint32_t RepetitionCounter; /* 重复计数器寄存器的值 */
uint32_t AutoReloadPreload; /* 自动重载预装载使能 */
} TIM_Base_InitTypeDef;
以上是对第七天学习的了内容做了大概的总结,由于我个人选择的是STM32F1系列的开发进行学习,所总结的大部分内容仅限于F1系列使用。