【STM32HAL库学习】定时器功能、时钟以及各种模式理解

一、文章目的

记录自己从学习了定时器理论->代码实现使用定时->查询数据手册,加深了对定时器的理解以及该过程遇到了的一些不清楚的知识。

请添加图片描述

  • 上图为参考手册里通用定时器框图,关于定时器各种情况的工作都在上面了,在理论学习和实际应用后再来看这张图会觉得豁然开朗。

  • 定时器基本的单元为16位自动装载寄存器ARR,16位预分频器PSC,计数器CNT,另外有4个独立通道,在我看来只有两种大功能:
    输入捕获 (如测输入信号频率、占空比、编码器)
    输出比较 (如输出PWM波控制电机、舵机)
    根据这两种功能可以将定时器配置为不同模式,比如输出pwm的PWM模式、读取编码器的Encoder模式。

二、定时器时钟来源选择(极为重要)

内部时钟(CK_INT)
内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器
外部时钟模式1:外部输入脚(TIx) ,4个独立通道的输入
外部时钟模式2:外部触发输入(ETR) ,模式1和模式2看上去非常相似
在这里插入图片描述

清楚定时器的时钟来源,后续才能理解定时器的各种模式

三、 理解最基本的定时

在时钟的驱动下,计数器CNT递增+1(默认向上计数),当到达自动重装载寄存器ARR中的目标值时,溢出清零,产生中断,循环这个过程。

HAL库实现基本定时

  • 1、打开并设置基本定时器
      1. 选择为内部时钟,即内部时钟模式
      1. 设置以下参数:定时器的时钟频率 fc=f /(PSC+1)/(ARR+1),f为单片机时钟来源。
    • 预分频器Prescaler    PSC
      
    • 自动重装寄存器CouterPeriod   ARR
      
    • 输入滤波器的频率分频InternalClockDivision(一般不需要)
      

在这里插入图片描述

  • 2、打开中断
    在这里插入图片描述
  • 3、main函数中初始化TIM2
HAL_TIM_Base_Start_IT(&htim2);

4、驱动函数中找回调函数然后在main.c中重写

__weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim); //原型
//重写
uint16_t hhRetCount=0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
   
	if(htim==&htim2){
   
		hhRetCount+=1;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值