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
    +关注

    关注

    2270

    文章

    10895

    浏览量

    355747
  • 计数器
    +关注

    关注

    32

    文章

    2256

    浏览量

    94478
  • 定时器
    +关注

    关注

    23

    文章

    3246

    浏览量

    114721
  • 函数
    +关注

    关注

    3

    文章

    4327

    浏览量

    62573
收藏 人收藏

    评论

    相关推荐

    汇总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

    怎样去解决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用什么软件程序

    stm32用什么软件程序?STM32单片机在编程时可以使用库函数和使用配置寄存器的方式来进行程序的实现。
    发表于 09-21 16:00 1.5w次阅读

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

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

    msp430内置函数总结 __bic_SR_register(),__delay_cycles(x)

    msp430内置函数总结 __bic_SR_register(),__delay_cycles(x)
    发表于 11-25 09:51 0次下载
    msp430内置<b class='flag-5'>函数</b>总结 __bic_SR_register(),__<b class='flag-5'>delay</b>_cycles(x)

    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>)

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

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

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

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

    如何列无源网络传递函数

    如何列无源网络传递函数
    的头像 发表于 03-10 16:15 5087次阅读
    如何列<b class='flag-5'>写</b>无源网络传递<b class='flag-5'>函数</b>

    STM32蜂鸣器音乐播放实例教程

    开启定时器TIM7,是为了延时函数HAL_Delay_us()。具体过程请移步此文:STM32的HAL库实现自定义延时函数
    发表于 03-26 14:19 2171次阅读
    <b class='flag-5'>STM32</b>蜂鸣器音乐播放实例教程