使用STM32的SysTick实现精准延迟

来源:本站
导读:目前正在解读《使用STM32的SysTick实现精准延迟》的相关信息,《使用STM32的SysTick实现精准延迟》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《使用STM32的SysTick实现精准延迟》的详细说明。
简介:今天介绍使用STM32的SysTick实现精准延迟,大家一起来学习一下。

使用SysTick的普通计数模式对延迟进行管理.

static u8fac_us=0;//us延时倍乘数

static u16 fac_ms=0;//ms延时倍乘数

//初始化延迟函数

void delay_init(u8 SYSCLK)

{

SysTick->CTRL&=0xfffffffb;//bit2清空,选择外部时钟*/

fac_us = SYSCLK/8;

fac_ms = (u16)fac_us*1000;

}

//延时nms

//SysTick->LOAD为24位寄存器,所以,最大延时为:

//nms<=0xffffff*8*1000/SYSCLK

//对72M条件下,nms<=1864

void delay_ms(u16 nms)

{

u32 temp;

SysTick->LOAD=(u32)nms*fac_ms;// 当倒数至零时,将被重装载的值 */

SysTick->VAL =0x00;// VAL寄存器中存放着当前倒计数的值*/

SysTick->CTRL=0x01 ;// Systick定时器的使能位开始计时 */

do

{

temp=SysTick->CTRL;

}

while(temp&0x01&&!(temp&(1<<16)));//首先检查定时器使能位是否为1

//Systick定时器倒数至零后位16被置1 被读取后该位置0

//等待时间到达或定时器关闭*/

SysTick->CTRL=0x00;//关闭计数器

SysTick->VAL =0X00;//清空计数器

}

//延时nus

//nus为要延时的us数.

void delay_us(u32 nus)

{

u32 temp;

SysTick->LOAD=nus*fac_us; //时间加载

SysTick->VAL=0x00;//清空计数器

SysTick->CTRL=0x01 ;//开始倒数

do

{

temp=SysTick->CTRL;

}

while(temp&0x01&&!(temp&(1<<16)));//等待时间到达

SysTick->CTRL=0x00;//关闭计数器

SysTick->VAL =0X00;//清空计数器

}

提醒:《使用STM32的SysTick实现精准延迟》最后刷新时间 2024-03-14 00:57:00,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《使用STM32的SysTick实现精准延迟》该内容的真实性请自行鉴别。