首页 > 其他分享 >【STM32】4_1 通用定时器

【STM32】4_1 通用定时器

时间:2023-08-25 23:56:11浏览次数:39  
标签:__ 定时器 通用 TIMx STM32 TIM 寄存器 HAL PWM

通用定时器概述

定时器分类表如下图所示

通用 TIMx 定时器具有以下特性:

● 16 位(TIM3 和 TIM4)或 32 位(TIM2 和 TIM5) 递增、递减和递增/递减自动重载计 数器。

● 16 位可编程预分频器,用于对计数器时钟频率进行分频 (即运行时修改),分频系数介 于 1 到 65536 之间。

● 多达 4 个独立通道,可用于:

— 输入捕获

— 输出比较

— PWM 生成(边沿和中心对齐模式)

— 单脉冲模式输出

● 使用外部信号控制定时器且可实现多个定时器互连的同步电路。

● 发生如下事件时生成中断/DMA 请求:

— 更新:计数器上溢/下溢、计数器初始化(通过软件或内部/外部触发)

— 触发事件(计数器启动、停止、初始化或通过内部/外部触发计数)

— 输入捕获 — 输出比较 ● 支持定位用增量(正交)编码器和霍尔传感器电路

● 外部时钟触发输入或逐周期电流管理

定时器时钟来源

通用定时器时钟可以选择下面四类时钟源之一:

1)内部时钟(CK_INT)

2)外部时钟模式 1:外部输入引脚(TIx),x=1,2(即只能来自于通道 1 或者通道 2)

注:外部时钟模 式 1 下,时钟源信号只能从 CH1 或者 CH2 输入到定时器,

3)外部时钟模式 2:外部触发输入(ETR)

4)内部触发输入(ITRx):使用一个定时器作为另一定时器的预分频器

时基单元

计数器寄存器(TIMx_CNT)、

预分频器寄存器(TIMx_PSC)、

自动重载寄存器 (TIMx_ARR)。

预装载寄存器的内容既可以直接传送到影子寄存器,也可以在每次发生更新事件 (UEV) 时传送到影子寄存器,这取决于 TIMx_CR1 寄存器中的自动重载预装载使能位 (ARPE)。

时基单元的控制位

TIMx_CR1的CEN(Counter Enable) 位是能计数器。

TIMx_EGR的UG(Update Generation) 用软件方式产生一次事件更新,使得定时器复位。

计数器模式

  • 递增计数模式

在递增计数模式下,计数器从 0 计数到自动重载值(TIMx_ARR 寄存器的内容),然后重新 从 0 开始计数并生成计数器上溢事件。

  • 递减计数模式

在递减计数模式下,计数器从自动重载值(TIMx_ARR 寄存器的内容)开始递减计数到 0, 然后重新从自动重载值开始计数并生成计数器下溢事件。

  • 中心对齐模式(递增/递减计数)

在中心对齐模式下,计数器从 0 开始计数到自动重载值(TIMx_ARR 寄存器的内容)— 1, 生成计数器上溢事件;然后从自动重载值开始向下计数到 1 并生成计数器下溢事件。之后从 0 开始重新计数。

捕获/比较通道

每个捕获/比较通道均围绕一个捕获/比较寄存器(包括一个影子寄存器)、一个捕获输入阶段(数字滤波、多路复用和预分频器)和一个输出阶段(比较器和输出控制)构建而成。通道输入阶段、比较阶段和输出阶段组成。

输入阶段对相应的 TIx 输入进行采样,生成一个滤波后的信号 TIxF。然后,带有极性选择功能的边沿检测器生成一个信号 (TIxFPx),该信号可用作从模式控制器的触发输入,也可用作捕获命令。该信号先进行预分频 (ICxPS),而后再进入捕获寄存器。

输出阶段生成一个中间波形作为基准:OCxRef(高电平有效)。链的末端决定最终输出信号的极性。

捕获/比较模块由一个预装载寄存器和一个影子寄存器组成。始终可通过读写操作访问预装载寄存器。

在捕获模式下,捕获实际发生在影子寄存器中,然后将影子寄存器的内容复制到预装载寄存器中。

在比较模式下,预装载寄存器的内容将复制到影子寄存器中,然后将影子寄存器的内容与计 数器进行比较。

输入捕获模式

输入捕获通过检测输入通道方波信号跳变沿,并且将跳变是的计数器值锁存到CCR。

输入捕获测定脉冲周期的工作原理:

在一个上跳沿时,寄存器TIMx_SR中的捕获/比较标志位CCyIF置1,表示发生了捕获事件,并且产生对应中断。计数器的置自动锁存到CCR中,在程序中读出CCR的值ccr1,并且清除CCyIF的标志位。

在下一个上跳沿,TIMx_SR中的捕获/比较标志位CCyIF置1,表示发生了捕获事件,并且产生对应中断。在程序中读出CCR的值ccr2。假设,如果在上一次发生捕获以后,CCR的值没有及时被读出,CCyIF保持1,则捕获溢出标志位CCRyOF会被置1。

假设,上跳沿捕获发生在一个周期以内,方波周期则为ccr2-ccr1。

如果方波周期超过计数器周期,则需要将计数器的技术周期和UEV事件发生次数考虑进去。ARR*N-cc2+cc1。

PWM输入捕获模式

PWM输入捕获模式为输入捕获模式的一个特例。

将两个输入捕获信号通道IC1和IC2映射到同一个TI1输入上。

这两个捕获通道边沿有效,但是极性相反

选择两个 TIxFP 信号之一作为触发输入,并将从模式控制器配置为复位模式。

同时使能两个输入捕获。

在第一个上跳沿,TIMx_CCR1锁存计数器的值,是的计数器复位,在下一个下降沿,TIMx_CC2出发捕获输入,锁存计数器的值,这就是PWM高电平宽度;在下一个上升沿,TIMx_CCR1锁存计数器的值,与之前的值相比较,即为PWM的频率。

定时器同步

两个或者多个定时器可以内部连接,实现定时器同步或者串联。某个工作与主模式的定时器,可对另一个配置为从模式的定时器的计数器执行复位、启动、停止操作或为其提供时钟。

输出比较模式

此功能用于控制输出波形,或指示已经过某一时间段。 当捕获/比较寄存器与计数器(CNT)之间相匹配时,输出比较功能:

● 将为相应的输出引脚分配一个可编程值,该值由输出比较模式(TIMx_CCMRx 寄存器 中的 OCxM 位)和输出极性(TIMx_CCER 寄存器中的 CCxP 位)定义。匹配时,输出引脚既可保持其电平 (OCXM=000),也可设置为有效电平 (OCXM=001)、无效电平 (OCXM=010) 或进行翻转 (OCxM=011)。

● 将中断状态寄存器中的标志置 1(TIMx_SR 寄存器中的 CCxIF 位)。

● 如果相应中断使能位(TIMx_DIER 寄存器中的 CCXIE 位)置 1,将生成中断。

● 如果相应 DMA 使能位(TIMx_DIER 寄存器的 CCxDE 位,TIMx_CR2 寄存器的 CCDS 位,用来选择 DMA 请求)置 1,将发送 DMA 请求。

使用 TIMx_CCMRx 寄存器中的 OCxPE 位,可将 TIMx_CCRx 寄存器配置为带或不带预装 载寄存器。

输出模式有:冻结(Frozen)保持电平

有效电平(active level)

无效电平 (inactive level)

翻转 (toggle)

PWM模式

脉冲宽度调制模式可以生成一个信号,该信号频率由 TIMx_ARR 寄存器值决定,其占空比则 由 TIMx_CCRx 寄存器值决定。通过向 TIMx_CCMRx 寄存器中的 OCxM 位写入 110(PWM 模式 1)或 111(PWM 模式 2),可以独立选择各通道(每个 OCx 输出对应一个 PWM)的 PWM 模式。必须通过将 TIMx_CCMRx 寄存器中的 OCxPE 位置 1 使能相应预装载寄存器,最后通过将 TIMx_CR1 寄存器中的 ARPE 位置 1 使能自动重载预装载寄存器。由于只有在发生更新事件时预装载寄存器才会传送到影子寄存器,因此启动计数器之前,必须通过将 TIMx_EGR 寄存器中的 UG 位置 1 来初始化所有寄存器。OCx 极性可使用 TIMx_CCER 寄存器的 CCxP 位来编程。既可以设为高电平有效,也可以 设为低电平有效。OCx 输出通过将 TIMx_CCER 寄存器中的 CCxE 位置 1 来使能。有关详 细信息,请参见 TIMx_CCERx 寄存器说明。.

在 PWM 模式(1 或 2)下,TIMx_CNT 始终与 TIMx_CCRx 进行比较,以确定是TIMx_CCRx>TIMx_CNT 还是TIMx_CCRx≤TIMx_CNT。

在计数值达到ARR时会产生UEV事件。TIMx_CCRx≤TIMx_CNT可以产生CC(捕获比较)事件

根据 TIMx_CR1 寄存器中的 CMS 位状态,定时器能够产生边沿对齐模式中心对齐模式的 PWM 信号。

例:PWM输出模式

实现目标:使用定时器TIM2输出可变脉冲宽度的PWM脉冲,将PWM信号从PA0引脚输出,将PA0引脚与LED引脚连接,使得LED灯呈现出不同的亮度。

  • LED引脚配置成输入模式。
  • 配置芯片时钟 略

Peripheral clocks 是挂载在总线上定时器意外的设备的时钟源;timer clocks 是为定时器提供的时钟源

  • 对定时器时钟TIM2 进行配置。

时钟源,输出通道,预分频,计数周期(ARR)进行配置。Pulsa 在PWM模式1是高电平的宽度。

定时器TIM2 挂载在APB1 的时钟总线上,时钟频率位84MHz

根据配置的分频系数和装载值可求得,定时器时钟频率为:

修改PWM占空比:

在stm32f4xx_hal_tim.h文件中 有修改CCR的宏定义

__HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__)

使用该宏定义 可以修改PWM的占空比

在使用PWM之前 需要启动定时器和开启的对应通道的PWM。

HAL_TIM_Base_Start(&htim2);

HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);

PWM常用的HAL函数

 

HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim)

PWM初始化,需要在完成定时器初始化配置完成后。

HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim,

TIM_OC_InitTypeDef *sConfig,

uint32_t Channel)

PWM通道配置

HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)

HAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length)

PWM启动

HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)

HAL_StatusTypeDef HAL_TIM_PWM_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)

HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)

PWM停止

HAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(TIM_HandleTypeDef *htim)

获取PWM状态

__HAL_TIM_ENABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__)

使能CCR预装载功能

__HAL_TIM_DISABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__)

禁止CCR预装载功能

__HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__)

设置CCR

__weak void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)

CNT=CCR时,产生的比较事件的回调函数

   

例:输出比较模式

输出比较模式与PWM模式类似,也可以生成PWM波形。

但是在PWM模式中,在递增模式下,CNT与CCR作比较,如果CNT小于CCR,输出高电平;若CNT大于CCR,输出低电平。并且在CNT达到ARR是,会溢出。

在比较模式下,CNT与CCR不断做比较,若CNT=CCR,会发生对应的设置的电平改变,并且发生时间。在这种情况下,可以在一个定时器情况下,生成不同频率的PWM信号。

  • LED引脚配置成输入模式。
  • 配置芯片时钟 略
  • 输出比较模式设置:以定时器TIM2为例。

  • 在主函数中启动定时器和OC生成。

HAL_TIM_Base_Start(&htim2);

HAL_TIM_OC_Start(&htim2, TIM_CHANNEL_1);

完成配置后,LED会根据设置时间发生信号翻转。

OC常用的HAL函数

HAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef *htim)

 

HAL_StatusTypeDef HAL_TIM_OC_DeInit(TIM_HandleTypeDef *htim)

 

HAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel)

HAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)

HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length)

 

HAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)

HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)

HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)

 

HAL_TIM_StateTypeDef HAL_TIM_OC_GetState(TIM_HandleTypeDef *htim)

 

__HAL_TIM_ENABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__)

使能CCR预装载功能

__HAL_TIM_DISABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__)

禁止CCR预装载功能

__HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__)

设置CCR

__weak void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)

产生输出比较事件时的回调函数

标签:__,定时器,通用,TIMx,STM32,TIM,寄存器,HAL,PWM
From: https://www.cnblogs.com/Mountainssea/p/17658220.html

相关文章

  • 开源.NetCore通用工具库Xmtool使用连载 - 发送短信篇
    【Github源码】《上一篇》介绍了Xmtool工具库中的发送邮件类库,今天我们继续为大家介绍其中的发送短信类库。发送短信就像发送邮件一样,在软件系统中使用非常普遍,甚至比发送邮件还要常见,有些甚至是软件标配功能;例如现在的短信验证码登录、通过短信找回密码等等。发送短信需要通过......
  • STM32深入学习3:DMA,串口通信和看门狗
    DMADMA直接存储器存取,用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。DMA1有7个通道,DMA2有5个通道,还有一个仲裁器来协调各个DMA请求的优先权。DMA的作用是实现数据的直接传输,从地址到地址的数据传输。DMA传输的相关参数:源地址,目标地址,数据传输量,传输模式......
  • WinSCP 普通用户上传文件没有权限解决
    普通用户在终端获取临时root权限sudo-i查看sftp应用程序的路径cat/etc/ssh/sshd_config|grepsftp//结果Subsystemsftp/usr/libexec/openssh/sftp-server 在WinSCP端进入高级设置-SFTP-设置SFTPserversudosu-c/usr/libexec/openssh/sftp-server 在......
  • 基于java极速WEB+ORM 框架:jfinal2.0开发的通用后台管理系统及源码
    final2-common-admin1、基于java极速web开发框架:jfinal2.0开发的通用后台管理系统,包括完整的登录、注册、菜谱管理、厨师管理、餐厅管理等功能2、开发时是基于jdk1.8、tomcat7.0,utf8编码3、运行时请修改配置文件:a_little_config.txt及相应的运行环境:JavaBuildPath、TargetedR......
  • 基于STM32设计的智能空调
    一、项目背景随着人们生活水平的不断提高,对居住环境的舒适度要求也越来越高。空调作为一种重要的家电设备,已经成为了现代家庭中必不可少的一部分。本文介绍了一种基于STM32的智能空调设计方案,可以自动地根据环境温度进行温度调节。二、设计思路2.1整体构架智能空调系统由温度检测......
  • STM32 使用内部晶振导致 Can 通讯异常
    1、问题背景STM32板间通讯,运行一段时间后Can通讯异常,MCU的Can总线外设停止工作2、问题原因STM32使用了内部晶振,仪器运行一段时间后板卡温度上升(散热设计不足),导致芯片时钟异常3、解决方法使用外部晶振,相对内部晶振,外部晶振更可靠,精度也更高。......
  • springboot3 集成mybatis 和通用mapper
    xml版本查看:https://www.cnblogs.com/binz/p/6564490.htmlspringboot3.x以前的版本查看https://www.cnblogs.com/binz/p/17421063.htmlspringboot3.x查看  https://www.cnblogs.com/binz/p/17654403.html1、pom引用<parent><groupId>org.springframework.boot</gro......
  • 通用Web后台魔方NewLife.Cube
    转自:大石头老师的魔方  链接:https://www.cnblogs.com/nnhy/p/cube.html通用Web后台魔方NewLife.Cube 魔方是一个基于ASP.NETMVC的用户权限管理平台,可作为各种信息管理系统的基础框架。演示:http://cube.newlifex.com 源码源码: http://git.newlifex.com/NewLife/N......
  • 【STM32】4_0 基础定时器
    基础定时器TIME6和TIME7基本定时器•16位计数器(Counter):基础定时器内部有一个16位的自动增减计数器。计数器可以通过软件或外部触发递增。•时钟源(ClockSource):基础定时器可以使用不同的时钟源作为计数器的输入时钟。通常,它可以选择使用内部时钟(如系统时钟)或外部时钟(如外部......
  • 【STM32】4_0 基础定时器
    基础定时器TIME6和TIME7基本定时器•16位计数器(Counter):基础定时器内部有一个16位的自动增减计数器。计数器可以通过软件或外部触发递增。•时钟源(ClockSource):基础定时器可以使用不同的时钟源作为计数器的输入时钟。通常,它可以选择使用内部时钟(如系统时钟)或外部时钟(如外部......