/****************************************************************************** * Copyright (C) 2014-2015 HangZhou SiZhu Co.,LTD. * *----------------------------------------------------------------------------- * File: Delay.c * Description: time delay: delay_us & delay_ms * Author: Lishoujian (867693272@qq.com) * Date: Jan 8, 2015 *****************************************************************************/ /* ----------------------- Platform includes --------------------------------*/ #include "delay.h" #include "sys.h" ////////////////////////////////////////////////////////////////////////////////// static u8 fac_us=0;//usÑÓʱ±¶³ËÊý static u16 fac_ms=0;//msÑÓʱ±¶³ËÊý //³õʼ»¯ÑÓ³Ùº¯Êý //SYSTICKµÄʱÖӹ̶¨ÎªHCLKʱÖÓµÄ1/8 //SYSCLK:ϵͳʱÖÓ void Delay_init() { // SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //Ñ¡ÔñÍⲿʱÖÓ HCLK/8 SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK); //Ñ¡ÔñÍⲿʱÖÓ HCLK/8 fac_us=12*SystemCoreClock/HSE_VALUE; //ΪϵͳʱÖÓµÄ1/8 fac_ms=(u16)fac_us*1000;//ÿ¸ömsÐèÒªµÄsystickʱÖÓÊý } //ÑÓʱnus //nusΪҪÑÓʱµÄusÊý. void delay_us(u32 nus) { u32 temp; SysTick->LOAD=nus*fac_us; //ʱ¼ä¼ÓÔØ SysTick->VAL=0x00; //Çå¿Õ¼ÆÊýÆ÷ SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //¿ªÊ¼µ¹Êý do { temp=SysTick->CTRL; } while(temp&0x01&&!(temp&(1<<16)));//µÈ´ýʱ¼äµ½´ï SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //¹Ø±Õ¼ÆÊýÆ÷ SysTick->VAL =0X00; //Çå¿Õ¼ÆÊýÆ÷ } //ÑÓʱnms //×¢ÒânmsµÄ·¶Î§ //SysTick->LOADΪ24λ¼Ä´æÆ÷,ËùÒÔ,×î´óÑÓʱΪ: //nms<=0xffffff*8*1000/SYSCLK //SYSCLKµ¥Î»ÎªHz,nmsµ¥Î»Îªms //¶Ô72MÌõ¼þÏÂ,nms<=1864 void delay_ms(u16 nms) { u32 temp; SysTick->LOAD=(u32)nms*fac_ms;//ʱ¼ä¼ÓÔØ(SysTick->LOADΪ24bit) SysTick->VAL =0x00; //Çå¿Õ¼ÆÊýÆ÷ SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //¿ªÊ¼µ¹Êý do { temp=SysTick->CTRL; } while(temp&0x01&&!(temp&(1<<16)));//µÈ´ýʱ¼äµ½´ï SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //¹Ø±Õ¼ÆÊýÆ÷ SysTick->VAL =0X00; //Çå¿Õ¼ÆÊýÆ÷ }