void delay_nus(unsigned int i) { i=i/10; while(--i); } void delay_nms(unsigned int n) { n=n+1; while(--n) delay_nus(900); } delay_nms(200);
时间: 2024-04-15 09:25:52 浏览: 112
这段代码是一个简单的延时函数。它包含两个函数:delay_nus和delay_nms。delay_nus函数用于微秒级延时,而delay_nms函数用于毫秒级延时。
在delay_nus函数中,参数i被除以10,然后使用while循环递减i的值,直到i为0为止。这段代码的目的是实现一个较短的延时。
在delay_nms函数中,参数n被加1,然后使用while循环递减n的值,直到n为0为止。在每次循环中,调用delay_nus函数并传入参数900进行微秒级延时。这段代码的目的是实现一个较长的延时。
最后一行代码delay_nms(200)表示调用delay_nms函数,并传入参数200进行毫秒级延时。这样程序会延时200毫秒。
相关问题
void delay_nms(unsigned int n) { n=n+1; while(--n) delay_nus(900); }
这是一个简单的延时函数,它会延时指定的毫秒数。在函数中,传入的参数n会自增1,并且在一个循环中每次减1,直到n为0为止。在每次循环中,调用了delay_nus(900)函数,该函数用于延时指定的微秒数。这样就实现了延时n毫秒的功能。不过需要注意的是,delay_nus函数的具体实现没有在这段代码中给出,所以无法确定具体的延时时间。
#include "stm32f10x.h" #include "delay.h" static u8 fac_us=0;//usÑÓʱ±¶³ËÊý static u16 fac_ms=0;//msÑÓʱ±¶³ËÊý void DelayInit() { SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //Ñ¡ÔñÍⲿʱÖÓ HCLK/8 fac_us=SystemCoreClock/8000000; //ΪϵͳʱÖÓµÄ1/8 fac_ms=(u16)fac_us*1000;//·ÇucosÏÂ,´ú±íÿ¸ömsÐèÒªµÄsystickʱÖÓÊý } void DelayUs(unsigned long 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; //Çå¿Õ¼ÆÊýÆ÷ } void DelayMs(unsigned int 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; //Çå¿Õ¼ÆÊýÆ÷ } void DelayS(unsigned int ns)//ÑÓʱÃë { unsigned char i; for(i=0;i<ns;i++) { DelayMs(1000); } }
这段代码是一个基于SysTick定时器的延时函数,可以实现微秒级、毫秒级和秒级的延时。其中,SysTick是STM32的一个系统定时器,用于提供一个固定的时钟来进行定时操作。
在代码中,DelayInit()函数用于初始化SysTick定时器,并计算出us和ms所需的SysTick时钟周期数。DelayUs()函数实现微秒级延时,DelayMs()函数实现毫秒级延时,DelayS()函数实现秒级延时。
需要注意的是,这些延时函数都是阻塞的,即在延时期间程序无法执行其他任务。在实际使用中,应根据具体情况选择合适的延时方式,避免阻塞影响程序的实时性能。
阅读全文