我尝试使用寄存器控制连接到 8 个引脚的 LED 使 STM32 Nucleo F103RB 闪烁。出于好奇,我使用 NOP() 函数创建了 delay() 函数。
从 8 MHz 开始,我认为它会在 PLL 处放大并运行 64 MHz 的内部时钟,因此如果我将 64*(10^6) 的值放入我的delay()函数中,我认为大约需要一秒钟的延迟。然而遗憾的是,我的 LED 灯只有在很长一段时间后才会关闭和打开。我注意到我的计算是错误的,我当然不能用不准确的时钟计时,但至少它会类似地闪烁。我还尝试使用 bolatyle 声明来阻止编译器优化。但看到没有任何变化,我确信我有一个错误的概念。我应该怎么想才能解决这个问题?请帮助我😢。
我不擅长英语。 - 在韩国留学的学生 -
....与正文主要内容相同
使用 NOP 进行延迟不适合任何情况,除了非常短的延迟。对于循环,与 NOP 指令本身相比,循环开销(非常)显着,这使得行为变得不可预测。
在这种情况下,您可以使用STM HAL延迟函数或实现类似的东西。