Я использую PlatformIO и CLion для программирования микроконтроллера ATMega324P. Проект создается с помощью PlatformIO на Mac и открывается в CLion. Я могу успешно собрать программу и запустить ее на ATMega324p. Я успешно запускаю следующий код.
main.cpp
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRB |= 1 << PINB0;
while (true)
{
PORTB ^= 1 << PINB0;
_delay_ms(100);
}
}
Platformio.ini
[env:mightycore324]
platform = atmelavr
board = mightycore324
framework = arduino
upload_protocol = usbtiny
board_f_cpu = 16000000L
Хотя этот код запускается, задержка кажется явно неточной. Нужно ли что-то делать, чтобы задержка работала правильно?
Ваш MCU, вероятно, работает от своего внутреннего RC генератора. Этот генератор не особенно точен — он определен как 8 МГц, но отдельные части могут работать в диапазоне от 7,3 до 8,1 МГц.
Чтобы получить более точную синхронизацию, вам нужно подключить внешний кристалл и соответственно запрограммировать предохранители часов.
Следующие настройки исправили мою проблему.
Platformio.ini
[env:mightycore324]
platform = atmelavr
board = mightycore324
framework = arduino
upload_protocol = usbtiny
board_f_cpu = 800000L