TIM定时中断(内含:1.TIM简介+2.定时器类型+3.基本定时器+4.通用定时器+5.高级定时器+6.定时中断基本结构+7.预分频器时序+8.计数器时序+9.计数器有/无预装+10.RCC时钟树)

简介: TIM定时中断(内含:1.TIM简介+2.定时器类型+3.基本定时器+4.通用定时器+5.高级定时器+6.定时中断基本结构+7.预分频器时序+8.计数器时序+9.计数器有/无预装+10.RCC时钟树)

本章知识较难,理解为主。


本章分为四节,该本章是第一节内容。TIM定时中断,主要讲定时器基本定时功能,即定一个时间,每隔这个时间定时器产生一个中断,从而实现每隔一个固定时间执行一段程序的目的。


第二节内容,主要讲输出比较功能。最常用于PWM波形,用于驱动电机等设备。


第三节内容,主要讲定时器输入捕获功能。使用输入捕获模块实现测量方波频率。


第四节内容,主要讲定时器的编码器接口。使之读取正交编码器的输出波形。常用于编码测速。


1.TIM简介:


bd9e0586b6144b159453949895005e85.png


解释:计数器是执行计数定时的寄存器。预分频器是分频计数器的时钟。自动重装寄存器设计使用几个时钟申请中断。时基单元由这三部分构成,也是定时器最重要的部分。当计时器,预分频器,自动重装寄存器均设置为最大(2的16次方,即65536时),定时器最大定时时间为59.65s。


即中断频率f=72M/65536/65536.....T=1/f=59.65s。STM32可级联,即一个定时器输出当另一个定时器输入(原理图在后面)。此时为59.65*65536*65536,约为8000多年。当然,还可以再级联,为59.65秒*65536*65536*65539*65539,约为34万亿年。


2.定时器类型:


88bc13a4e3f84b718b02329565c638f9.png


解释:定时器是高级到低级向下兼容的。高级定时器拥有通用定时器全部功能,以此类推。


STM32F103C8T6拥有1个高级定时器TIM1和三个通用定时器TIM2,TIM3,TIN4。不同设备定时器不一样,因此,一定要注意有没有要操作的外设。


3.基本定时器结构图:


69aabdb3c5b04135bd5dce4111e5caba.png


解释:基本定时器完成定时中断,主模式触发DAC功能。


RCC的CLK如图步骤进入预分频器,选择分频(写1,为2分频,输出频率=输入频率/2;写2,为3分频,输出频率=输入频率/3...)或者不分配(寄存器写0)。


此处可知,实际分频系统=预分频器值+1.预分频器16位,最大值为65535,实际分频为65536.


计数器:对预分频后的时钟计数。计数时钟每一个上升沿,计数器值+1,最大值为65535(16位)。再次增加又变为0重新开始。计数器会自增,当自增到目标值时,产生中断,完成定时任务。


自动重装寄存器存储固定目标。当计数器值等于自动重装寄存器值时,计数时间到。产生中断信号并清零计数器。计数器自动开始下一次计数计时并激活图中1或2.


图中1向上箭头为产生中断信号,也叫更新中断,连接NVIC。


图中2向下箭头对应的叫更新事件。不会触发中断,但会触发内部其他电路的工作。


不使用DAC时:走图中1向上箭头,传递给DAC。定时器产生中断,即更新中断,每隔一段时间就手动触发一次DAC转换,使DAC输出。影响主程序的运行和其他中断响应。


主模式触发DAC功能原理(图中右上角):走图中2向下箭头,并同内部时钟CK_INT处传递给触发控制器。不需要经过中断触发DAC。


4.通用定时器:


0ee1b69ec20d4e74bd6a4c079b86c2fc.png


中间部分仍为时基单元。但是,通用定时器,高级定时器计数模式不只有向上计数模式,还有向下计数模式和中央对齐模式。


上部分,简单定时器只能选择72MHz,但是通用定时器可以选择外部时钟。如最左侧输入部分的TIM_ETR外部时钟。画出来的路线均为外部时钟输入模式。


外部时钟引脚包括:ETR引脚,其他定时器,CH1引脚边缘,CH1引脚,CH2引脚。


下半部分右圈内为输出比较电路,共有四个通道,分别对应CH1到CH4的引脚。用于输出PWM波形,驱动电机等。


下半部分左权为输入捕获电路,也是有四个通道,对应也是CH1到CH4的引脚。用于测量方波的频率等。


输入输出不能同时使用。


5.高级定时器:


1d30c3f0a4144deebd92ee6d1923d80f.png


解释:第二个圈里上方多了个重复次数计数器,作用:实现可调节几个周期才更新一次的命令,而不是之前的一个周期更新一次。


DTG为死区生成电路,为了防止互补输出的PWM驱动桥臂时,在开关切换的瞬间造成短暂的直通现象。输出引脚可以生成一队互补的PWM波形,完成驱动三项无刷电机。


最下方为当外界产生刹车信号或内部失效产生故障时,控制电路自动切断电机的输出。达到刹车输入功能。


6.定时中断基本结构:


ca47e3f6dbeb413a874f496f9b44a7c7.png


运行控制,控制寄存器的一些位,如启动停止,向上或向下计数等,操作这些寄存器就能控制时基单元。


中断输出控制:筛选中断申请,需要则运行,否则不允许。


7.预分频器时序:


1bb7e695fb5841d395c01b0702c59d70.png


注:此处要结合基本定时器图对照理解。


CNT_EN:计数器使能。高电平正常运行,低电平停止。


主要定时器时钟,后半段,预分频器系数变为2,计数器时钟也变为之前的一半。且计数器寄存器也在此时从FC变为00.ARR的自动重装值为FC,当计数值和重装值相等,并且下一个时钟来临时,计数值清零。同时产生更新事件。


如图上箭头处,将0改为1,会使频率发生改变,因此设计缓冲机器(也叫影子寄存器).使变化延迟到周期结束,产生更新事件才会生效。


8.计数器时序:


d005a46e1a1f4415a7d44ce53f915548.png


计数器寄存器自增,当增到0036时,溢出变为0000,产生更新事件和更新中断标志。但是更新中断标志需要手动清0.


9.计数器有/无预装时序图:


83446b5398e84fffb28a0a503c2671a7.png


箭头处,输入36,计数器寄存器到达36直接清零,计时器溢出,更新事件和更新中断标志


7f03023508584ef48076d9716ec63b3e.png


箭头处,输入36,并不能直接起作用,真正起作用是影子寄存器,使计数器寄存器完成原来的F5变为00之后才自动溢出,而不是到达36溢出。


注:再通用寄存器,高级寄存器等图中可观察有无阴影即可看出有无缓冲寄存器。可手动调节是否使用缓冲寄存器。(设置ARPE位)


10.RCC时钟树:


6638a22a2bc042b284265dc7eeed99c7.png


注:RCC时钟树是最先需要配置的东西。


该配置较麻烦,ST工作已配置好SystemInit函数.


左侧为时钟产生电路,右侧为时钟分配电路。


配置SystemInit函数如图。选择8MHz,9倍倍频,变为72MHz。此时上部分RSI部分不连通。


相关文章
|
编解码 芯片
STM32--TIM定时器(2)
STM32--TIM定时器(2)
1053 0
|
JavaScript 小程序 前端开发
【手把手教教学物联网项目】01 视频大纲
《手把手教教学物联网项目》是一系列视频教程,旨在引导初学者掌握物联网技术。视频涵盖物联网基础,如物联网概述、架构和技术;STM32微控制器的介绍、编程及外设使用;网关开发,涉及ESP8266和ESP32;物联网通信协议如TCP、MQTT、Modbus等;物联网总线协议如单总线、CAN、IIC和SPI;OLED显示原理与驱动;MQTT服务器搭建;物联网云平台介绍,包括阿里云平台的使用;微信小程序开发入门及前端VUE项目实践。此外,教程还涉及UniAPP和SpringBoot后台开发,最后通过“智能取餐柜”项目将理论知识付诸实践。视频可在B站找到,适合学生、爱好者和开发人员学习物联网技术。
1335 12
【手把手教教学物联网项目】01 视频大纲
|
编解码 前端开发 算法
基于OpenCV的双目摄像头测距(误差小)
首先进行双目摄像头定标,获取双目摄像头内部的参数后,进行测距;本文的双目视觉测距是基于BM算法。注意:双目定标的效果会影响测距的精准度,建议大家在做双目定标时,做好一些(尽量让误差小)。
12946 3
基于OpenCV的双目摄像头测距(误差小)
|
存储 算法 Linux
【Linux系统编程】深入理解Linux目录扫描函数:scandir目录函数(按条件扫描目录
【Linux系统编程】深入理解Linux目录扫描函数:scandir目录函数(按条件扫描目录
673 0
clion中cpp文件显示This file does not belong to any project ,code insight features might not work【解决方案】
clion中cpp文件显示This file does not belong to any project ,code insight features might not work【解决方案】
clion中cpp文件显示This file does not belong to any project ,code insight features might not work【解决方案】
|
人工智能 IDE Go
体验了下豆包MarsCode编程助手,惊艳到我了!
豆包 MarsCode 是一款 AI 编程助手,提供智能代码补全等功能,支持多种编程语言及 IDE,涵盖代码解释、审查与修复等辅助功能,旨在提升开发效率。其支持线上编辑器,无需搭建环境即可运行代码,体验接近本地 VS Code。尽管部分功能解释略显不足,但整体表现出色,可无缝替代 GitHub Copilot,适合希望提高开发效率的程序员使用。无论是在本地还是线上,MarsCode 都能显著提升编程体验。
2396 2
体验了下豆包MarsCode编程助手,惊艳到我了!
|
传感器 存储 网络协议
Arduino 中的常见的库
Arduino 中的常见库包括:Wire(I2C通信)、SPI(串行外设接口)、Servo(伺服电机控制)、EEPROM(数据存储)、LiquidCrystal(液晶显示)等,这些库简化了硬件编程,提高了开发效率。
1778 3
单片机按键的使用
单片机按键的使用
477 0
|
机器学习/深度学习 数据处理 Python
机器学习实战:房价预测项目
【7月更文挑战第13天】本文详细介绍了基于机器学习的房价预测项目的实战过程。从数据准备、特征工程、模型构建到结果评估,每一步都至关重要。通过合理的特征选择和模型优化,我们可以构建出性能优异的房价预测模型,为房地产行业的决策提供有力支持。未来,随着机器学习技术的不断发展和应用场景的不断拓展,房价预测模型将更加智能化和精准化。
1304 7

热门文章

最新文章