GeBalanceBot/Hardware/Firmware/GeBalanceBot_Firmware v1.0 .../DRV/delay.c

89 lines
2.7 KiB
C
Raw Permalink Normal View History

2024-01-18 01:55:04 +08:00
/*
********************************************************************************************************
delay.c
us ms
https://shop60670850.taobao.com
lilianhe
: 2017-2-6
*********************************************************************************************************
*/
#include "delay.h"
static u8 fac_us = 0; // us延时倍乘数
static u16 fac_ms = 0; // ms延时倍乘数
/*
********************************************************************************************************
Delay_Init(u8 SYSCLK)
SYSTICKHCLK1/8SYSCLK:
: 2017-2-6
*********************************************************************************************************
*/
void Delay_Init(u8 SYSCLK)
{
// SysTick->CTRL&=0xfffffffb;//bit2清空,选择外部时钟 HCLK/8
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //选择外部时钟 HCLK/8
fac_us=SYSCLK/8;
fac_ms=(u16)fac_us*1000;
}
/*
********************************************************************************************************
Delay_ms(u16 nms)
nms
//SysTick->LOAD为24位寄存器,所以,最大延时为:
//nms<=0xffffff*8*1000/SYSCLK
//SYSCLK单位为Hz,nms单位为ms
//对72M条件下,nms<=1864
: 2017-2-6
*********************************************************************************************************
*/
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; //清空计数器
}
/*
********************************************************************************************************
void Delay_us(u32 nus)
nus
:
: 2017-2-6
*********************************************************************************************************
*/
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; //清空计数器
}
//------------------End of File----------------------------