123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #include "delay.h"
- static u8 fac_us=0;//us延时倍乘数
- static u16 fac_ms=0;//ms延时倍乘数
- void Delay_Init(void)
- {
- //SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//bit2清空,选择外部时钟 HCLK/8
- //SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
- fac_us=(SystemCoreClock/1000000); //1us需计算的脉冲个数,其中(SystemFrequency/1000000)代表1US的脉冲个数,8是需要8分频
- fac_ms=(u16)fac_us*1000; //1ms需计算的脉冲个数
- if(fac_us==0)fac_us=1;
- }
- static void Delay_1Ms(void)
- {
- u32 temp;
- SysTick->LOAD=(u32)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; //清空计数器
- }
- static void Delay_1Us(void)
- {
- u32 temp;
- SysTick->LOAD=fac_us; //时间加载
- SysTick->VAL=0x00; //清空计数器
- SysTick->CTRL=0x01 ; //开始倒数
- do
- {
- temp=SysTick->CTRL;
- }
- while(temp&0x01&&!(temp&(1<<16)));//等待时间到达
- SysTick->CTRL=0x00; //关闭计数器
- SysTick->VAL =0X00; //清空计数器
- }
- /***********************************************
- *
- ***********************************************/
- void DelayTick(int tick)
- {
- unsigned long ctrl;
- int i;
- ctrl=SysTick->CTRL;
- for(i=0;i<tick;i++){
- while(1){
- if(ctrl!=SysTick->CTRL){
- ctrl=SysTick->CTRL;
- break;
- }
- }
- }
- }
- void Delay_Ms(u32 ms)
- {
- u32 i = 0;
- for(i = 0; i < ms; i++)
- {
- Delay_1Ms();
- }
- }
- void Delay_Us(u32 us)
- {
- u32 i = 0;
- for(i = 0; i < us; i++)
- {
- Delay_1Us();
- }
- }
|