我目前正在为我未编写的STM32F3 MCU的某些代码添加一些内容。产品将做的部分工作是在测试期间以1Hz的频率闪烁LED,直到MCU确定测试是通过还是失败。
此代码的先前编写者实现了两个延迟;一个是基于时钟速率的for循环,另一个是定时器中断。第一个延迟被称为
MsDelay(1000); //Provides approx a one second delay via a for loop
另一个像这样
Wait(x,y); //x indicates the timer channel, y is delay in milliseconds
“ wait(x,y)”函数经过时钟滴答检查,并进行一些递增以实现此延迟。
我遇到的问题是前面提到的LED闪烁。要测试此功能,请在ISR中进行测试
Set_Led(1,1); //Turns LED1 ON
Wait(1,1000); //Wait one second
Set_Led(2,1); //Turns LED2 ON
但是,LED点亮之间没有一秒钟的延迟。但是,如果我打电话,
Set_Led(1,1); //Turns LED1 ON
MsDelay(1000); //Wait one second
Set_Led(2,1); //Turns LED2 ON
有一秒的延迟。我对阻塞与非阻塞延迟的区别不是很熟悉,除了阻塞会使所有外设的处理能力丧失。使用非阻塞延迟时,LED转动之间是否应该有停顿?谢谢。