嵌入式开发与应用实验三——定时器实现一秒闪烁一次

news2024/11/17 7:46:33

一、实验目的

1. 掌握使用 STM32 的通用定时器 TIM6/7实现 1s 定时的方法;

2. 掌握 STM32 的定时器的原理及基本功能;

3. 掌握定时器的基本配置功能。

二、实验内容

  编程实现,利用定时器TIM6/7定时1秒,每隔1秒控制PBO端口 LED灯闪烁一次,同时TFT上显示次数。

三、实验器材(设备、元器件)

(一)装有Keil uVision5软件的计算机一台

(二)STM32f103VET6的开发板一块

四、实验步骤

1. 定时/计数器的工作原理

  使用精准的时基,通过硬件的方式,实现定时功能定时器核心就是计数器定时/计数器实质上是一个加1计数器。它随着计数器的输入脉冲进行自加1,也就是每来一个脉冲,计数器就自加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使相应的中断标志位置1,向CPU发出中断请求(中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。

2. TIM(Timer)定时器

(1)定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断;

(2)16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时;

(3)不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能;

(4)根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型:

(5)基本定时器框图

3. 定时器基本配置

  设置自动重装载寄存器ARR的值为10000,设置时钟预分频器为72,则驱动计数器的时钟CK_CNT=CK_INT/(71+1)=1MHz,则计数器计数一次的时间为1/CK_CNT=1s。当计数器计数到ARR的值为10000时,产生一次中断,则一次中断时间为1/CK_CNT×ARR=1s。

(1)开启定时器时钟,即内部时钟;

  使用SystenInit函数初始化的时候,各时钟频率如下:SYSCLK = 72M   AHB时钟 = 72M   APB1时钟=36M,所以APB1的分频系数=AHB/APB1=2,由此可得CK_INT的时钟频率为2*36M = 72M

  定时器时钟TIMxCLK,即内部时钟CK_INT,经APBL预分频器后分猕提供。如果APB1预分频系数等于1,则频率不变,否则频率乘以2。库函数中 APB1预分频的系数是2,即PCLK1=36 MHz,所以定时器时钟中TIMxCLK=36x2=72 MHz。
(2)TIM_Period:自动重装载寄存器周期的值(计数值);

  定时器周期,即设定自动重载寄存器的值,在事件生成时更新到影子寄存器,可设置范围为0-65535。自动重载寄存器ARR是一个16位的寄存器,装着计数器能计数的最大数值。当计数到这个值时,如果使能了中断的话,定时器就产生溢出中断。


(3)TIM_Prescaler:定时器预预分频数器设置为72;

  定时器时钟经过PSC预分频器之后,即CK_CNT,用来驱动计数器计数。PSC是一个16 位的预分频器,可以通过定时器时钟 TIMxCLK对1~65536的任何一个数进行分频。具体计算方式为:CK_CNT=TIMxCLK/(PSC+1)。

(4)TIM_CounterMode:定时器计数方式,可分为向上计数向下计数以及中心对齐模式,基本定时器只能向上计数,且没有配置计数模式的寄存器,默认向上。

这里我们将计算模式设置为向上计算模式,也就将DIR位设为0。

(5)TIM_ClockDivision:时钟分频,设置定时器时钟CK_INT频率与数字滤波器采样时钟频率分频比,基本定时器没有此功能,不用设置;
(6)初始化定时器;初始代定时器房动定时器无限循环;
(7)清除计数器中断标志位;
(8)开启计数器CN中断;

  该寄存器是用来计数的,不需要进配置,在将定时器打开以后便自动开始计数,直到与ARR寄存器中的值相匹配产生溢出事件。

4. 使能定时器更新中断,开启定时器计数,配置定时器中断优先级

CEN:使能计数器

0:禁止计数器;   1:使能计数器。

注:在软件设置了CEN之后,外部时钟、门控模式和编码器模式才能工作,触发器可以自动地通过硬件设置CEN位。

在单脉冲模式下,当发生更新事件时,CEN被自动清除。

(1)同时使能CEN位,让CK_CNT时钟开始工作,驱动计数器CNT计数。

(2)设置中断分组为0,抢占优先级为0,响应优先级为3,基本定时器中断优先级配置如下:


5.编写中断服务函数

  定时器中断一次的时间是1s,定义一个全局变量Cnt,每当进一次中断的时候,由Cnt来记录进入中断次数。如果想实现一个1s的定时,只需要判断Cnt是否等于1000即可(1000个1ms就是1s);然后主函数把Cnt清除,重新计数,一次循环往复。在中断服务程序中一定要把相应的中断标志位清除掉,它不会硬件自动清除。

五、实验数据及结果分析

通过以上实验得出以下数据

1. 主函数部分如下:

2. 定时器的配置如下:

3. Tim.h部分:

4. GPIO的配置如下:

5. led.h部分:

6. 定时器中断服务程序如下:

7. 程序编译结果如下:

8. 软件仿真波形图如下:

9. 硬件仿真结果如下:实现的是PB5LED灯的1s亮灭

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

动态加载类对象

目录 框架时序图类图 ros中提供了动态加载class的方式。这样可以做到应用代码和class所在的so解耦合。一般情况下,使用dlopen动态加载C风格函数,C风格的类无法直接使用dlopen加载,通过ros中的这种方式,可以做到动态加载。 其思想核…

Gmsh:一个开源的三维有限元网格生成工具

Gmsh 是一个开源的三维有限元网格生成工具,主要用于在计算流体力学(CFD)和有限元分析(FEA)中生成复杂几何体的网格。它具有强大的几何建模、网格生成、求解器接口和后处理功能。Gmsh 适用于多种物理领域的模拟,包括流体力学、结构分析、电磁学等。 下载地址:https://gm…

软件工程知识点总结(3):需求分析(二)——分析模型建模

1 类(Class)、对象(Object)和它们之间的关系是面向对象技术中最基本的元素。类图 技术是 OO 方法的核心。 类图标加上它们之间的关系就构成了类图。 说明:类图描述类和类之间的静态关系。它不仅显示了信息的结构,同时还描述 了系统的行为。类图中可以包…

力扣第42题 接雨水

前言 记录一下刷题历程 力扣第42题 接雨水 接雨水 原题目:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&…

二进制方式部署K8s高可用集群

1 二进制方式部署K8s高可用集群 1.1 kubeadm 和二进制安装 k8s 适用场景分析 kubeadm 是官方提供的开源工具,是一个开源项目,用于快速搭建 kubernetes 集群,目前是比较方便和推荐使用的。kubeadm init 以及 kubeadm join 这两个命令可以快速…

MySQL—死锁

什么是死锁? 好比是两个事务都在等待对方释放锁,之后进行下一步操作,但是最后双方都没有释放资源,所以导致一直处于等待的状态。 但是服务器不会让死锁的状态一直持续,会关闭其中一个影响较小的事务(右边的…

紫光展锐完成Android 15同步升级,驱动技术创新与生态共赢

近日,紫光展锐宣布,展锐5G移动平台T820、T770、T765、T760、T750以及4G平台T620、T619、T616、T615、T612、T606,完成Android 15同步升级。相较于过往Android发布,今年同步升级Android 15主要有三大提升: ■ 紫光展锐实…

SaToken认证授权快速上手

SA-TOKEN认证授权快速上手 SaToken简介认证授权实现1 创建5张测试基础表2 配置文件3 Sa-Token的全局拦截器4 自定义权限认证接口扩展5 SaToken用户控制层 测试验证用户2登录验证权限用户1登录验证权限项目代码结构 SaToken简介 SaToken 是一个轻量级 Java 权限认证框架&#x…

【信号】信号的产生

信号的概念 什么是信号?我们生活中的红绿灯,闹钟,外面电话等等这些都是信号,我们是怎么认识这些信号的,我们认识这些信号,并且知道这些信号的处理方法,对于进程来说,也会认识相应的…

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理 控制平面(Control plane) kube-apiserver etcd kube-scheduler kube-controller-manager cloud-controller-manager 小结 节点组件(Node) container runtime Pod kubelet ku…

Chrome、Edge、360及Firefox浏览器加载多个ActiveX插件的介绍

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品,致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器,实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefo…

vc-align源码分析 -- ant-design-vue系列

vc-align源码分析 源码地址:https://github.com/vueComponent/ant-design-vue/tree/main/components/vc-align 1 基础代码 1.1 名词约定 需要对齐的节点叫source,对齐的目标叫target。 1.2 props 提供了两个参数: align:对…

成为优秀程序员-代码篇

1. 序言 刚毕业参加工作时候,公司正在快速扩张,我入职的时候组内刚刚招了一大波人,当时leader提出集体cr代码来拉齐团队内的编码规范,每当有对于相对重要改动大的项目就会集体cr代码,老板想法初衷是好的,但…

esp32 gpio 初始化不同类型的管脚,产生脉冲,发生中断

硬件:D4与D18 连接,二极管接D15与3.3v脚 图片 二极管同期性点亮,间隔1秒 参考esp32官网程序,从此程序可以看出,中断程序没有处理任何数据,只是把中断发生的事件存入队列。而用另一新线程来处理中断事务。…

GNSS CTS GNSS Start and Location Flow of Android15

目录 1. 本文概述2.CTS 测试3.Gnss Flow3.1 Gnss Start Flow3.2 Gnss Location Output Flow 1. 本文概述 本来是为了做Android 14 Gnss CTS 的相关环境的搭建和测试,然后在测试中遇到了一些问题,去寻找CTS源码(/cts/tests/tests/location/src/android/l…

Vue3-05_组件高级

背景 对组件的进一步了解,如组件之间通信等知识点,根据教程实现购物车功能,并修复原本的bug. watch 侦听器 用途 watch 侦听器允许开发者监视数据的变化,从而针对数据的变化做特定的操作。例如,监视用户名的变化并发起请求&am…

大模型AI一体机对行业的帮助

大模型AI一体机,如AntSKPro AI离线知识库一体机,是专门为企业和机构设计的集成系统,旨在提供高效的人工智能服务。这类一体机通常包含预训练的大型机器学习模型,以及必要的硬件和软件资源,以支持复杂的数据处理和分析任…

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…

网易云音乐歌单下载器

最近要帮小朋友下载一些小学的诗词mp3,找了各种工具,还是这个好使 yun-playlist-downloader: 网易云音乐歌单下载器 特性 支持歌单 / 专辑 / 电台音质选择下载超时 / 重试再次下载默认跳过已下载部分, 使用 content-length 匹配自定义文件名下载进度显…

【代码随想录训练营第42期 Day53打卡 - 图论Part4 - 卡码网 110. 字符串接龙 105. 有向图的完全可达性

目录 一、个人感受 二、题目与题解 题目一:卡码网 110. 字符串接龙 题目链接 题解:BFS哈希 题目二:卡码网 105. 有向图的完全可达性 题目链接 题解:DFS 三、小结 一、个人感受 对于两大基本搜索: 深度优先搜…