芯课堂 | 如何使用SWM系列产品的TIMER功能(一)

01  TIMER简介

TIMER是一种定时器工具,用来在一个后台线程计划执行指定任务。它可以计划执行一个任务一次或反复多次。

我司的SWM系列单片机提供的TIMER个数和功能有些微差别,为了让您更加简单的使用这一功能,下面将以SWM190为例,给大家展示如何使用SWM系列产品的TIMER功能。

SWM190系列有4路32位加强定时器,4路24位基础定时器。加强型定时器支持支持定时器、计数器、捕获、脉冲发送、HALL功能及ADC触发功能等功能。基础定时器具备定时器功能,并具备一个8位分频器,每个定时器具备独立中断源。


02  TIMER定时器之精准延时功能

今天详细讲解一下TIMER的定时器功能。
定时器功能使用片内时钟作为计数基准,以SWM190加强型定时器为例,有4个32 bit向下计数的TIMER,脉冲每一次下降沿,计数寄存器数值将减1。
每一个TIMER都可以配置定时器溢出中断。使能溢出中断,定时器溢出会触发中断操作,达到精准定时功能。


03  SWM190 TIMER延时功能配置库函数

以最简单的定时器为例,使用加强型定时器和基础定时器,用定时器的方法实现1S的精准延时。在此讲解中,将A4设为每2秒翻转一次IO,A5设为每0.5秒翻转一次IO,通过翻转LED的状态来观察现象。

将LED输出引脚通过GPIO_Init设置为输出,与外部LED引脚相连。

在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_TypeDef,它是一个结构体类型,该类型在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,为中断使能。
加强型定时器实现0.1S触发一次,2S实现LED灯的翻转;基础定时器实现0.5S实现LED灯的翻转。

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

接下来我们看下中断服务子函数,在加强型定时器的中断服务函数中,实现每0.1S进一次中断。定义一个全局变量TimerNum,每当进一次中断的时候,让TimerNum来记录进入中断的次数。我们实现2S的定时,我们只需要判断TimerNum是否等于20,然后把TimerNum清0,执行对应的操作并重新计数,以此循环往复。

在基础定时器的中断服务函数中,实现每0.5S进行LED灯的一次翻转。


相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-12 21:08:10       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-12 21:08:10       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-12 21:08:10       82 阅读
  4. Python语言-面向对象

    2024-05-12 21:08:10       91 阅读

热门阅读

  1. hadoop生态圈集群搭建(持续更新240512)

    2024-05-12 21:08:10       23 阅读
  2. 3、TS中的类型断言

    2024-05-12 21:08:10       33 阅读
  3. 七、OpenAI之微调(Fine-tuning One)

    2024-05-12 21:08:10       24 阅读
  4. K8s是什么?

    2024-05-12 21:08:10       31 阅读
  5. 动态规划:力扣LCR 188. 买卖芯片的最佳时机

    2024-05-12 21:08:10       24 阅读
  6. Linux和Windows修改动态库的名字

    2024-05-12 21:08:10       35 阅读
  7. 掌握 Linux Crontab:完整指南与实用案例

    2024-05-12 21:08:10       33 阅读
  8. 【编写控制手机压测的脚本】

    2024-05-12 21:08:10       35 阅读
  9. 23种设计模式学习导航

    2024-05-12 21:08:10       32 阅读
  10. 【K8s】Kubectl 常用命令梳理

    2024-05-12 21:08:10       27 阅读
  11. 9. 学习distribute by rand()

    2024-05-12 21:08:10       27 阅读
  12. C语言从头学03——介绍函数printf

    2024-05-12 21:08:10       33 阅读