STM32定时器应用详解
TIM定时器
1、概述
- 基本定时器
- 从基准时钟,到预分频器,到计数器
- 计数器技术自增,同时不断的与自动重装载寄存器进行比较
- 相等时,也就是计时时间到,这时会产生更新中断和一个更新事件
- 定时中断基本结构
- 中间时基单元:预分频器、计数器、自动重装寄存器
- 下面运行控制 就是控制寄存器的一些位,比如启动、停止、向上或向下计数,操作这些寄存器就能控制实际单元的运行了
- 左边是为时基单元提供时钟的部分
- 可以选择由RCC提供的内部时钟
- 可以选择ETR引脚提供的外部时钟模式二
- 还可以选择出发输入当作外部时钟 即外部时钟模式一—-对应的有ETR外部时钟、ITR其他定时器、TLx输入捕获通道
- 编码器模式一般是编码器独用,普通时钟用不到
- 右边这里就是定时时间到产生更新中断后的信号去向,在这里如果是高级定时器的话还会多一个重读计数器
- 这里中断信号会先在状态寄存器里置一个中断标志位,这个标志位会通过中断输出控制,到NVIC申请中断
- 有这个中断输出控制,是因为这个定时器模块有很多地方都要申请中断,
- 不仅更新会产生中断,上面触发信号也会申请中断 ,还有下面的输入捕获输出比较也会申请中断 ,所以这些中断都要经过中断输出控制 ,如果需要这个中断就允许 ,如果不需要那就禁止,简单来说这个中断输出控制就是中断的允许位,如果需要某个中断就允许一下
2、编码步骤
- RCC开启时钟
- 选择时基单元时钟源,对于定时中断我们就选择内部时钟源
- 配置时基单元,包括预分频器、计数器、自动重装器
- 配置输出终端控制,允许更新中断输出到NVIC
- 配置NVIC,在NVIC中打开定时器中断的通道,并分配一个优先级
- 运行控制
- 使能计数器,不然不会运行,当计数器使能之后,计数器开始计数,当计数器更新时,触发中断
- 写一个定时器中断函数,这样这个定时器中断函数每隔一段时间就能自执行一次
3、库函数介绍
void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);
void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t
void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,uint16_t TIM_ICPolarity, uint16_t ICFilter);
void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);
void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);

4、编码步骤详解
- 开启定时器2的时钟 APB1
- 选择时基单元的时钟 TIM_InternalClockConfig
- 初始化时基单元
- 开启中断控制,开启了中断到NVIC的通路
- 配置NVIC
- NVIC优先级分组
- 初始化NVIC
- 使能定时器
- 初始化完成之后
- 写中断函数
- 检查中断标志位
- 清除中断标志位
- 定时器外部时钟->在上面的代码基础上进行修改
- 时钟部分,就不使用内部时钟了
- 使用TIM_ETRClockMode2Config
- 开启GPIO的时钟
- 初始化GPIO
作者:FLYQR