C++ PlatformIO ATMega324P util/delay.h不准确

C++ PlatformIO ATMega324P util/delay.h不准确,c++,microcontroller,atmega,platformio,C++,Microcontroller,Atmega,Platformio,我正在使用PlatformIO和CLion对ATMega324P微控制器进行编程。该项目是在mac上使用PlatformIO创建的,并在CLion中打开。我可以成功地构建程序并在ATMega324p上运行它。我成功地运行了以下代码 main.cpp 虽然这段代码运行,但延迟似乎明显不准确。我需要做些什么来确保延迟正常工作吗?您的MCU可能正在运行其内部RC振荡器。这种振荡器并不特别精确——它被指定为8 MHz,但单个部件可以在7.3到8.1 MHz的范围内运行 为了获得更精确的计时,您需要连接一

我正在使用PlatformIO和CLion对ATMega324P微控制器进行编程。该项目是在mac上使用PlatformIO创建的,并在CLion中打开。我可以成功地构建程序并在ATMega324p上运行它。我成功地运行了以下代码

main.cpp


虽然这段代码运行,但延迟似乎明显不准确。我需要做些什么来确保延迟正常工作吗?

您的MCU可能正在运行其内部RC振荡器。这种振荡器并不特别精确——它被指定为8 MHz,但单个部件可以在7.3到8.1 MHz的范围内运行


为了获得更精确的计时,您需要连接一个外部晶体并相应地对时钟保险丝进行编程。

以下设置解决了我的问题

扁桃体


您在哪里定义了F_CPU?@DavidGrayson我在Platformio.ini中定义了它请参见编辑above@DavidGrayson你是在暗示有另一种可能的解决方案吗?如果你提到延迟是预期的一半,那会有帮助的!当它关闭10%而不是100%时,你所说的显然是不准确的。谢谢你的帮助。
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
    DDRB |= 1 << PINB0; 

    while (true)
    {
        PORTB ^= 1 << PINB0; 
        _delay_ms(100);
    }
}
[env:mightycore324]
platform = atmelavr
board = mightycore324
framework = arduino
upload_protocol = usbtiny
board_f_cpu = 16000000L
[env:mightycore324]
platform = atmelavr
board = mightycore324
framework = arduino
upload_protocol = usbtiny
board_f_cpu = 800000L