LOAD = t" />
0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

stm32delay函數(shù)怎么寫

科技綠洲 ? 來源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2023-12-21 17:53 ? 次閱讀

STM32的延時函數(shù)可以使用SysTick定時器來實現(xiàn)。SysTick定時器是一個24位的計數(shù)器,它可以在每個時鐘周期自動減少計數(shù)值,直到計數(shù)值為0時觸發(fā)中斷。我們可以利用SysTick定時器的特性來實現(xiàn)精確的延時函數(shù)。

以下是一個實現(xiàn)延時函數(shù)的示例代碼:

#include "stm32xxxx.h"

void SysTick_Handler(void)
{
// 在這里可以寫一些需要周期執(zhí)行的操作,但是要盡量保持簡潔
}

void delay_us(uint32_t us)
{
uint32_t ticks = us * (SystemCoreClock / 1000000); // 將微秒轉(zhuǎn)換為滴答數(shù)

SysTick- >LOAD = ticks - 1; // 設(shè)置定時器加載值
SysTick- >VAL = 0; // 清空當前計數(shù)值
SysTick- >CTRL |= SysTick_CTRL_ENABLE_Msk; // 啟動定時器

while (!(SysTick- >CTRL & SysTick_CTRL_COUNTFLAG_Msk)); // 等待定時器倒計數(shù)完畢

SysTick- >CTRL &= ~SysTick_CTRL_ENABLE_Msk; // 關(guān)閉定時器
}

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

int main()
{
// 你的程序邏輯
// ...

while (1)
{
// 你的程序邏輯
// ...
}

return 0;
}

在這個例子中,我們通過SysTick定時器的中斷來實現(xiàn)延時函數(shù)。首先,我們定義了兩個延時函數(shù)delay_usdelay_ms,它們分別用來延時指定的微秒數(shù)和毫秒數(shù)。

在delay_us函數(shù)中,我們首先計算需要延時的滴答數(shù),然后設(shè)置SysTick的LOAD寄存器為滴答數(shù)減1,清空當前計數(shù)值,并啟動定時器。接著,我們使用一個循環(huán)等待直到定時器倒計數(shù)完畢,即SysTick_CTRL_COUNTFLAG位被置位。最后,我們關(guān)閉定時器并結(jié)束函數(shù)。

在delay_ms函數(shù)中,我們調(diào)用delay_us函數(shù)來實現(xiàn)毫秒級的延時。我們通過循環(huán)遞減ms的方式來實現(xiàn)毫秒級的延時,每次循環(huán)調(diào)用一次delay_us函數(shù)延時1毫秒。

在main函數(shù)中,我們可以在你的程序邏輯中調(diào)用延時函數(shù)來實現(xiàn)需要的延時效果。你可以在while循環(huán)中重復調(diào)用延時函數(shù)來實現(xiàn)周期性的延時效果。

需要注意的是,由于SysTick定時器是由SysTick_Handler中斷驅(qū)動的,所以你不能在SysTick_Handler中寫太多的代碼,以免影響延時的準確性。建議在SysTick_Handler中只加入必要的代碼,并保持簡潔。

以上是一個簡單的基于SysTick定時器的延時函數(shù)的實現(xiàn)。你可以根據(jù)自己的需求進行修改和改進,比如添加更多的延時函數(shù)、增加更高的精度等。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • STM32
    +關(guān)注

    關(guān)注

    2258

    文章

    10828

    瀏覽量

    352509
  • 計數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2241

    瀏覽量

    93979
  • 定時器
    +關(guān)注

    關(guān)注

    23

    文章

    3218

    瀏覽量

    113697
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4237

    瀏覽量

    61973
收藏 人收藏

    評論

    相關(guān)推薦

    匯總stm32 delay文件

    stm32 delay文件總結(jié)delay.h#ifndef __DELAY_H#define __DELAY_H #include "sys
    發(fā)表于 08-11 06:12

    STM32 delay函數(shù)有哪些應(yīng)用

    STM32delay函數(shù)應(yīng)用應(yīng)用與說明Cortex M4內(nèi)核編程手冊有關(guān)時鐘系統(tǒng)的內(nèi)容定時函數(shù)的實現(xiàn)delay_init 函數(shù)
    發(fā)表于 08-23 06:23

    怎樣去解決STM32F103ZET6庫函數(shù)程序移植的Delay函數(shù)異常問題

    為什么STM32F103ZET6庫函數(shù)程序移植到STM32F103C8T6時Delay函數(shù)會發(fā)生異常呢?其解決方法是什么?
    發(fā)表于 12-15 06:58

    LED閃爍開發(fā)之while循環(huán)函數(shù)delay延時函數(shù)的資料概述

    本文檔的主要內(nèi)容詳細介紹的是LED閃爍開發(fā)之C語言常用的預處理命令和while循環(huán)函數(shù)delay延時函數(shù)的資料概述免費下載。
    發(fā)表于 11-12 08:00 ?15次下載
    LED閃爍開發(fā)之while循環(huán)<b class='flag-5'>函數(shù)</b>和<b class='flag-5'>delay</b>延時<b class='flag-5'>函數(shù)</b>的資料概述

    51單片機延時函數(shù)delay的編寫實例函數(shù)和資料免費下載

    本文檔的主要內(nèi)容詳細介紹的是51單片機延時函數(shù)delay的編寫實例函數(shù)和資料免費下載。
    發(fā)表于 07-17 17:39 ?2次下載
    51單片機延時<b class='flag-5'>函數(shù)</b><b class='flag-5'>delay</b>的編寫實例<b class='flag-5'>函數(shù)</b>和資料免費下載

    stm32用什么軟件程序

    stm32用什么軟件程序?STM32單片機在編程時可以使用庫函數(shù)和使用配置寄存器的方式來進行程序的實現(xiàn)。
    發(fā)表于 09-21 16:00 ?1.5w次閱讀

    STM32單片機-庫函數(shù)】SysTick延時—delay

    : SysTick延時函數(shù)頭文件 /* --------------------------------------------------------- */#ifndef _DELAY_H_#define _DELAY
    發(fā)表于 11-24 19:06 ?13次下載
    【<b class='flag-5'>STM32</b>單片機-庫<b class='flag-5'>函數(shù)</b>】SysTick延時—<b class='flag-5'>delay</b>

    msp430內(nèi)置函數(shù)總結(jié) __bic_SR_register(),__delay_cycles(x)

    msp430內(nèi)置函數(shù)總結(jié) __bic_SR_register(),__delay_cycles(x)
    發(fā)表于 11-25 09:51 ?0次下載
    msp430內(nèi)置<b class='flag-5'>函數(shù)</b>總結(jié) __bic_SR_register(),__<b class='flag-5'>delay</b>_cycles(x)

    c51簡單delay函數(shù),不同類型同值字符的延時時間不同

    c51delay函數(shù)不同類型參數(shù)的不同效果
    發(fā)表于 11-29 10:51 ?11次下載
    c51簡單<b class='flag-5'>delay</b><b class='flag-5'>函數(shù)</b>,不同類型同值字符的延時時間不同

    stm32 delay文件總結(jié)

    stm32 delay文件總結(jié)delay.h#ifndef __DELAY_H#define __DELAY_H #includ
    發(fā)表于 12-24 19:36 ?6次下載
    <b class='flag-5'>stm32</b> <b class='flag-5'>delay</b>文件總結(jié)

    C語言 | 延時函數(shù)Delay

    的,采用“nop”函數(shù),這個函數(shù)相當匯編NOP指令,延時幾微秒。NOP指令為單周期指令,可由晶振頻率算出延時時間,對于12M晶振,延時1us。 延時一個機器周期1.08us#include_nop_();延時10usvoid
    發(fā)表于 01-13 13:38 ?14次下載
    C語言 | 延時<b class='flag-5'>函數(shù)</b>(<b class='flag-5'>Delay</b>)

    Systick定時器延時原理與HAL_Delay()延時函數(shù)的使用

    代碼的書寫過程中經(jīng)常用到延時,這里主要講述一下HAl延時,HAL庫之HAL_Delay()函數(shù)在72M主頻,STM32CUBEMX自動生成情況下,默認為延時1ms單位,即HAL_Delay
    的頭像 發(fā)表于 04-26 09:09 ?1.4w次閱讀

    在HAL庫中用定時器實現(xiàn)自定義延時函數(shù)delay_us()

    STM32程序從標準庫移植到HAL庫的時候,會發(fā)現(xiàn)HAL庫中只有一個毫秒級延時函數(shù)HAL_Delay(),而沒有微秒級延時delay_us(),本文就在HAL庫中用定時器實現(xiàn)這個
    的頭像 發(fā)表于 09-21 10:33 ?9966次閱讀

    如何列無源網(wǎng)絡(luò)傳遞函數(shù)

    如何列無源網(wǎng)絡(luò)傳遞函數(shù)
    的頭像 發(fā)表于 03-10 16:15 ?4278次閱讀
    如何列<b class='flag-5'>寫</b>無源網(wǎng)絡(luò)傳遞<b class='flag-5'>函數(shù)</b>

    STM32蜂鳴器音樂播放實例教程

    開啟定時器TIM7,是為了延時函數(shù)HAL_Delay_us()。具體過程請移步此文:STM32的HAL庫實現(xiàn)自定義延時函數(shù)
    發(fā)表于 03-26 14:19 ?1642次閱讀
    <b class='flag-5'>STM32</b>蜂鳴器音樂播放實例教程