栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【STM32标准库】【自制库】软件延迟(使用滴答定时器)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【STM32标准库】【自制库】软件延迟(使用滴答定时器)

文章目录
  • 滴答定时器
    • 简介
    • 初始化
    • 思路
    • 代码
  • 成品

文章基于适用于STM32F4系列,作者使用STM32F401CCU6开发板。
本文章基于此系列和开发板展开讨论。

滴答定时器 简介

官方名称为SysTick,是一个简单的定时器,常用于制作延迟函数

初始化

我们就是用这个定时器制作延迟函数
使用这个函数可以快速初始化滴答定时器

void SysTick_Config(unit32_t ticks);

调用这个函数可以快速设置

  • 时钟频率为AHB频率(系统频率)(见时钟系统)
  • 中断计数值为传入的ticks(也就是通用定时器的定时器周期)
  • 开启中断
SystemCoreClock 				//宏定义 系统时钟频率(单位Hz)
void SysTick_Handler(void);			//滴答定时器的中断服务函数

所以,中断触发时间间隔为

( ticks + 1 ) / SystemCoreClock 单位s

思路

利用滴答定时器的中断,每隔1us使变量-1,直到其为0,可以产生任意长度的微秒时间间隔,注意要给一个高中断优先级,详情见中断
非常简单

代码

微秒延迟

uint32_t Delay_time=0;								//多个函数调用且不能释放,需要全局变量
void Delay_us(uint32_t time)
{
	SysTick_Config((SystemCoreClock/1000000)-1);	//设置中断频率为1us触发一次
	NVIC_SetPriority(SysTick_IRQn,0);				//给定时器个高中断优先级
	Delay_time=time;								//将时间值输入到全局变量中
	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;			//打开SysTick定时器
	while(Delay_time);								//等待全局变量归零,占用cpu
	SysTick->CTRL|=~SysTick_CTRL_ENABLE_Msk;		//关闭SysTick定时器
}

//每隔1us触发中断
void SysTick_Handler(void)
{
	if(Delay_time)
	{
		Delay_time--;								//每1us减一
	}
}

毫秒,秒,分延迟
通过调用微秒延迟实现

void Delay_ms(uint32_t time)
{
	while(time--)
	{
		Delay_us(1000);
	}
}

void Delay_s(uint32_t time)
{
	while(time--)
	{
		Delay_ms(1000);
	}
}
void Delay_min(uint32_t time)
{
	while(time--)
	{
		Delay_s(60);
	}
}

成品

所有文件均可免费下载
CSDN

链接:百度网盘
提取码:n8jz

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/864865.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号