64 lines
2.0 KiB
C
64 lines
2.0 KiB
C
/***********************************************************************!
|
||
* 技术讨论:QQ群 123763203
|
||
* 官网 :www.navota.com
|
||
*
|
||
* @file delay.c
|
||
* @brief systic函数库
|
||
* @author Navota
|
||
* @date 2018-3-1
|
||
************************************************************************/
|
||
#include "delay.h"
|
||
|
||
//延时驱动C 文件
|
||
|
||
/***********************************************************************************************
|
||
功能:初始化延时模块
|
||
形参:0
|
||
返回:0
|
||
详解:此函数用于初始化延时模块,使用函数时必须调用。否则会造成延时函数出错
|
||
************************************************************************************************/
|
||
void DelayInit(void)
|
||
{
|
||
SysTick->CTRL = 0;//选取systick的时钟为内核时钟/16
|
||
}
|
||
/***********************************************************************************************
|
||
功能:US级延时函数
|
||
形参:US 需要延时多少US
|
||
返回:0
|
||
详解:裸机下的延时US
|
||
************************************************************************************************/
|
||
void DelayUs(uint32_t us)
|
||
{
|
||
uint32_t temp;
|
||
SysTick->LOAD = (us*BUS_CLK_HZ/10000)/(1600); //时间加载
|
||
SysTick->VAL = 0x00; //清空计数器
|
||
SysTick->CTRL |= 0x01 ; //开始倒数
|
||
do
|
||
{
|
||
temp = SysTick->CTRL;
|
||
}while(temp & 0x01 && !(temp & (1<<16))); //等待时间到达
|
||
SysTick->CTRL &= ~0x01; //关闭计数器
|
||
}
|
||
/***********************************************************************************************
|
||
功能:MS级延时函数
|
||
形参:MS需要延时多少MS
|
||
返回:0
|
||
详解:裸机下的延时MS
|
||
************************************************************************************************/
|
||
void DelayMs(uint32_t ms)
|
||
{
|
||
uint32_t temp;
|
||
uint16_t i;
|
||
for(i = 0;i < ms;i++) //延时 MS
|
||
{
|
||
SysTick->LOAD = (BUS_CLK_HZ/1000)/16; //时间加载1ms
|
||
SysTick->VAL = 0x00; //清空计数器
|
||
SysTick->CTRL |= 0x01; //开始倒数
|
||
do
|
||
{
|
||
temp = SysTick->CTRL;
|
||
}while(temp & 0x01 && !(temp & (1<<16))); //等待时间到达
|
||
SysTick->CTRL &= ~0x01; //关闭计数器
|
||
}
|
||
}
|