STM32之延時秒,毫秒,微秒


#include "delay.h"
#include "stdint.h"
#include "stm32f10x.h"

static uint8_t fac_us=0;  //us延時倍乘數
static uint16_t fac_ms=0; //ms延時倍乘數


void DelayInit()
{
    //選擇外部時鍾
    SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
    fac_us=SystemCoreClock/8000000;  //設置為系統時鍾的1/8
    fac_ms=(u16)fac_us*1000;         
}

void DelayUs(unsigned int us)
{
    u32 temp;
    SysTick->LOAD=us*fac_us;             //加載時間
    SysTick->VAL=0x00;                   //清空計時器
    SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;
    do
    {
        temp=SysTick->CTRL;
    }
    while(temp&0x01&&!(temp&(1<<16)));         //等待時間到達
    SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;   //關閉計時器
    SysTick->VAL=0x00;                         //清空計時器
}


void DelayMs(unsigned int ms)
{
    u32 temp;
    SysTick->LOAD=ms*fac_ms;             
    SysTick->VAL=0x00;                   
    SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;
    do
    {
        temp=SysTick->CTRL;
    }
    while(temp&0x01&&!(temp&(1<<16)));   
    SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;   
    SysTick->VAL=0x00;                   
}


void DelayS(unsigned int s)
{
    unsigned char i;
    for(i=0;i<s;i++)
    {
        DelayMs(1000);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM