6 定时器

news2024/10/1 1:20:13

6 定时器

  • 1、基本概念
  • 2、使用库函数实现

1、基本概念

定时器的基本工作框架
在这里插入图片描述

  • STM32F103共支持8个定时器
    在这里插入图片描述

  • 假如分频器PSC的值=0,则PSC分频系数=1,表示输入1个时钟信号,CNT计数器加1,1S加1,当CNT计数器的值=3,跟ARR自动重载寄存器的值2+1相等时,就会产生一个定时器中断信号也就是3s就会产生一次定时器中断信号,并且CNT计数器清0重新计数

  • 假如分频器PSC的值=1,则PSC分频系数=2,表示输入2个时钟信号,CNT计数器加1,2S加1,当CNT计数器的值=3,跟ARR自动重载寄存器的值2+1=3相等时,就会产生一个定时器中断信号,也就是6s就会产生一次定时器中断信号,并且CNT计数器清0重新计数

  • 当 1Hz PSC=0 ARR=2 CNT=0 问 : 多长时间后触发中断呢?
    PSC分频系数为1 ARR+1为3 CNT=0 则需要3秒

  • 中断的周期=(PSC+1)*(ARR+1)/f

  • 中断的频率=f/(PSC+1)*(ARR+1)

2、使用库函数实现

在system目录下,新建TIMER4目录,打开keil工程,添加stm32f10x_tim.c,新建timer4.c和timer4.h文件
编辑timer4.h

#ifndef __TIMER4_H_
#define __TIMER4_H_
#include "stm32f10x.h"

// ARR = 4999 PSC = 7199
// 周期 = 5000 * 7200 / 72000000 = 0.5
#define ARR 4999
#define PSC 7100

void TIMER4_Init(void); // 初始化函数
void TIMER4_Start(void);// 启动定时器
void TIMER4_Stop(void); // 关闭定时器
#endif

编辑timer4.c

#include "timer4.h"
#include "stdio.h"
void TIMER4_Init(void){// 初始化函数
// 1. 打开定时器4时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
// 2. 配置定时器4工作参数
	TIM_TimeBaseInitTypeDef TIMER4_Config;
	TIMER4_Config.TIM_Prescaler = PSC; // 预分频值
	TIMER4_Config.TIM_Period = ARR; // 重装载寄存器的值
	TIMER4_Config.TIM_ClockDivision = TIM_CKD_DIV1;// 不分频 72MHz
	TIMER4_Config.TIM_CounterMode =  TIM_CounterMode_Up;// 向上计数
	TIM_TimeBaseInit(TIM4,&TIMER4_Config);
	
// 3. 配置TIME4的溢出中断
	TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);
// 4. 配置NVIC支持TIME4的中断
	NVIC_InitTypeDef NVIC_Config;
	NVIC_Config.NVIC_IRQChannel = TIM4_IRQn;
	NVIC_Config.NVIC_IRQChannelCmd =ENABLE;
	NVIC_Config.NVIC_IRQChannelPreemptionPriority=0;
	NVIC_Config.NVIC_IRQChannelSubPriority=1;
	NVIC_Init(&NVIC_Config);
}

void TIMER4_Start(void){// 启动定时器
	TIM_Cmd(TIM4,ENABLE);
}
void TIMER4_Stop(void){// 关闭定时器
	TIM_Cmd(TIM4,DISABLE);
}

书写中断函数

void TIM4_IRQHandler(void){
	// 判断是否是TIM4的update中断
	if(TIM_GetITStatus(TIM4,TIM_IT_Update)){
		// 清除中断到来位
		TIM_ClearITPendingBit(TIM4,TIM_IT_Update);
		LED2 = !LED2;
	}
}

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

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

相关文章

Linux基于设备树的字符设备驱动框架

掌握设备树是 Linux 驱动开发人员必备的技能!因为在新版本的 Linux 中,ARM 相关的驱动全部采用了设备树(也有支持老式驱动的,比较少),最新出的 CPU 其驱动开发也基本都是基于设备树的,比如 ST 新出的 STM32MP157、NXP的…

【React】详解 index.js 文件

文章目录 一、index.js文件的基本结构1. 引入必要的模块2. 渲染根组件3. 注册服务工作者(可选) 二、index.js文件的详细解析1. ReactDOM.render的作用2. 为什么使用React.StrictMode3. 服务工作者的注册 三、index.js文件的最佳实践1. 使用模块化引入2. …

缓存常见问题总结

目录 一:缓存穿透 解决方案 1.对请求增加校验机制 2.缓存空值或者特殊值 3.使用布隆过滤器 布隆过滤器原理图​编辑 哈希函数的基本特性 布隆过滤器为什么会存在误判 如何降低误判率 如何使用布隆过滤器 布隆过滤器的应用场景 如何使用布隆过滤器 第一…

QT 建立tcp服务端 TcpServer TcpSocket

基于正点原子教程,个人改编一点点(先写着,还没学客户端来验证) QTcpServer 服务端,下控制多个socket QTcpSocket 可以理解为一个TCP连接 使用客户端的流程为 1.包含network和include 2.声明QTcpServer信号 整个流程都要使用QTcpServer对象&a…

搭建pxe网络安装环境实现服务器自动部署

1.首先配置自动化脚本工具 根据自己的主机设置自己的IP 这张图选择红框下面的选则剩余空间 红帽7的初始网卡为ens33,所以部署后新机器的网卡为ens33 根据自己所要部署的版本编写合适的脚本 使用vim.ks.cfg进入脚本编写 2.配置DHCP 使用vim编写/etc/dhcp/dhcpd.conf …

深入研究Java的String常量池

文章目录 一、StringTable分析一段代码示例一示例二示例三 二、 intern1、StringTable位置2、StringTable 性能调优3、intern深入分析3.1 思考3.2 JDK6中的解释3.3 JDK7中的解释3.4 详细分析3.5 intern正确使用的例子3.6 intern使用不当的例子 一、StringTable 常量池中的字符…

清华计算几何-ElementUniqueness, MinMap, MaxGap

ElementUniqueness问题(EU) 给出一组数给出一组数据,, 判断每个数都是唯一性的或者说判断是否存在重复的. 算法思路很简单, 快速排序 遍历判断: Max(O(nlogn) O(n)) O(nlogn)算法复杂度 代码实现 bool IsEelementUniqueness(const vector<float>& Elemnts) {vect…

【数学建模】 机器学习与统计模型

文章目录 机器学习与统计模型1. 统计分布与假设检验1.1 统计量与常见统计分布常见统计分布Python代码示例 1.2 正态性检验Shapiro-Wilk检验Python代码示例 1.3 独立性检验卡方检验Python代码示例 1.4 两组样本的差异性检验独立样本t检验Python代码示例 1.5 方差分析与事后多重比…

基于Django+MySQL球馆场地预约系统的设计与实现(源码+论文+部署讲解等)

博主介绍&#xff1a;✌全网粉丝10W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术栈介绍&#xff1a;我是程序员阿龙&#xff…

学习STM32(1)--Keil软件安装与基本操作和Keil 软件高级应用

目录 1 引 言 2 实验目的 3 实验内容 3.1 认识单片机和STM32 3.2 安装、认识软件Keil和硬件STM32F103开发板 3.3 学习调试工程 3.4 Keil工程软件的配置 4 深入解析 思考一 1.以项目“12-GPIO输出—使用固件库点亮LED”为例子&#xff0c;认识本地工程文件夹&#xf…

2024下《信息安全工程师》案例简答题,刷这些就够了!

距离2024下半年软考已经越来越近了&#xff0c;不知道今年备考软考信息安全工程师的同学们开始准备了吗&#xff1f; 简答题一直是信安拿分的重点区域&#xff0c;对于许多考生来说&#xff0c;也往往是最具挑战性的部分。今天我就把那些重要的案例简答题类型整理汇总给大家&am…

招聘网站的头像如何上传?

1、某招聘网站 显示的是圆形的&#xff0c;但是上传却需要正方形的300300像素。 2、某某招聘网站 仅支持jpg格式&#xff0c;不支持png 3、某某招聘网站 支持1mb以内图片&#xff0c;格式gif,jpg,png都支持。比较友好 4、某招聘网站 这里仅支持200200像素&#xff0c;图片格…

贪心系列专题篇四

​​​​​​​ 目录 整数替换 解法一 解法二 俄罗斯套娃信封问题 堆箱子 可被三整除的最大和 距离相等的条形码 重构字符串 声明&#xff1a;接下来主要使用贪心法来解决问题&#xff01;&#xff01;&#xff01; 整数替换 题目 思路 下面将使用两种方法来解决这…

【论文阅读】—RTDETR

《DETRs Beat YOLOs on Real-time Object Detection》 最近&#xff0c;基于端到端DETR取得了显著的性能。然而&#xff0c;DETR的高计算成本限制了它们的实际应用&#xff0c;并阻碍了它们充分利用无后处理&#xff08;如非最大抑制&#xff08;NMS&#xff09;&#xff09;的…

Windows下如何像linux一样查看GPU使用情况

在linux下&#xff0c;只要使用 nvidia-smi即可看到服务器中每块卡的使用情况 但是在windows下该如何查看显卡的使用情况呢 通过网上学习发现&#xff0c;windows下有一个叫nvidia-smi.exe的程序 找到它所在的路径&#xff0c;然后在命令行中进入到这个路径&#xff0c;然后…

文件上传漏洞-HackBar使用

介绍 HackBar 是一个用于浏览器的扩展插件&#xff0c;主要用于进行网络渗透测试和安全评估。它提供了一系列方便的工具和功能&#xff0c;可以帮助用户执行各种网络攻击和测试&#xff0c;包括 XSS、SQL 注入、CSRF、路径穿越等 下载地址 可以到github上面去下载&#xff0…

傅里叶级数的C语言验证

目录 概述 1 收敛性 1.1 收敛定理 1.2 理解收敛定理 2 傅里叶级数的应用 2.1 问题描述 2.2 实现方法 3 方波函数的傅里叶验证&#xff08;C语言实现&#xff09; 3.1 方波函数 3.1.1 编写方波函数 3.1.2 程序函数验证 3.2 傅里叶级数函数实现 3.2.1 编写傅里叶级…

Android 实现左侧导航栏:NavigationView是什么?NavigationView和Navigation搭配使用

目录 1&#xff09;左侧导航栏效果图 2&#xff09;NavigationView是什么&#xff1f; 3&#xff09;NavigationView和Navigation搭配使用 4&#xff09;NavigationView的其他方法 一、实现左侧导航栏 由于Android这边没有直接提供左侧导航栏的控件&#xff0c;所以我尝试了…

Frida Hook String构造函数

前言 在实际Android应用开发中&#xff0c;无论是使用多么复杂的算法对字符串进行加密&#xff0c;然而开发者常常会构造出字符串的实例。因此&#xff0c;我们可以通过使用Frida hook String类的构造函数来追踪这些实例的构造位置&#xff0c;然后可以通过构造实例的地方栈回…

Java GUI制作双人对打游戏源码以及应用程序分享

文章目录 前言一、可执行程序二、源码以及图片资源总结 前言 在之前的文章展示了如何构建一款双人对打游戏&#xff0c;博文链接如下&#xff1a; https://blog.csdn.net/qq_43646281/article/details/137748943?spm1001.2014.3001.5501 感兴趣的小伙伴可以再去回顾一下: 原文…