1.前言延迟功能是嵌入式软件开发中必不可少的功能,可以在每个项目中找到。尽管看似不起眼,但在某些时序控制场合,使用少量延迟通常可以解决大问题。延迟功能的几种实现方式如下所述。 2.中断延时实现U16 TimingDelay = 0; void delay_Init(void){SysTick_Config(SystemFrequency / 1000); // 1ms)void delay_DelayMs(U16 x //延迟(以毫秒为单位)){TimingDelay = x; while(TimingDelay!= 0); } void SysTick_Handler(void){if(TimingDelay& gt; 0){TimingDelay-; }}更常用,借助系统时钟时钟中断,以实现更精确的延迟,可以通过中断周期来设置延迟精度来控制。而且由于使用了中断(例如中断异常),很容易导致无限的while循环和程序崩溃。不能在中断功能中使用。 3. while循环的方法++#define COMPUTE_TIMES_1MS 10120 void delay_DelayMs(U16 x //延迟的毫秒数){u32 n; n = x * COMPUTE_TIMES_1MS; while(n& gt; 0){n-; })此方法更灵活,用于不需要非常精确的延迟的场合。我们可以使用GPIO输出电平,然后使用示波器尽可能精确地测量COMPUTE_TIMES_1MS的值。 Gpio_low(); delay_DelayMs(100); Gpio_high(); delay_DelayMs(100); Gpio_low();同样,如果您需要非常小的延迟,则可以根据需要执行任意数量的cpu指令。 void delay_DelayCpuTimes(U16 x){u32 i;对于(i = 0; i {}} 4,使用nop()语句void DelayUS(u32 time){while(time--){__NOP(); __ NOP(); __ NOP(); __NOP(); __ NOP( ); __ NOP();}} __nop null指令的时间就是执行一条指令的时间,主要频率不同,__ nop的时间也不同,您可以使用理论计算来计算出多少个nop。执行1us或使用示波器测试方法进行测量。5.操作系统的睡眠函数在操作系统为In( (例如freerots,ucos等),系统提供了专用的线程睡眠功能以进行延迟。请注意,在中断功能中不应使用睡眠/结束/免责声明:本文的内容由21ic授权后发布。 ,版权归原始作者所有,该平台仅提供信息存储服务,本文仅代表作者的个人观点。声纳视图并不代表该平台的位置。如有任何疑问,请与我们联系,谢谢!