AT32 MCU定时器入门指南

控制/MCU

1814人已加入

描述

AT32定时器概述

  定时器种类有基本定时器、通用定时器、高级控制定时器,以AT32F435xx举例,下表为各种类型定时器的功能总表。本文主要就定时器溢出中断进行基础讲解和案列解析。

表1. 各定时器功能总表
AT32AT32

例 定时器溢出中断

功能简介

定时器溢出中断是定时器最基础功能,进入中断的时间周期可由相关寄存器配置。

定时器计数器值TMRx_CVAL

定时器预分频寄存器TMRx_DIV

定时器周期寄存器(TMRx_PR)

定时器中断频率计算公式如下

AT32  

其中,TMRxCLK虽然来源于APB1/2时钟,但下图时钟架构可以看出,档APB1/2 Divider存在非1除频时,TMRxCLK会有x2。例如AHB=240 MHz,APB1/2=120MHz,TMRxCLK的实际频率为240 MHz.以向上计数模式举例,TMREN bit使能后,TMRx_CVAL会开始进行累加1,直到其值等于TMRx_PR后,OVFIF位会置起并且定时器会触发溢出中断事件,(若溢出中断有开启,则会产生溢出中断),同时TMRx_CVAL会再次从0开始计数,周而复始。

图1. 定时器时钟源架构

AT32

资源准备

  1) 硬件环境 对应产品型号的AT-START BOARD 2) 软件环境 projectat_start_xxxexamples mr imer_base  

软件设计

  1) 配置流程

编写定时器溢出中断函数的应用程序

开启定时器外设时钟

配置定时器TMRx_DIV寄存器和TMRx_PR寄存器

配置定时器为向上计数方向

开启定时器溢出中断

开启NVIC溢出中断

开启定时器计数

2) 代码介绍

main函数代码描述

AT32

TMR1_OVF_TMR10_IRQHandler中断函数代码描述

AT32

实验效果

LED3每1秒翻转一次。

例 PWM输出

功能简介

  定时器的输出部分由比较器和输出控制构成,用于编程输出信号的周期、占空比、极性。高级定时器的输出部分在不同通道上有所不同。

高级定时器在通道1到通道3上拥有互补输出,且配备死区调节;通道1到通道4拥有刹车控制。通用定时器的输出部分没有上述功能,只配备了4个通道输出。基本定时器、通用定时器和高级定时器的具体功能差异可查看RM的TMR章节。

如下图为高级定时器通道1到3输出部分原理图:

图2. 高级定时器通道1到3输出部分原理图

AT32

图3. 高级定时器通道4输出部分原理图

AT32

PWM输出是定时器最常用的输出模式,分为PWM模式A和PWM模式B。其差异在于:

PWM模式A: -OWCDIR=0,若TMRx_C1DT>TMRx_CVAL时设置C1ORAW为高,否则为低; -OWCDIR=1,若TMRx_C1DTTMRx_CVAL时设置C1ORAW为低,否则为高; -OWCDIR=1,若TMRx_C1DT时设置c1oraw为高,否则为低。>时设置c1oraw为低,否则为高。>

资源准备

  1) 硬件环境 对应产品型号的AT-START BOARD 2) 软件环境 projectat_start_xxxexamples mr7_pwm_output  

软件设计

  1) 配置流程

开启定时器外设时钟

配置输出管脚

配置定时器TMRx_DIV寄存器和TMRx_PR寄存器

配置定时器为向上计数方向

配置定时器输出通道为PWM模式B

开启定时器计数

2) 代码介绍

main函数代码描述

AT32    

实验效果

通过逻辑分析仪或者示波器可将波形打出来。

如下图:

图4. 7路PWM输出

AT32  

图中通道1到4输出频率相同但占空比不同的波形,互补通道通过输出极性的调节与其对应的通道输出相同的波形。  

例 PWM输入捕获

功能简介

  定时器的输入部分由专门的捕获电路实现,可用于对输入信号的滤波、选择、分频和输入捕获功能;通过对捕获值的计算,可得到输入波形的频率和占空比。

如下图为输入部分原理图:

图5. 定时器输入部分原理图

AT32

输入模式下,当选中的触发信号被检测到时,通道寄存器(TMRx_CxDT)会记录当前计数器计数值,并将捕获比较中断标志位(CxIF)置1,若已使能通道中断(CxIEN)、通道DMA请求(CxDEN)则产生相应的中断和DMA请求。若在CxIF已置1后检测到选中的触发信号,则将CxOF位置1。

另外,还提供了更加高效的PWM波输入捕获功能,可以更方便的计算出输入波形的频率和占空比。此模式的通过内部两个CxDT寄存器实现,输入波形通过定时器的通道1或者通道2输入即可。

图6. 定时器捕获PWM波原理图

AT32

将定时器配置成PWM输入模式后,可通过C1DT和C2DT的值计算出对应PWM波形的频率和占空比:

频率=TMR_CLK/C1DT 占空比=C2DT/C1DT  

资源准备

  1) 硬件环境 对应产品型号的AT-START BOARD 2) 软件环境 projectat_start_xxxexamples mrpwm_input  

软件设计

  1) 配置流程

开启定时器外设时钟

配置输入管脚

配置定时器TMRx_DIV寄存器和TMRx_PR寄存器

配置定时器为向上计数方向

配置定时器的PWM输入模式

开启定时器计数

2) 代码介绍

main函数代码描述

AT32

中断函数代码描述

AT32    

实验效果

从PA7灌入PWM波形;

将串口1连接到上位机,然后通过上位机串口工具即可看到打印信息。

例 输入捕获

功能简介

通过对外部信号的上升沿或者下降沿进行捕获可以实现对外部信号输入捕获并计算频率的功能。本例程实现了对外部信号进行捕获并通过串口打印出频率。

资源准备

    1) 硬件环境 对应产品型号的AT-START BOARD 2) 软件环境 projectat_start_xxxexamples mrinput_capture  

软件设计

  1) 配置流程

开启定时器外设时钟

配置输入管脚

配置定时器TMRx_DIV寄存器和TMRx_PR寄存器

配置定时器为向上计数方向

配置定时器的输入捕获功能

开启定时器计数

2) 代码介绍

main函数代码描述

AT32

中断函数代码描述

AT32

实验效果

从PA7灌入PWM波形;

将串口1连接到上位机,然后通过上位机串口工具即可看到打印信息。

例 DMA传输

功能简介

  定时器拥有强大的DMA传输能力,基本每个定时器都支持DMA请求的产生。这使得应用更加灵活。

本实验将src_buffer[0]、src_buffer[1]和src_buffer[2]数据通过DMA传输到TMR的TMRx_C3DT寄存器。实现了每个周期占空比都发生改变,且占空比在src_buffer[0]、src_buffer[1]和src_buffer[2]的值之间进行有序的切换。

资源准备

  1) 硬件环境 对应产品型号的AT-START BOARD 2) 软件环境 projectat_start_xxxexamples mrdma  

软件设计

  1) 配置流程

开启定时器外设时钟

配置输入管脚

配置定时器TMRx_DIV寄存器和TMRx_PR寄存器

配置定时器为向上计数方向

配置DMA通道

配置定时器的溢出事件产生DMA请求

开启定时器计数

2) 代码介绍

main函数代码描述

AT32    

实验效果

  从PA10、PB15输出PWM波形;  

例 burst传输

功能简介

  高级定时器和通用定时器除了支持常规的DMA传输功能,还额外支持DMA burst传输功能。在配置为burst传输后,当TMR产生一个DMA请求可连续传输以TMR地址为起始地址的多笔数据;传输数据的起始地址和数据量可通过软件配置。

如何配置burst传输:

1. 配置TMRx_DMACTRL寄存器,此寄存器的bit0到bit4为DMA传输地址偏移,此值决定了DMA传输的起始地址;bit8到bit12为DMA传输长度配置,此值决定了DMA传输的数据笔数。 2. 配置DMA通道,此配置流程与常规DMA通道配置相同;需要注意的是DMA通道的源与目标地址寄存器中的一个必须为TMRx_DMADT寄存器地址;具体是源还是目标就由数据传输的方向决定。

本实验将src_buffer[0]和src_buffer[2]数据通过burst传输到TMR的TMRx_PR和TMRx_C1DT寄存器。

资源准备

  1) 硬件环境 对应产品型号的AT-START BOARD 2) 软件环境 projectat_start_xxxexamples mrdma_burst  

软件设计

  1) 配置流程

开启定时器外设时钟

配置输入管脚

配置定时器TMRx_DIV寄存器和TMRx_PR寄存器

配置定时器为向上计数方向

配置DMA通道和定时器的burst功能

配置DMAMUX

开启定时器计数

2) 代码介绍

main函数代码描述

AT32    

实验效果

从PA8输出PWM波形;

例 单脉冲输出

功能简介

  单脉冲输出模式是PWM模式的特例,将OCMEN位置1可开启单周期模式,此模式下,仅在当前计数周期中进行比较匹配,完成当前计数后,TMREN位清0,因此仅输出一个脉冲。当配置为向上计数模式时,需要严格配置CVALCxDT。≤pr;向下计数时,需严格配置cval>

当TMR受到外部触发或者软件使能CNT时,TMR开始计数并在此次overflow事件时停止计数。此过程中输出也会根据配置产生波形。

单脉冲输出原理如下图:

图7. 单脉冲输出原理图

AT32

图中当受到外部触发后,TMR开始计数,当CVAL等于CxDT时,改变输出状态,当CVAL溢出时,输出状态再次改变从而达到输出一个单脉冲的目的。

本实验将TMR4配置为单脉冲模式。TMR4的通道1配置为输入并充当触发输入的源头,通道2配置为输出模式,充当单脉冲输出的端口。

资源准备

  1) 硬件环境 对应产品型号的AT-START BOARD 2) 软件环境 projectat_start_xxxexamples mrone_cycle  

软件设计

  1) 配置流程

开启定时器外设时钟

配置输入、输出管脚

配置定时器TMRx_DIV寄存器和TMRx_PR寄存器

配置定时器为向上计数方向

配置定时器为单脉冲模式

配置通道2为输出口,并作为TMR触发的触发源

2) 代码介绍

main函数代码描述

AT32    

实验效果

PB7输入管脚,外部给上升沿触发即可;

PB6为输出管脚,输出单脉冲波形。

使用逻辑分析仪打出波形如下:

图8. 单脉冲输出结果

AT32    

例 32位定时器

功能简介

  部分定时器可支持扩展为32位定时器(具体请查看RM)。扩展后,不单CVAL寄存器为32位,DIV和CxDT都会自动扩展为32位。

使能32位定时器只需要设置TMRx_CTRL1寄存器的bit10为1即可。

本实验将TMR2配置为32位定时器模式,然后配置为PWM输出模式使其输出PWM波形。

资源准备

  1) 硬件环境 对应产品型号的AT-START BOARD 2) 软件环境 projectat_start_xxxexamples mr mr2_32bit  

软件设计

  1) 配置流程

开启定时器外设时钟

配置输入、输出管脚

使能32位模式

配置定时器TMRx_DIV寄存器和TMRx_PR寄存器

配置通道输出PWM波形

2) 代码介绍

main函数代码描述

AT32    

实验效果

PA0/1/2/3输出波形;

图9. 32位定时器输出结果

AT32

例 定时器同步

功能简介

  主次定时器之间可由内部连接信号进行同步。主定时器可由PTOS[2:0]位选择主定时器输出,即同步信息;次定时器由SMSEL[2:0]位选择从模式,即次定时器的工作模式。 定时器从模式有以下几种:

复位模式:

此模式下,当次定时器收到一个同步信号后,次定时器复位计数器和预分频器,定时器的 CVAL寄存器变为0重新开始计数。若OVFS位为0,将产生一个溢出事件。

图10. 复位模式图
AT32

挂起模式:

挂起模式下,计数的计数和刹车受选中触发输入信号控制,当触发输入为高电平时计数器开始计数;当为低电平时,计数器暂停计数。

图11. 挂起模式图
AT32

触发模式:

触发模式下,次定时器当受到外部触发信号后,自动启动定时器,即硬件置TMR_EN为1。所以在触发模式下,初始化定时器后软件不需要使能定时器。

图12. 挂起模式图

AT32  

本例程实现了TMR2同步TMR3和TMR4。主定时器TMR2选择溢出事件作为同步信号输出,次定时器TMR3和TMR4选择挂起模式作为从模式。  

资源准备

  1) 硬件环境 对应产品型号的AT-START BOARD 2) 软件环境 projectat_start_xxxexamples mrparallel_synchro    

软件设计

  1) 配置流程

定时器外设时钟

配置输入、输出管脚

配置定时器TMRx_DIV寄存器和TMRx_PR寄存器

配置主模式和从模式

配置PWM输出模式

使能定时器

2) 代码介绍

main函数代码描述

AT32    

实验效果

通过PA6/PA0/PB6输出波形,可使用逻辑分析仪抓取波形查看。

        审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分