STM32完全学习——使用SysTick精确延时(阻塞式)

一、SysTick相关寄存器

首先关于SysTick寄存器的数据在下面这个文件里面可以找到,平时那个数据手册是没有的。其次我这边使用的开发板是F407的开发板,关于这个寄存器的数据都是来自下面这个文件的截图,一般只会用到这3个寄存器。

二、使用标准库对SysTick进行初始化

首先我们知道当你使用标准库的时候,他已经默认帮你将系统时钟那设置成了168MHz,因此SysTick时钟为168MHz,在初始化里面我选择了8分频,这个样延时的时间可以变得长一点。这里的SCLK的值为168,也就是系统时钟。

cpp 复制代码
void systick_init(uint8_t SCLK)
{
    SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
    f_us = (SCLK/8);      //定时1微秒所需要的初始值  这个是两个全局变量
    f_ms = f_us * 1000;   //定时1毫秒所需要的初始值
}

三、编写精确延时函数

cpp 复制代码
//定时时间范围最大798915个微秒
void delayus(uint32_t us)
{
    uint32_t temp = 0;
    SysTick->LOAD = f_us*us;   
    SysTick->VAL   = 0x00;   //清除计数器
    SysTick->CTRL |= 0x01;   //打开计数器
    do 
    {
        temp = (SysTick->CTRL) & (1 << 16);  //判断计数是否到了0
    }while((!temp));
    SysTick->VAL   = 0x00;  //清除计数器
    SysTick->CTRL &= ~0x01; //关闭计数器
}
//定时时间范围最大798个毫秒秒
void delaynms(uint32_t ms)
{
    uint32_t temp = 0;
    SysTick->LOAD = f_ms*ms;
    SysTick->VAL   = 0x00; 
    SysTick->CTRL |= 0x01;
    do 
    {
        temp = (SysTick->CTRL) & (1 << 16);
    }while((!temp));
    SysTick->VAL   = 0x00; 
    SysTick->CTRL &= ~0x01;

}


void delayms(uint32_t ms)
{
    uint32_t i = 0;
    for (i=0; i<=ms; i++)
    {
        delaynms(1);
    }
}

四、关于延时不准确的原因

刚开始我使用这个方法进行延时,确实能达到效果,但是我通过示波器来查看时,发现延时并不准确,而且误差有点大。那我就在想是不是系统时钟的问题,一看还真是,因为F407的标准库里面默认你外部HSE接的是25MHz的晶振,但是我发现我的开发板上面接的是8MHz的晶振,应该就是系统里面帮我初始化时钟的时候,没有真正的初始化为168MHz的时钟。通过查看标准库的代码,并作出了下面的修改就可以了。

相关推荐
一条破秋裤2 分钟前
02_注册设备号_从主次设备号到成对注销
学习
@codercjw27 分钟前
企业实战电机和传感器选型
学习
Zhao136824553911 小时前
国产替代DPE5500百兆以太网控制芯片兼容W5500
嵌入式硬件·物联网
zhangrelay1 小时前
用ROS2Lyrical实验报告册思路重做蓝桥云课ROS1实验并改进
linux·笔记·学习·ubuntu·机器人
m4Rk_2 小时前
【论文阅读】Agent 记忆机制(91):THEANINE——不删除过时记忆,让 Agent 记住事情是如何变化的
论文阅读·人工智能·学习·开源·github
yuehuaxin012 小时前
LP20R100FN 同步整流|3C 认证适配器 CCM 工况倒灌、温升超标样机避坑解析
嵌入式硬件·智能家居·适配器模式·智能硬件
我命由我123452 小时前
Photoshop - Photoshop 面板和菜单
学习·职场和发展·产品运营·求职招聘·职场发展·产品经理·photoshop
国科安芯2 小时前
商业立方星平台中高集成度抗辐射MCU的功耗优化与批量化应用可行性探讨
单片机·嵌入式硬件·架构·risc-v·抗辐射·as32x601
一木 之林2 小时前
RAG开发学习总结:从 LangChain 入门到检索增强生成链路的全栈实战-4/6
人工智能·学习·计算机视觉·langchain
LHR_friendship2 小时前
HCIP课程全部内容
网络·笔记·学习·hcip·华为ensp