您当前的位置:五五电子网电子知识单片机-工控设备源码-程序STM32 延时函数封装程序 正文
STM32 延时函数封装程序

STM32 延时函数封装程序

点击数:7309 次   录入时间:03-04 11:48:07   整理:http://www.55dianzi.com   源码-程序

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

    延时模块函数

    说明:只需在工程中加入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);

    }




本文关键字:程序  源码-程序单片机-工控设备 - 源码-程序