🚀write in front🚀
🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝💬本系列哔哩哔哩江科大STM32的视频为主以及自己的总结梳理📚
🚀Projeet source code🚀
💾工程代码放在了本人的Gitee仓库:iPickCan (iPickCan) - Gitee.com
引用:
STM32入门教程-2023版 细致讲解 中文字幕_哔哩哔哩_bilibili
Keil5 MDK版 下载与安装教程(STM32单片机编程软件)_mdk528-CSDN博客
STM32之Keil5 MDK的安装与下载_keil5下载程序到单片机stm32-CSDN博客
0. 江协科技/江科大-STM32入门教程-各章节详细笔记-查阅传送门-STM32标准库开发_江协科技stm32笔记-CSDN博客
江科大STM32学习笔记(上)_stm32博客-CSDN博客
STM32学习笔记一(基于标准库学习)_电平输出推免-CSDN博客
术语:
英文缩写 | 描述 |
GPIO:General Purpose Input Onuput | 通用输入输出 |
AFIO:Alternate Function Input Output | 复用输入输出 |
AO:Analog Output | 模拟输出 |
DO:Digital Output | 数字输出 |
正文:
0. 概述
从 2024/06/12 定下计划开始学习下江协科技STM32课程,接下来将会按照哔站上江协科技STM32的教学视频来学习入门STM32 开发,本文是视频教程 P2 STM32简介一讲的笔记。
定时器共四个部分,分为八个小节笔记。本小节为第一部分第一节。
🌳在第一部分,是定时器的基本定时的功能:定时中断功能、内外时钟源选择
🌳在第二部分,是定时器的输出比较功能,最常见的用途是产生PWM波形,用于驱动电机等设备
🌳在第三部分,是定时器的输入捕获功能和主从触发模式,来实现测量方波频率
🌳在第四部分,是定时器的编码器接口,能够更加方便读取正交编码器的输出波形,编码电机测速
1.🚀STM32 TIM定时器简介
TIM(Timer)定时器,定时触发中断
⏱️定时器本质上就是一个计数器
定时器可以对输入的时钟进行计数(在stm32中定时器的基准时钟一般是主频72MHz,如果对72MHz记72个数,那就是1MHz也就是1us的时间(72MHz就是1秒记72M个数,可以理解为对72个数计数1M次,记72个数的频率就是1MHz,用时1us)),如果记72000个数,那就是1KHz也就是1ms的时间,并在计数值达到设定值时触发中断。
stm32的定时器拥有16位(2的16次方是65536)的计数器(计数器就是用来执行计数定时的寄存器,每来一个时钟,计数器加1)、预分频器(可以对计数器的时钟进行分频,让计数更加灵活)、自动重装寄存器(是计数的目标值,计多少个时钟申请中断)的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时。
😎预分频值(PSC)、自动重装载值(ARR)。
定时器的计数频率 = 时钟频率 / (PSC + 1)
最大定时时间 = (ARR + 1)/ 定时器的计数频率
即,最大定时时间 = (ARR + 1) * (PSC + 1) / 时钟频率
🕛️不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能
🕛️根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型
🚀定时器类型
类型 | 编号 | 总线 | 功能 |
高级定时器 | TIM1、TIM8 | APB2 | 拥有通用定时器全部功能,并额外具有重复计数器、死区生成、 互补输出、刹车输入等功能 |
通用定时器 | TIM2、TIM3、TIM4、TIM5 | APB1 | 拥有基本定时器全部功能,并额外具有内外时钟源选择、输入捕获、 输出比较、编码器接口、主从触发模式等功能 |
基本定时器 | TIM6、TIM7 | APB1 | 拥有定时中断、主模式触发DAC的功能 |
除了TIM1-8,在库函数中还出现了TIM9、10、11等(这些一般都用不到)
🌳高级定时器额外具有的重复计数器、死区生成、互补输出、刹车输入等,这些功能主要是为了三相无刷电机的驱动设计的
🌳STM32F103C8T6定时器资源:TIM1、TIM2、TIM3、TIM4;不同的型号,定时器的数量是不同的
🚀基本定时器
理解时基单元的工作流程(定时器产生中断的全部流程)、主模式触发DAC的功能,如下内容:
1.基本定时器时基单元
下面这三个构成了最基本的计数计时电路,所以这一块电路就叫做时基单元
时基单元:预分配器(PSC)、自动重装载寄存器(ARR)、计数器(CNT)
2.时基单元的工作流程
内部时钟的来源是RCC_TIMxCLK,频率值是系统的主频72MHz,所以通向时基单元的计数基准频率就是72MHz
🌵进入时基单元首先是预分频器(PSC),它可以对72MHz的计数时钟进行预分频(比如,预分频器写0就是不分频输出72MHz,写1是进行二分频输出36MHz,写2是三分频输出24MHz ..,所以预分频的值和实际的分频系数相差1,即,实际分频系数=预分频器的值+1),预分频器是16位的,最大值可以写65535,也就是最大65536分频。
🌵然后是计数器,对预分频后的计数时钟进行计数,计数时钟每来一个上升沿,计数器的值加1,这个计数器的值也是16位的,值可以从0一直加到65535,如果再加的话,计数器就会回到0重新开始。所以计数器的值在计时过程中会不断地自增运行,当自增运行到目标值时,产生中断,那就完成了定时的任务,所以还需一个存储目标值的寄存器,那就是自动重装载寄存器了
🌵自动重装寄存器也是16位的,它存的是我们写入的计数目标,在运行的过程中,计数值不断自增,自动重装载是固定的目标,当计数值等于自动重装值时,也就是计时时间到了,那它就会产生一个中断信号,并且清零计数器,计数器自动开始下一次的计数计时。像这种计数值等于自动重装值产生的中断,叫做“更新中断”,这个更新中断之后就会通向NVIC,我们再配置好NVIC的定时器通道,那定时器的更新中断就能够得到CPU的响应。
🤠总结定时器产生中断的全部流程🤠:从基准时钟到预分频器再到计数器,计数器计数自增,同时不断地与自动重装寄存器进行比较,值相等时,即计时时间到,这时就会产生一个更新中断和更新事件,CPU响应更新中断,就完成了我们定时中断的任务了。
图红圈,是一个向上的折线箭头,就代表这里会产生中断信号,像这种计数值等于自动重装值产生的中断,叫做“更新中断”😎。
下图红圈,是一个向下的折线箭头,代表的是产生一个事件,这里对应的事件就叫做“更新事件”😎,更新事件不会触发中断,但可以触发内部其它电路的工作。
以上就是定时中断和时基单元的工作流程。
3.主模式触发DAC的功能
下面,简单介绍一下(后续讲),主模式触发DAC的功能,stm32定时器的一大特色就是😎主从触发模式(主从触发模式能让内部的硬件在不受程序的控制下实现自动运行),如果能把主从触发模式掌握好,那在某些情景下将会极大地减轻CPU的负担。
主模式触发DAC的作用就是,在我们使用DAC的时候,可能会用DAC输出一段波形,那就需要每隔一段时间来触发一次DAC,让它输出下一个电压点。如果用正常的思路来实现的话,就是先设置一个定时器产生中断,每隔一段时间在中断程序中调用代码手动触发一次DAC转换,然后DAC输出,这样会使主程序处于频繁被中断的状态,这会影响主程序的运行和其他中断的响应,所以定时器就设计了一个主模式,使用这个主模式可以把定时器的😎更新事件映射到触发输出TRGO(Trigger Out)的位置,然后TRGO直接接到DAC的触发转换引脚上,这样,定时器的更新就不需要再通过中断来触发DAC转换了,仅需要把更新事件通过主模式映射到TRGO,然后TRGO就会直接区触发DAC,整个过程不需要软件的参与,实现了硬件自动化,这就是主模式的作用,当然除了主模式外,还有更多硬件自动化的设计(后续讲)
以上,就是基本定时器的内容
🚀通用定时器
1.通用定时器与基本定时器异同
首先,中间最核心的部分,还是时基单元,如下,这部分结构和工作流程和基本定时器是一样的,不过对于通用定时器而言,计数器的计数模式就不止向上计数一种了(向上自增),通用定时器和高级定时器支持向上计数模式、向下计数模式和中央对齐模式。(基本定时器仅支持向上计数模式)。最常用的还是向上计数模式。
- 🤠向下计数模式就是从重装值开始,向下自减,减到0之后,回到重装值同时申请中断,然后继续下一轮,依次循环
- 🤠中央对齐模式就是从0开始,先向上自增,计到重装值,申请中断,然后再向下自减,减到0,再申请中断,然后继续下一轮,依次循环
2.内外时钟源选择功能
🤠如下,是内外时钟源选择和主从触发模式的结构。🤠
🤠内外时钟源选择:对于基本定时器,定时只能选择内部时钟,也就是系统频率72MHz;对于通用定时器,时钟源可以选择内部时钟或者外部时钟
外部时钟的选择有如下四种:
2.1 第一个外部时钟就是来自TIMx_ETR引脚上的外部时钟
可以在TIM2的ETR引脚也就是PA0上接一个外部方波时钟,然后配置一下内部的极性选择、边沿检测和预分频器电路,再配置一下输入滤波电路,这两块电路可以对外部时钟进行一定的整形(因为是外部时钟,所以难免会有毛刺,这些电路就可以对输入的波形进行滤波),同时也可以选择一下极性和预分频器,最后滤波后的信号,兵分两路,上面一路ETRF进入触发控制器,紧跟着就可以选择作为时基单元的时钟了,在stm32中,这一路也叫做‘外部时钟模式2’(如图中红线);另一路与其他信号通过一个数据选择器输出TRGI(Trigger In,触发输入),当这个TRGI当作外部时钟来使用时,这一路就称为 外部时钟模式1(如图中黄线所示)。后者从名字上看,它主要是作为触发输入来使用的,这个触发输入可以触发定时器的从模式。关于从模式的内容之后再涉及,本节主要考量把这个触发输入当作外部时钟来考虑的情况。
😎TIMx_ETR引脚的位置可以参考引脚定义表中关于默认复用功能和重定义功能的定义,如下图所示。可以看到TIM2的CH1和ETR都复用在了引脚PA0上。其他定时器的引脚也可以在表中找到。
2.2 第二个外部时钟可以是来自其他定时器的信号ITR