芯课堂 | MCU之TIMER精准延时

引言

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

TIMER精准延时

一、TIMER简介

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

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

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

二、TIMER定时器之精准延时功能

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

定时器功能使用片内时钟作为计数基准,以SWM190加强型定时器为例,有4个32 bit向下计数的TIMER,脉冲每一次下降沿,计数寄存器数值将减1。

每一个TIMER都可以配置定时器溢出中断。使能溢出中断,定时器溢出会触发中断操作,达到精准定时功能。

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

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

我们之前有讲到GPIO的配置方法,在这里就不在做赘述,将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_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,为中断使能。

我们加强型定时器实现0.1S触发一次,2S实现LED灯的翻转;基础定时器实现0.5S实现LED灯的翻转。

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

图片

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

图片

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

图片

四、实验现象

下载好程序后,LED实现分别2S翻转一次和0.5s翻转一次。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/318890.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【零基础入门TypeScript】TypeScript - 环境设置

目录 本地环境设置 文本编辑器 TypeScript 编译器 安装 Node.js 在 Windows 上安装 在 Mac OS X 上安装 IDE支持 视觉工作室代码 在 Windows 上安装 在 Mac OS X 上安装 在 Linux 上安装 括号 括号的 TypeScript 扩展 var message:string "Hello World"…

力扣hot100 二叉树的层序遍历 BFS 队列

👨‍🏫 题目地址 时间复杂度: O ( n ) O(n) O(n)空间复杂度: O ( n ) O(n) O(n) 😋 队列写法 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode…

工业物联网上篇——什么是IIOT?

工业物联网背后的理念是使用工业设施中“哑巴设备”多年来产生的数据。装配线上的智能机器不仅可以更快地捕获和分析数据,且在交流重要信息方面也更快,这有助于更快、更准确地做出业务决策。 信息技术(IT)和运营技术(O…

网络安全—IPSec安全策略

文章目录 网络拓扑添加策略ESP添加筛选器添加筛选器的操作另一台主机设置 AH 使用Windows Server 2003系统 网络拓扑 client1 IP 192.168.17.105client2 IP 192.168.17.106 只要保证两个主机在同一网段接口,即互相ping通即可完成策略的实现 下面的所有通讯都只是…

【Qt之Quick模块】6. QML语法详解_4 集成QML和JavaScript

QML语法详解_4 集成QML和JavaScript 1. JavaScript表达式和属性绑定1.1 属性绑定 1.2 JavaScript函数2. 从JavaScript动态创建QML对象2.1 动态创建对象2.1.1 Qt.createComponent()动态创建组件2.1.2 Qt.createQmlObject()从QML字符串创建对象 2.2 维护动态创建的对象2.3 动态删…

go执行静态二进制文件和执行动态库文件

目的和需求:部分go的核心文件不开源,例如验证,主程序核心逻辑等等 第一个想法,把子程序代码打包成静态文件,然后主程序执行 子程序 package mainimport ("fmt""github.com/gogf/gf/v2/os/gfile"…

git在本地创建dev分支并和远程的dev分支关联起来

文章目录 git在本地创建dev分支并和远程的dev分支关联起来1. 使用git命令2. 使用idea2.1 先删除上面建的本地分支dev2.2 通过idea建dev分支并和远程dev分支关联 3. 查看本地分支和远程分支的关系 git在本地创建dev分支并和远程的dev分支关联起来 1. 使用git命令 git checkout…

DrGraph原理示教 - OpenCV 4 功能 - 颜色变幻

二值化是逐像素处理,而逐像素处理会有很多效果,这主要是给人眼看的,因为像素值的变化,直观的就是图像变化,比如颜色。 颜色变幻处理 OpenCV提供了一些图片,如下: 粗看是一些风格,…

【Nginx】反向代理和负载均衡

反向代理 nginx 反向代理,就是将前端发送的动态请求由 nginx 转发到后端服务器。 server {listen 80;server_name localhost;# 反向代理,处理管理端发送的请求location /api/ {proxy_pass http://localhost:8080/admin/;#proxy_pass http://webservers/…

通过聚道云软件连接器实现金蝶软件与红圈CRM软件的无缝对接

一、客户介绍 某知名汽车行业公司,致力于为汽车行业提供全面的研发、检测和技术支持服务。该公司拥有一支高素质的研发团队和先进的实验设备,具备强大的研发能力和技术实力。同时,该公司与国内外众多知名汽车企业建立了紧密的合作关系&#…

重新认识一下 vue3 应用实例

重新认识一下 vue 应用实例 💕 创建应用实例 每个 Vue 应用都是通过 createApp 函数创建一个新的 应用实例 应用实例必须在调用了 .mount() 方法后才会渲染出来。该方法接收一个“容器”参数,可以是一个实际的 DOM 元素或是一个 CSS 选择器字符串 //…

【Java期末】学生成绩管理系统

诚接计算机专业编程任务(C语言、C、Python、Java、HTML、JavaScript、Vue等)10/15R,如有需要请私信我,或者加我的企鹅号:1404293476 本文资源下载地址:https://download.csdn.net/download/weixin_47040861/88697244 —————…