當前位置:首頁 » 數據倉庫 » stm32l4延時如何配置
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

stm32l4延時如何配置

發布時間: 2022-12-22 15:27:39

Ⅰ STM32延時問題

void delayus(u32 x)

{

u32 i,j;

for(i=0;i<x;i++)

for(j=0;j<10;j++);

}

印象里這樣大約是1us(沒中斷的情況下)。你可以採用定時器來測量函數大致的延時時間。

  1. 設置並,清計數器

  2. 開啟定時器

  3. 進入函數

  4. 出函數後關閉定時器,讀取計數器。觀察用時。

__ASM("NOP");為1個機器周期,1/72M

Ⅱ stm32 怎樣延時5秒

樓主我給你delay_ms 和 delay_us 多謝幾個delay_ms()就可以5秒了
#include <stm32f10x_lib.h>
static u8 fac_us=0;//us延時倍乘數
static u16 fac_ms=0;//ms延時倍乘數
//初始化延遲函數
//SYSTICK的時鍾固定為HCLK時鍾的1/8
//SYSCLK:系統時鍾
void delay_init(u8 SYSCLK)
{
SysTick->CTRL&=0xfffffffb;//bit2清空,選擇外部時鍾 HCLK/8
fac_us=SYSCLK/8;
fac_ms=(u16)fac_us*1000;
}
//延時nms
//注意nms的范圍
//SysTick->LOAD為24位寄存器,所以,最大延時為:
//nms<=0xffffff*8*1000/SYSCLK
//SYSCLK單位為Hz,nms單位為ms
//對72M條件下,nms<=1864
void delay_ms(u16 nms)
{
u32 temp;
SysTick->LOAD=(u32)nms*fac_ms;//時間載入(SysTick->LOAD為24bit)
SysTick->VAL =0x00; //清空計數器
SysTick->CTRL=0x01 ; //開始倒數
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待時間到達
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定時器產生5秒延時

使用一個定時器或打開滴答時鍾,不過5秒比較長,建議使用滴答時鍾。你設置好滴答定時器,在再定時中斷裡面不斷的使得一個變數自增,你在等待處只需判斷這個變數是否超過5秒,就完成了延時。

Ⅳ STM32如何設置10ns的延時

stm32的時鍾頻率,如果是103這個級別的,大概最高就是時鍾為72Mhz,那麼就是一個時鍾周期為 1/72 000 000 約為 13ns,,那麼要實現10ns准確延時,理論上是無法實現的,你可以用匯編實現一次空轉,大概就是10ns的幾倍的樣子。。。

如果真要10ns,可以用更快的stm32,比如stm32f407系列。

Ⅳ stm32中Delay()函數延時的時間是怎麼計算的

單片機編程過程中經常用到延時函數,最常用的莫過於微秒級延時delay_us(

)和毫秒級delay_ms(

)。1.普通延時法這個比較簡單,讓單片機做一些無關緊要的工作來打發時間,經常用循環來實現,不過要做的比較精準還是要下一番功夫。下面的代碼是在網上搜到的,經測試延時比較精準。//粗延時函數,微秒

void delay_us(u16 time)

{

u16 i=0;

while(time--)

{

i=10; //自己定義

while(i--) ;

}

}

//毫秒級的延時

void delay_ms(u16 time)

{

u16 i=0;

while(time--)

{

i=12000; //自己定義

while(i--) ;

}

}2.SysTick 定時器延時CM3 內核的處理器,內部包含了一個SysTick

定時器,SysTick 是一個24 位的倒計數定時器,當計到0 時,將從RELOAD

寄存器中自動重裝載定時初值。只要不把它在SysTick

控制及狀態寄存器中的使能位清除,就永不停息。SysTick 在STM32

的參考手冊裡面介紹的很簡單,其詳細介紹,請參閱《Cortex-M3 權威指南》。

這裡面也有兩種方式實現:a.中斷方式

如下,定義延時時間time_delay,SysTick_Config()定義中斷時間段,在中斷中遞減time_delay,從而實現延時。

volatile unsigned long time_delay; //

延時時間,注意定義為全局變數

//延時n_ms

void delay_ms(volatile unsigned long nms)

{

//SYSTICK分頻--1ms的系統時鍾中斷

if (SysTick_Config(SystemFrequency/1000))

{

while (1);

}

time_delay=nms;//讀取定時時間

while(time_delay);

SysTick->CTRL=0x00; //關閉計數器

SysTick->VAL =0X00; //清空計數器

}

//延時nus

void delay_us(volatile unsigned long nus)

{

//SYSTICK分頻--1us的系統時鍾中斷

if (SysTick_Config(SystemFrequency/1000000))

{

while (1);

}

time_delay=nus;//讀取定時時間

while(time_delay);

SysTick->CTRL=0x00; //關閉計數器

SysTick->VAL =0X00; //清空計數器

} //在中斷中將time_delay遞減。實現延時void

SysTick_Handler(void)

{

if(time_delay)

time_delay--;