
华芯微特公司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口。
具体配置函数如下图所示:

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

三、实验现象
下载好程序后,LED实现计数3个A4引脚的上升沿翻转一次A5引脚的LED灯。
来源:华芯微特32位MCU
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。