Определение F_CPU в Atmel Studio - PullRequest
       15

Определение F_CPU в Atmel Studio

0 голосов
/ 14 декабря 2018

Я просто хотел бы привести пример мигания светодиода (1 на 1000 мс).Мой микроконтроллер - ATmega328P, и я использую Atmel Studio.

Состояние 1: Если я не определяю F_CPU, мигание светодиода выполняется верно.И я использую настройки предохранителей по умолчанию (Внутренний генератор и CKDIV8 = запрограммировано).

Состояние 2: Если я определяю F_CPU 8000000UL, мигание светодиода работает в 8 раз медленнее, и снова я использую настройки предохранителей по умолчанию (Внутренниеосциллятор и CKDIV8 = запрограммировано).

Я не использую внешний кристалл как в 1.State, так и в 2.State.И такие же настройки предохранителей.Почему я вижу этот результат?Почему в 8 раз медленнее?

Вопрос 2: Некоторым библиотекам нужно значение F_CPU, например UART.Я не использую внешний генератор.Что мне написать в это значение?

1 Ответ

0 голосов
/ 14 декабря 2018

F_CPU должен отражать установленную тактовую частоту процессора микроконтроллера.Неважно, была ли установлена ​​эта скорость, потому что она использует внешние часы, или это внутренние, или какие значения div установлены.

Итак, значение F_CPU должно быть установлено, чтобы отражать любыетактовая частота процессора настроена на.

В соответствии с таблицей данных для atmega328p, устройство без программирования поставляется с включенным внутренним генератором RC, DIV8, поэтому тактовая частота процессора в этом случае будет 8 МГц / 8 = 1 МГц

Таким образом, если вы установите F_CPU на 8000000, то любой код, который использует F_CPU, думает, что он работает на частоте 8 МГц вместо 1 МГц, которая действительно есть.

...