//粗延时函数,微秒
- void delay_nus(u16 time)
- {
u16 i=0; while(time–) { i=10; //自己界说 while(i–) ; } - }
//毫秒级的延时
- void delay_nms(u16 time)
- {
u16 i=0; while(time–) { i=12000; //自己界说 while(i–) ; } - }
运用SysTick来完成精确守时:
- SysTick_Config(SystemCoreClock
/ 10) 函数的形参便是systick重装守时器的值。 - systick计数频率为每秒72000000次,所以7200000次便是1/10秒,也便是100ms。
- SysTick是1个24bit递减计数器,经过对SysTick操控与状况寄存器的设置,可选择HCLK时钟(72M)或HCLK的8分频作为SysTick的时钟源。//V3.5默以为HCLK时钟
- SysTick的重装寄存器决议了守时器频率。
- 若SysTick的时钟源是72M,
SystemFrequency = 72000000Hz - 所以 SysTick_Config(SystemCoreClock
/ 1000); 便是1ms时基。
SysTick的初始化设置:voidInit_SysTick(void){if(SysTick_Config(SystemCoreClock / 1000)) //留意:3.5库中 SystemFrequency 被 SystemCoreClock 替代。while(1);}延时函数:__IO uint32_t TimingDelay;void delay_ms(__IO uint32_t nTime){TimingDelay = nTime;while(TimingDelay != 0);}中止函数:extern __IO uint32_t TimingDelay;void SysTick_Handler(void){if (TimingDelay != 0x00){ TimingDelay--;}}delay_ms(1000);