嵌入式-定时器的时基单元,自制延迟函数-Day21
一、时基单元
1.定时器简介
其实就是片上外设,然后分为3种,逐层阉割(高级的功能最全)
功能:其实单片机的手表,涉及到时间的都会用到这个片上外设
f1系列有14个定时器,这里的单片机选择了其中的4个
2. 时基单元的基本结构
时钟来源:来自时钟树下的时钟信号或者从模式控制器
降频PSC:降频 信号
计数CNT:记录脉冲信号次数
定时周期:使用到自动重装计时器ARR(封顶值,同时也代表步数/次数,比如0-59,60值,走59步),周期为ARR+1(原因0开始到4的5个数即四步,再走一步就因超限归0,所以得加1)
重复计数器RCR:只用于高级定时器,默认0,既而为1,设置值会控制几个周期触发一次update
解答定时器的定时功能
以手表举例,自带晶振发信号,分频,走59步,T=0,RCR为0,重复计数0+1,最后update
3.上计数、下计数和中心对齐
中心对齐特殊:因周期不同其他二者
4.时钟的来源
知识补充
分辨率:表盘一格(一次脉冲的t)
该时钟树下不管是哪个定时器,最后都是72MHz
5.寄存器预加载
带有背景灰色的都是带有影子寄存器(可以实现寄存器预加载)
往RCR写值:原理是先写入值到影子寄存器,然后当前面一个周期(或者k周期)完,触发update,影子寄存器写值到活动寄存器。
这里看,无影子寄存器,突然改变ARR(7-3),5始终不会等于3,走到当前2^16寄存器极限,才归0。造成无限递增
有影子寄存器,突然改变ARR,先影响影子寄存器值,当脉冲数走顶峰归0,触发update,影子往活动写值,因为从0开始,必定不会无限递增
二、自制延迟函数
单片机自带Delay是系统自带的:系统滴答计时器 SysTick,这里使用自制
原理:自定义的延迟接收:延迟时间触发中断。
每ms触发一次中断,中断响应函数触发:时间以ms++,
1.获取单片机开机后的当前步数和当前走了多少时间
一开机就是0步,之后开始++。
设置分辨率1us,周期为1ms,1ms触发一次update中断。
每次中断设置currentTick+1,即每ms下currentTick+1。