STM32F407 滴答定时器

news2024/11/25 1:08:49

介绍STM32F407滴答定时器配置方法、使用方式,封装延时函数得到精确的时间。

【1】介绍滴答定时器的章节

STM32F407参考手册中第10章介绍了滴答定时器的校准值。

img

M4权威指南介绍滴答定时器的章节,M3权威指南中与M4权威指南中的介绍一样。

img

img

【2】滴答定时器的示例代码

在sys.c文件中增加滴答定时器的代码

#include "sys.h"
/*
函数功能:设置NVIC中断控制器优先级
函数形参:
		IRQn_Type IRQn:中断线
		uint32_t PreemptPriority:抢占优先级
		uint32_t SubPriority:次优先级
*/
void SetNVICPriorityGrouping(IRQn_Type IRQn,uint32_t PreemptPriority, uint32_t SubPriority)
{
	 uint32_t Priority;
	 NVIC_SetPriorityGrouping(NVIC_PriorityGroup_2); //设置优先级分组,每个工程只能设置一次
   Priority=NVIC_EncodePriority(NVIC_PriorityGroup_2,PreemptPriority,SubPriority); //编码优先级
   NVIC_SetPriority(IRQn,Priority); //设置优先级
   NVIC_EnableIRQ(IRQn);
}

/*
函数功能:滴答时钟初始化配置
注意:SysTick->LOAD是一个24位的寄存器,单次最大延时时间为894.7848ms
说明:18750是滴答定时器的校准值。当重载值为18750时,滴答定时器刚好产生1ms的中断
*/
void SysTickInit(void)
{	
	SysTick->CTRL&=~(1<<2); //选择外部时钟源	
	SysTick->CTRL|=1<<1;    //开启中断
	SysTick->LOAD=18750*800;//重装载寄存器,最大24位,最大值:16777215
	SysTick->VAL=0; 			  //清除CNT计数值
	SysTick->CTRL|=1<<0;    //SysTick 定时器的使能位
}

/*
函数功能:滴答时钟中断服务函数
*/
void SysTick_Handler(void)
{
	  LED0=!LED0;
		LED1=!LED1;
}

【3】使用滴答定时器编写延时函数

在delay.c文件增加以下代码

#include "delay.h"

/*
功能  :毫秒级别的延时函数
参数  :填入延时的时间
返回值:无
说  明:频率在168MHZ情况下使用
*/
void DelayMs_168M(u32 time)
{
	u32 a,b,c;
	for(a=0;a<time;a++)
		for(b=0;b<100;b++)
			for(c=0;c<450;c++);
}


/*
功能  :微秒级别的延时函数
参数  :填入延时的时间
返回值:无
说  明:频率在168MHZ情况下使用
*/
void DelayUs_168M(u32 time)
{
	u32 k;
	while(time--)
	{
		k=40;
		while(k--);
	}
}

/*
函数功能:延时函数初始化
*/
void DelayInit(void)
{
	SysTick->CTRL&=~(1<<2);  //选择外部时钟源	
	SysTick->CTRL&=~(1<<1);  //关闭中断
}


/*
函数功能:延时毫秒的函数
函数参数:毫秒的时间
*/
void DelayMs(u32 time)
{
	u32 stat;
	SysTick->LOAD=18750*time; //重装载寄存器,最大24位,最大值:16777215
	SysTick->VAL=0; 			   //清除CNT计数值
	SysTick->CTRL|=1<<0;     //SysTick 定时器的使能位
	do
	{
			stat=SysTick->CTRL;  //获取状态位
	}while((!(stat&1<<16))&&(stat&1<<0));
	SysTick->CTRL=0x0; 
}


/*
函数功能:延时微秒的函数
函数参数:毫秒的时间
*/
void DelayUs(u32 time)
{
	u32 stat;
	SysTick->LOAD=18.750*time; //重装载寄存器,最大24位,最大值:16777215
	SysTick->VAL=0; 			   //清除CNT计数值
	SysTick->CTRL|=1<<0;     //SysTick 定时器的使能位
	do
	{
			stat=SysTick->CTRL;  //获取状态位
	}while((!(stat&1<<16))&&(stat&1<<0));
	SysTick->CTRL=0x0; 
}


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

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

相关文章

Windows 引导启动流程详述(BIOS-UEFI)

Windows 启动流程详述 BIOS 和 UEFI 的由来BIOS 存在哪里BIOS 程序的功能BIOS 和 UEFI 的发展由来如何查看当前计算机是什么方式引导启动呢&#xff1f;Linux 下如何查看 BIOS 大小&#xff1f; 启动流程详述使用 BIOS 进行系统启动流程使用 UEFI 进行系统启动流程SEC阶段PEI阶…

专项练习15

目录 一、选择题 1、如果要打开名为 “window2"的新窗口&#xff0c;可以通过&#xff08;&#xff09; 2、下列事件哪个不是由鼠标触发的事件&#xff08;&#xff09; 3、Angular指令中哪种作用域可以继承父scope 4、下列哪些事件不支持冒泡?&#xff08;&#xff09;…

微信小程序学习记录2 案例分享<智能家居UI>

效果 思路 页面分为4块 前三块 采用同样的class 替换三张矢量图 绑定三个单片机返回的JSON值 最后一块又分为左右两部分 左边部分 采用switch组件 绑定三个事件 右边部分则是普通的文字

记录生产mysql死锁解决过程

最近生产上每个星期都会有几次死锁告警异常&#xff0c;今天终于给处理了&#xff0c;待后续观察&#xff0c;记录下整个过程。 环境&#xff1a;springboot、mybatis、mysql(RC隔离级别) 表结构&#xff1a; CREATE TABLE table1 (id bigint NOT NULL AUTO_INCREMENT,prize…

ASP.NET Core MVC 从入门到精通系列文章(完)

随着技术的发展&#xff0c;ASP.NET Core MVC也推出了好长时间&#xff0c;经过不断的版本更新迭代&#xff0c;已经越来越完善&#xff0c;本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容&#xff0c;适用于初学者&#xff0c;在校毕业生&#xff0c…

redis高可用与持久化

文章目录 一、Redis 高可用1. 概念2. 高可用技术以及作用2.1 持久化2.2 主从复制2.3 哨兵2.4 集群 二、Redis 持久化1. 持久化的功能2. Redis 持久化方式 三、RDB 持久化1. 概述2. 触发条件2.1 手动触发2.2 自动触发2.3 其他自动发机制 3. 执行流程4. 启动时加载 四、AOF 持久化…

自动驾驶货车编队行驶-车辆通讯应用层数据交互要求

1 范围 本文件规定了合作式自动驾驶货车编队行驶时车辆通信应用层数据交互的通信系统架构、通用要求、 数据交互要求、消息层数据集定义等。本文件仅涉及编队成员内部进行编队控制及成员管理相关的车-车通 信交互&#xff0c;不涉及编队与其他实体&#xff08;云平台、路侧单元…

关于jetBrains的插件translation的使用

文章目录 前言国内使用问题关于无法翻译问题关于无法语音解析问题关于百度翻译Api获取关于百度引擎的invalid account(未解决)关于阿里翻译Api获取关于阿里翻译引擎Wrong request parameter(未解决)有道翻译Api关于有道Ip Address错误(未解决) 前言 translation是一个非常好用…

chatgpt赋能python:Python长浮点型介绍

Python长浮点型介绍 Python是一种强大的编程语言&#xff0c;通过其众多的数据类型&#xff0c;使开发人员可以快速开发复杂的应用程序。其中&#xff0c;Python长浮点型就是Python支持的一种数据类型。长浮点型是指Python可以处理的浮点数的精度可以高达256位。 Python长浮点…

大像素全景,如何让自己的VR全景变得具有高级感?

一个成功的VR全景作品&#xff0c;如果想要在商业领域上获得一定影响力&#xff0c;那么VR全景本身的质量就是关键&#xff0c;如何让自己的VR全景变得具有高级感呢&#xff1f; 从艺术表达手法上&#xff0c;航拍是对VR全景很好的诠释&#xff0c;通过VR全景航拍&#xff0c;人…

Redis进阶 - Redis分片集群

原文首更地址&#xff0c;阅读效果更佳&#xff01; Redis进阶 - Redis分片集群 | CoderMast编程桅杆https://www.codermast.com/database/redis/redis-advance-sharded-cluster.html 搭建分片集群 主从和哨兵可以解决高可用、高并发读的问题。但是依然有两个问题没有解决&a…

ROS自带OpenCV和本地OpenCV版本冲突问题解决

1、报错信息 首先catkin_make编译功能包没有任何问题&#xff0c;100%生成目标文件&#xff0c;但是报了警告&#xff1a;库文件libmyslam.so需要的是libopencv_core.so.3.4&#xff0c;可能会与libopencv_core.so.3.2冲突。根据工程经验&#xff0c;警告不用管&#xff0c;直…

《设计模式》中介者模式

《设计模式》中介者模式 定义&#xff1a; 中介者模式又称为调停者模式&#xff0c;用一个中介对象封装一系列的对象交互&#xff0c;中介者使各对象不需要显式地相互引用&#xff0c;从而使其可以松散耦合&#xff0c;独立地改变它们之间的交互。属于行为型设计模式。 中介者…

前端解析后台返回得文件流导出得 pdf为空

封装的方法 download(res, type, filename) {// 创建blob对象&#xff0c;解析流数据const blob new Blob([res.data], {// 如果后端没返回下载文件类型&#xff0c;则需要手动设置&#xff1a;type: application/pdf;chartsetUTF-8 表示下载文档为pdf&#xff0c;如果是word则…

2023上半年软考系统分析师科目一整理-13

2023上半年软考系统分析师科目一整理-13 给定关系模式 R < U &#xff0c;F >&#xff0c; U {A&#xff0c;B&#xff0c;C&#xff0c;D &#xff0c;E} &#xff0c; F {B→A &#xff0c;D→A &#xff0c;A→E &#xff0c;AC→B }&#xff0c;则 R 的候选关键字为…

2023上半年软考系统分析师科目一整理-11

2023上半年软考系统分析师科目一整理-11 给定关系R(A,B,C,D,E) 和关系S(D,E,F,G&#xff09;&#xff0c;对其进行自然连接运算R ▷◁S后其结果集的属性列为( B )。 A. R.A, R.B, R.C, R.D, R.E, S.D, S.E B. R.A, R.B, R.C, R.D, R.E, S.F, S.G C. R.A, R.B, R.C, R.D, R.E,…

爬虫---某翻译响应解密和sign逆向

目标网址接口&#xff1a;aHR0cHM6Ly9kaWN0LnlvdWRhby5jb20vd2VidHJhbnNsYXRl 仅供学习交流使用&#xff0c;非商业用途&#xff0c;如有侵权&#xff0c;请联系删除!!!仅供学习交流使用&#xff0c;非商业用途&#xff0c;如有侵权&#xff0c;请联系删除!!!仅供学习交流使用&…

软件测试技能,JMeter压力测试教程,设置集合点(十七)

一、前言 LoadRunner 中可以设置一个集合点&#xff0c;设置多个虚拟用户等待到一个时间点&#xff0c;到齐后一起发请求达到并发的目的 jmeter 中使用 同步定时器 Synchronizing Timer实现 LoadRunner 中集合点的功能&#xff0c;模拟多用户并发测试&#xff0c;即多个线程在…

K折交叉验证

目的 模型在一套训练集和数据集上表现优秀&#xff0c;不能说明问题&#xff0c;只有在众多不同的训练集和测试集上表现都优秀&#xff0c;模型才具有真正的泛化能力。 通过交叉验证&#xff0c;验证模型的泛化能力&#xff0c;帮助我们认识模型。 常用方法之K折交叉验证 分…

一步一步学OAK之六:通过OAK相机实现特征检测

目录 特征检测Setup 1: 创建文件Setup 2: 安装依赖Setup 3: 导入需要的包Setup 4: 创建pipelineSetup 5: 创建节点创建相机节点创建特征检测节点创建数据交互的节点 Setup 6:设置相关属性设置相机的相关属性设置特征检测器的初始配置 Setup 7: 建立链接关系建立相机和特征跟踪器…