❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。
☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋。
🌙专栏目标:实现从零基础入门51单片机和STM32单片机,力求在玩好单片机的同时,能够了解一些计算机的基本概念,了解电路及其元器件的基本理论等。
⭐️ 专栏主要内容: 主要学习STM32单片机的功能、各个模块、单片机的外设、驱动等,最终玩好单片机和单片机的外设,全程手敲代码,实现我们所要实现的功能。
🌴 专栏说明 :如果文章知识点有错误的地方,欢迎大家随时在文章下面评论,我会第一时间改正。让我们一起学习,一起进步。
💑专栏主页:/HCD8v
本学习过程参考:/383400717
STM3单片机安装软件、各种资料以及源码的路径:
链接:/s/1snD0uuTfMhchFqOMWvAiHA?pwd=asdf#list/path=%2F
提取码:asdf
链接里压缩包的解压密码:32
本大节主要学习TIM定时器的相关知识,包含八小节:
第一小节主要学习定时器基本定时的功能,第二小节是对第一小节的内容写两个程序进行练习,分别是定时器定时中断和定时器外部时钟;
第三小节主要学习定时器输出比较的功能,第四小节是对第三小节的内容写三个程序进行练习,分别是PWM驱动LED呼吸灯、PWM驱动舵机以及PWM驱动直流电机;
第五小节主要学习定时器输入捕获的功能,第六小节是对第五小节的内容写两个程序进行练习,分别是输入捕获模式测频率和PWMI模式测频率占空比;
第七小节主要学习定时器的编码器接口功能,第八小节是对第七小节的内容写一个程序进行练习,即编码器接口测速;
最终附上所有的源代码;
本小节主要是学习定时器基本定时的功能,也就是定一个时间,然后让定时器每隔这个时间产生一个中断,来实现每隔一个固定时间执行一段程序的目的;
文章目录
一、定时器基础知识1.1 TIM简介1.2 定时器类型 二、定时器分类2.1 基本定时器2.2 通用定时器2.3 高级定时器 三、定时中断基本结构四、定时器时序4.1 预分频时序4.2 计数器时序4.3 计数器无预装时序4.4 计数器有预装时序 五、 RCC时钟树一、定时器基础知识
1.1 TIM简介
定时器最基本的功能就是定时触发中断定时器本质就是一个计数器,当这个计数器的输入时一个准确可靠的基准时钟的时候,它对这个基准时钟进行计数的过程,其实就是计时的过程16位计数器、预分频器、自动重装寄存器;这几个寄存器构成了定时器最核心的部分,我们称其为时基单元1.2 定时器类型
需要了解TIM1到TIM8,每个数字都对应着什么类型的定时器RCC开启时钟的时候要注意,所使用的定时器使用的总线是APB2还是APB1这三种定时器是由高级向低级向下兼容的二、定时器分类
2.1 基本定时器
预分频器、CNT计数器、自动重装载寄存器,他们构成了最基本的计数计时电路,所以这一块电路就叫做时基电路,如下图所示 来自RCC的TIMxCLK主频一般都是72MHz预分频器可以对这个72MHz的计数时钟进行预分频;比如此寄存器给0,那就是不分频,或者说1分频,这时候输出频率=输入频率=72MHz;如果预分频寄存器给1,那就是2分频,输出频率=输入频率/2 = 36MHz;如果预分频寄存器给2,那就是3分频,输出频率=输入频率/3 = 27MHz;以此类推预分频器是16位的,所以其最大值可以写65535,也就是65536分频预分频器就是对输入的基准频率提前进行一个分频的操作计数器可以对预分频后的计数时钟进行计数,计数时钟每来一个上升沿,计数器的值就加1计数器也是16位的,所以里面的值可以从0一直加到65535,如果再加,计数器就会回到0重新开始,所以计数器的值在计时过程中会不断地自增运行,当自增运行到目标值时,产生中断,那就完成了定时的任务自动重装寄存器是一个可以存储目标值的寄存器;自动重装寄存器也是16位的,它存的就是我们写入的计数目标在运行过程中,计数器中的计数值是不断自增的,自动重装值时固定的目标,当计数值等于重装值时,计时时间就到了,就会产生中断信号,并且清零计数器;计数器自动开始下一次的计数计时 上图中折线箭头,表示这里会产生中断信号像计数值等于自动重装值产生的中断,我们一般称其为“更新中断”;这个更新中断之后就会通完NVIC,我们再配置好NVIC的定时器通道,那定时器的更新中断就能够得到CPU的响应了。图中向下的折线,表示会产生一个事件,对应的事件称为“更新事件”;更新事件不会触发中断,但可以触发内部其他电路的工作定时器的定时的总流程如下所示:
2.2 通用定时器
通用定时器中,最核心的部分还是时基单元,如上图所示,这部分结构和基本定时器是一样的;且部分的工作流程和基本定时器也是一样的;基本定时器只支持向上计数模式;通用定时器和高级定时器均支持向上计数、向下计数、中央对齐三种计数模式; 上图是内外时钟源选择和主从率触发模式的结构时钟源选择:对于基本定时器而言,定时只能选择内部时钟,也就是系统频率72MHz;对于通用定时器,时钟源不仅可以选择内部的72MHz时钟,还可以选择外部时钟,比如来自TIMx_ETR引脚上的外部时钟;
ITR和定时器的连接关系如下图所示:
ITR0到ITR3分别来自其他4个定时器的TRGO输出,具体的连接关系如下表(手册中)所示:
上表就是ITR和定时器的连接关系
TIIF_ED从CH1引脚获得时钟,这里后缀加个ED(Edge)就是边沿的意思;
小总结:外部时钟模式1的输入可以是ETR引脚、其他定时器、CH1引脚的边沿、CH1引脚和CH2引脚
;如下图所示
一般情况下,外部时钟通过ETR引脚就可以了。对于时钟而言,最常用的还是内部的72MHz的时钟如果要使用外部时钟,首选ETR引脚外部时钟模式2的输入,这一路最简单最直接;如下图:
下图部分是输出比较电路,总共有四个通道,分别对应CH1到CH4的引脚,可以用于输出PWM波形,驱动电机。
下图左边红圈部分是输入捕获电路,也是有4个通道,对应的也是CH1到CH4的引脚,可以用于测量输入方波的频率等;
中间部分的捕获/比较寄存器是输入捕获和输出公用的,因为输入捕获和输出比较不能同时使用,所以这里的寄存器是公用的,引脚也是共用的;