×
单片机 > 单片机程序设计 > 详情

STM32 延时函数封装程序

发布时间:2020-06-03 发布时间:
|

    /*---------------------------------

    延时模块函数

    说明:只需在工程中加入delay.c和delay.h

    文件,即可用 Delayms(__IO uint32_t nTime);

    Delayus(__IO uint32_t nTime)


    -----------------------------------*/

    #ifndef __DELAY_H

    #define __DELAY_H

    #include "stm32f10x.h"

    /*---------------------------------

    描 述:参数1即为1ms,1000即为1s;只有几

    us的误差;

    -----------------------------------*/

    extern void Delayms(__IO uint32_t nTime);

    /*---------------------------------

    描 述:参数1即为1us,1000即为1ms;只有几

    us的误差;

    -----------------------------------*/

    extern void Delayus(__IO uint32_t nTime);

    /*---------------------------------

    函数名:延时调整形式的delaynus函数,

    描 述:参数1即为1us,1000即为1ms;

    -----------------------------------*/

    extern void delay_nus(unsigned long n);

    /*---------------------------------

    函数名:延时调整形式的delaynms函数,

    描 述:参数1即为1ms,1000即为1s;

    -----------------------------------*/

    extern void delay_nms(unsigned long n);

    #endif

    C 函数

    /*---------------------------------

    延时模块函数

    说明:只需在工程中加入delay.c和delay.h

    文件,即可用 Delayms(__IO uint32_t nTime);

    Delayus(__IO uint32_t nTime)

    -----------------------------------*/

    #include"delay.h"

    statIC __IO uint32_t TimingDelay;

    /* Private function prototypes -----------------------------------------------*/

    /*---------------------------------

    函数名:ms延时函数

    描 述:参数1即为1ms,1000即为1s;只有几

    us的误差;

    -----------------------------------*/

    void Delayms(__IO uint32_t nTime)

    {

    while(SysTick_Config(SystEMCoreCLOCk/1000));

    TimingDelay = nTime;

    while(TimingDelay != 0);

    SysTick->CTRL=0x00; //关闭计数器

    SysTick->VAL =0X00; //清空计数器

    }

    /*---------------------------------

    函数名:us延时函数

    描 述:参数1即为1us,1000即为1ms;只有几

    us的误差;

    -----------------------------------*/

    void Delayus(__IO uint32_t nTime)

    {

    while(SysTick_Config(SystEMCoreClock/1000000));

    TimingDelay = nTime;

    while(TimingDelay != 0);

    SysTick->CTRL=0x00; //关闭计数器

    SysTick->VAL =0X00; //清空计数器

    }

    /*---------------------------------

    函数名:延时辅助函数

    描 述:

    -----------------------------------*/

    void TimingDelay_Decrement(void)

    {

    if (TimingDelay != 0x00)

    {

    TimingDelay--;

    }

    }

    /*---------------------------------

    函数名:systick的中断函数

    描 述:参数1即为1us,1000即为1ms;只有几

    us的误差;

    -----------------------------------*/

    void SysTick_Handler(void)

    {

    TimingDelay_Decrement();

    }

    /*---------------------------------

    函数名:延时调整形式的delaynus函数,

    描 述:参数1即为1us,1000即为1ms;

    -----------------------------------*/

    void delay_nus(unsigned long n)

    {

    unsigned long j;

    while(n--)

    {

    j=12;

    while(j--);

    }

    }

    /*---------------------------------

    函数名:延时调整形式的delaynms函数,

    描 述:参数1即为1ms,1000即为1s;

    -----------------------------------*/

    void delay_nms(unsigned long n)

    {

    while(n--)

    delay_nus(1030);

    }




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
8051单片机的函数发生器的设计