LOAD = t" />
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

stm32delay函数怎么写

科技绿洲 来源:网络整理 作者:网络整理 2023-12-21 17:53 次阅读

STM32的延时函数可以使用SysTick定时器来实现。SysTick定时器是一个24位的计数器,它可以在每个时钟周期自动减少计数值,直到计数值为0时触发中断。我们可以利用SysTick定时器的特性来实现精确的延时函数。

以下是一个实现延时函数的示例代码:

#include "stm32xxxx.h"

void SysTick_Handler(void)
{
// 在这里可以写一些需要周期执行的操作,但是要尽量保持简洁
}

void delay_us(uint32_t us)
{
uint32_t ticks = us * (SystemCoreClock / 1000000); // 将微秒转换为滴答数

SysTick- >LOAD = ticks - 1; // 设置定时器加载值
SysTick- >VAL = 0; // 清空当前计数值
SysTick- >CTRL |= SysTick_CTRL_ENABLE_Msk; // 启动定时器

while (!(SysTick- >CTRL & SysTick_CTRL_COUNTFLAG_Msk)); // 等待定时器倒计数完毕

SysTick- >CTRL &= ~SysTick_CTRL_ENABLE_Msk; // 关闭定时器
}

void delay_ms(uint32_t ms)
{
while (ms--)
{
delay_us(1000); // 延时1毫秒
}
}

int main()
{
// 你的程序逻辑
// ...

while (1)
{
// 你的程序逻辑
// ...
}

return 0;
}

在这个例子中,我们通过SysTick定时器的中断来实现延时函数。首先,我们定义了两个延时函数delay_usdelay_ms,它们分别用来延时指定的微秒数和毫秒数。

在delay_us函数中,我们首先计算需要延时的滴答数,然后设置SysTick的LOAD寄存器为滴答数减1,清空当前计数值,并启动定时器。接着,我们使用一个循环等待直到定时器倒计数完毕,即SysTick_CTRL_COUNTFLAG位被置位。最后,我们关闭定时器并结束函数。

在delay_ms函数中,我们调用delay_us函数来实现毫秒级的延时。我们通过循环递减ms的方式来实现毫秒级的延时,每次循环调用一次delay_us函数延时1毫秒。

在main函数中,我们可以在你的程序逻辑中调用延时函数来实现需要的延时效果。你可以在while循环中重复调用延时函数来实现周期性的延时效果。

需要注意的是,由于SysTick定时器是由SysTick_Handler中断驱动的,所以你不能在SysTick_Handler中写太多的代码,以免影响延时的准确性。建议在SysTick_Handler中只加入必要的代码,并保持简洁。

以上是一个简单的基于SysTick定时器的延时函数的实现。你可以根据自己的需求进行修改和改进,比如添加更多的延时函数、增加更高的精度等。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2240

    文章

    10675

    浏览量

    348869
  • 计数器
    +关注

    关注

    32

    文章

    2127

    浏览量

    93011
  • 定时器
    +关注

    关注

    23

    文章

    3148

    浏览量

    112060
  • 函数
    +关注

    关注

    3

    文章

    3911

    浏览量

    61313
收藏 人收藏

    评论

    相关推荐

    关于arm中的delay函数求助

    在以前用Keil开发单片机可以察看单条语句的执行时间,可以简单的几条语句构成delay_1ms的程序。请问ads1.2开发arm中在axd仿真时有类似的功能吗?没有的话,要写一个简单的delay 1ms函数怎样
    发表于 05-18 16:01

    汇总stm32 delay文件

    stm32 delay文件总结delay.h#ifndef __DELAY_H#define __DELAY_H #include "sys
    发表于 08-11 06:12

    STM32 delay函数有哪些应用

    STM32delay函数应用应用与说明Cortex M4内核编程手册有关时钟系统的内容定时函数的实现delay_init 函数
    发表于 08-23 06:23

    STM32 USART库函数代码怎么

    STM32 USART库函数代码怎么
    发表于 12-10 06:49

    怎样去解决STM32F103ZET6库函数程序移植的Delay函数异常问题

    为什么STM32F103ZET6库函数程序移植到STM32F103C8T6时Delay函数会发生异常呢?其解决方法是什么?
    发表于 12-15 06:58

    LED闪烁开发之while循环函数delay延时函数的资料概述

    本文档的主要内容详细介绍的是LED闪烁开发之C语言常用的预处理命令和while循环函数delay延时函数的资料概述免费下载。
    发表于 11-12 08:00 15次下载
    LED闪烁开发之while循环<b class='flag-5'>函数</b>和<b class='flag-5'>delay</b>延时<b class='flag-5'>函数</b>的资料概述

    51单片机延时函数delay的编写实例函数和资料免费下载

    本文档的主要内容详细介绍的是51单片机延时函数delay的编写实例函数和资料免费下载。
    发表于 07-17 17:39 2次下载
    51单片机延时<b class='flag-5'>函数</b><b class='flag-5'>delay</b>的编写实例<b class='flag-5'>函数</b>和资料免费下载

    stm32中的io函数 STM32中的IO操作

    STM32系列单片机芯片的库函数有很多种,而负责IO操作的库函数是GPIO,GPIO函数STM32单片机头文件
    的头像 发表于 07-22 15:29 1.3w次阅读

    STM32单片机-库函数】SysTick延时—delay

    : SysTick延时函数头文件 /* --------------------------------------------------------- */#ifndef _DELAY_H_#define _DELAY
    发表于 11-24 19:06 12次下载
    【<b class='flag-5'>STM32</b>单片机-库<b class='flag-5'>函数</b>】SysTick延时—<b class='flag-5'>delay</b>

    c51简单delay函数,不同类型同值字符的延时时间不同

    c51delay函数不同类型参数的不同效果
    发表于 11-29 10:51 11次下载
    c51简单<b class='flag-5'>delay</b><b class='flag-5'>函数</b>,不同类型同值字符的延时时间不同

    stm32 delay文件总结

    stm32 delay文件总结delay.h#ifndef __DELAY_H#define __DELAY_H #includ
    发表于 12-24 19:36 6次下载
    <b class='flag-5'>stm32</b> <b class='flag-5'>delay</b>文件总结

    C语言 | 延时函数Delay

    级的,采用“nop”函数,这个函数相当汇编NOP指令,延时几微秒。NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1us。 延时一个机器周期1.08us#include_nop_();延时10usvoid
    发表于 01-13 13:38 14次下载
    C语言 | 延时<b class='flag-5'>函数</b>(<b class='flag-5'>Delay</b>)

    STM32单片机-编程入门】LED闪烁(寄存器操作、标准库函数方式)

    :正点原子STM32F103ZET6核心板(程序已通过验证)1、main主函数#include "sys.h"#include "delay.h"#include "led.h"int main(void){
    发表于 01-17 11:04 12次下载
    【<b class='flag-5'>STM32</b>单片机-编程入门】LED闪烁(寄存器操作、标准库<b class='flag-5'>函数</b>方式)

    Systick定时器延时原理与HAL_Delay()延时函数的使用

    代码的书写过程中经常用到延时,这里主要讲述一下HAl延时,HAL库之HAL_Delay()函数在72M主频,STM32CUBEMX自动生成情况下,默认为延时1ms单位,即HAL_Delay
    的头像 发表于 04-26 09:09 1.2w次阅读

    在HAL库中用定时器实现自定义延时函数delay_us()

    STM32程序从标准库移植到HAL库的时候,会发现HAL库中只有一个毫秒级延时函数HAL_Delay(),而没有微秒级延时delay_us(),本文就在HAL库中用定时器实现这个
    的头像 发表于 09-21 10:33 7571次阅读