MCU之TIMER精准延时(二)

cathy的头像
cathy 发布于:周五, 07/23/2021 - 10:05 ,关键词:

华芯微特公司SWM系列单片机提供的TIMER个数和功能有些微差别,为了让您更加简单的使用这一功能,下面小编将以SWM190为例,我们今天详细讲解一下TIMER的计数器功能。

TIMER精准延时

一、TIMER定时器之计数功能

我们今天详细讲解一下TIMER的计数器功能。

计数器功能使用片外时钟作为计数基准,以SWM190加强型定时器为例,有4个32 bit向下计数的TIMER,根据配置,外部信号每一次上升沿,计数寄存器数值将减1。

每一个TIMER都可以配置定时器溢出中断。使能溢出中断,计数器溢出会触发中断操作。

二、SWM190 TIMER延时功能配置库函数

下面我们以最简单的计数器器为例,使用加强型定时器,用计数器的方法实现每计数3个上升沿进入中断。在此例程中,我们将A4间隔一段时间翻转一次,模拟外部信号源;A5设为每计数三个上升沿翻转一次IO,通过翻转LED的状态来观察现象;将A7设置为计数器的输入引脚,与模拟外部信号源的A4脚物理连接。

我们之前有讲到GPIO和PORT的配置方法,在这里就不在做赘述,将A4/A5输出引脚通过GPIO_Init设置为输出,与外部LED引脚相连;将A7通过PORT_Init引脚设置为TIMER2的输入功能引脚。

在SWM190固件库中对TIMER的配置进行了说明,下面将根据库函数对SWM190的TIMER配置,首先来看一下TIMR_Init函数的原型void TIMR_Init(TIMR_TypeDef * TIMRx, uint32_t mode, uint32_t prediv, uint32_t period, uint32_t int_en)。这个函数的实现是在SWM190_timr.c文件中,若要使用该函数在相应的应用程序的前面包含SWM190_ timr.h头文件。

函数的第一个参数为TIMR_TypeDe,它是一个结构体类型,该类型在SWM190.h中被定义。具体参数为指定TIMER模块,有效值包括TIMR0,TIMR1,TIMR2,TIMR3,BTIMR0,BTIMR1,BTIMR2,BTIMR3;

第二个参数为uint32_t mode,为TIMER模式配置,有效值包括TIMR_MODE_TIMER(定时器)、TIMR_MODE_COUNTER(计数器上升沿)、TIMR_MODE_OC(输出比较)、TIMR_MODE_IC(输入捕获);其中基础定时器只支持TIMR_MODE_TIMER(定时器);

第三个参数为uint32_t prediv,为TIMER分频配置,其中加强型定时器无分频只能为1;基本定时器可取值1-256;

第四个参数为uint32_t period,为计数周期,其中加强型定时器为32bit,基础定时器为24bit。

第五个参数为uint32_t int_en,为中断使能。

我们使用加强型定时器实现timer每计数3个A4引脚上的上升沿信号进入TIMER中断,在中断中翻转A5口。

具体配置函数如下图所示:

“MCU之TIMER精准延时"

接下来我们看下中断服务子函数,在加强型定时器的中断服务函数中,实现每进一次中断,GPIOA5翻转一次。

“MCU之TIMER精准延时"

三、实验现象

下载好程序后,LED实现计数3个A4引脚的上升沿翻转一次A5引脚的LED灯。

来源:华芯微特32位MCU
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 93