- 六.国民技术MCU开发之 精确延时delay模块
- 1.相关开发环境
- 2.不好的延时方式
- 3.精确延时方式 __NOP操作
- 3.1 Delay_2us 的定义
- 3.2 Delay_2ms的定义
- 3.3 Delay_5ms的定义
- 3.4 Delay_ms 的定义
硬件版本:N32G457QEL_EVB V1.1
软件SDK版本 Nationstech.N32G45x_Library.1.1.1
开发软件:KEIL
2.不好的延时方式
void Delay(uint32_t count)
{
for (; count > 0; count--)
;
}
这种方式 实际的延时时间不确定,对一些需要精确延时的外设驱动控制容易出问题。
3.精确延时方式 __NOP操作根据delay时间对IO进行操作,并配合示波器进行测量IO的实际时间,从而达到准确控制
通过该种方式得到 Delay_1us /Delay_2us /Delay_5us/Delay_10us/Delay_1ms/Delay_2ms/Delay_5ms
3.1 Delay_2us 的定义void Delay_2us(void)
{
Delay_1us();
Delay_1us();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
}
3.2 Delay_2ms的定义
void Delay_2ms(void)
{
Delay_1ms();
Delay_1ms();
__NOP();__NOP();__NOP();__NOP();__NOP(); __NOP();
__NOP();__NOP();__NOP();__NOP();__NOP(); __NOP();
}
3.3 Delay_5ms的定义
void Delay_5ms(void)
{
Delay_2ms();
Delay_2ms();
Delay_1ms();
__NOP();__NOP();__NOP();__NOP();__NOP(); __NOP();
__NOP();__NOP();__NOP();__NOP();__NOP(); __NOP();
}
3.4 Delay_ms 的定义
上述几个具体时间是准确的,void Delay_ms(int time)是近似时间
void Delay_ms(int time)
{
for (int i = 0; i <= time; i++)
{
Delay_1ms();
}
}
``
void Delay_ms(int time)
{
for (int i = 0; i <= time; i++)
{
Delay_1ms();
}
}



