STM32笔记 (十)定时器(基本定时器)利用基本定时器实现毫秒延时

简介

定时器的主要功能是用来定时,不过STM32中有多种类型的定时器-----基本定时器、通用定时器、高级控制定时器,以STM32F103ZET6为例,有有 8 个16位定时器,其中 TIM6 和 TIM7 是基本定时器TIM2/3/4/5是通用定时器TIM1/8是高级定时器,本篇主要讲基本定时器。

寄存器

  • TIM6 和TIM7 控制寄存器 1(TIMx_CR1)
  • TIM6 和TIM7 控制寄存器 1(TIMx_CR1)
  • TIM6 和TIM7 控制寄存器 1(TIMx_CR1)
  • TIM6 和TIM7 状态寄存器(TIMx_SR)
  • TIM6 和TIM7 事件产生寄存器(TIMx_EGR)
  • TIM6 和TIM7 计数器(TIMx_CNT)
  • TIM6 和TIM7 计数器(TIMx_CNT)
  • TIM6 和TIM7 计数器(TIMx_CNT)

功能框图

在这里插入图片描述

  • 这里的CK_CNT也就是计数器时钟,是TIMxCLK经过PSC预分频器分频后得到的,PSC预分频器可以设置的分频范围为: 1~65536 ,具体计算方式为: CK_CNT=TIMxCLK/(PSC+1),注意这里的PSC要加一,因为不可能有0分频存在,至少是1分频
  • 对于基本定时器只能向上计数,也就是只能从小加到大,加到多少主要由自动重装载寄存器 ARR决定,ARR是一个16位的寄存器,里面装着计数器能加到的最大值,如果计数器加到了这个值并且使能了中断的话就会产生溢出中断(更新中断)
    在这里插入图片描述
  • 由于基本定时器向上计数是从0开始的,因此计数的初始值为0,所以我们设置ARR的值的时候要减去1,也就是ARR-1,比如我们要计数十次,那么久设置ARR的值为9,因为计数是从0开始的,0计数到9就是计数了十次

定时时间的计算

每次计数加1的时候所需要的时间为:1/CK_CNT,而CK_CNT=TIMxCLK/(PSC+1),对于STM32F1系列,基本定时器的TIMxCLK的频率为72MHz,为了方便计算,我们把PSC+1设置成72,刚好可以得到一个整数的CK_CNT,这时候每一次计数+1所需的时间为:1us,一微秒,所以如果要计时1ms,就把ARR的值设置成999,也就是1us计数一千次

基本定时器的结构体

 typedef struct {
   
 
	TIM_Prescaler // PSC分频因子
	
	TIM_CounterMode // 计数模式,基本定时器只能向上计数,不用设置
	
	IM_Period //自动重转载寄存器ARR的值
	
	TIM_ClockDivision // 外部输入时钟分频因子,基本定时器没有,其他都有
	
	TIM_RepetitionCounter // 
  • 1
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值