Arduino: как поменять для скетча значение F_CPU |
![]() |
Добавил(а) microsin |
Во всех проектах (скетчах) Arduino частота кварцевого резонатора устанавливается при выборе платы, и не предусматривается никакой опции для изменения тактовой частоты системы (константа F_CPU). С этой проблемой я столкнулся, когда пытался скомпилировать скетч CardKeyBoard.ino для мини-клавиатуры M5stack [2]. На этой клавиатуре кварцевый резонатор отсутствует, используется 8 МГц внутренней тактовой частоты ATmega328P, установленный фьюзами. По этой причине было необходимо поменять значение F_CPU с 16000000 на 8000000. После поиска в интернете нашел 3 способа изменения F_CPU. 1. Включить опцию подробного вывода процесса компиляции. Это делается через меню Файл -> Настройки -> установить галочки "Показать подробный вывод". Тогда можно будет скопировать в текстовый файл лог компиляции, и на его основе создать скрипт, в который будет компилировать исходный код уже с новым значением для F_CPU. Здесь приведен кусок большого вывода лога компиляции скетча CardKeyBoard.ino. Опцию -DF_CPU=16000000L необходимо поменять на -DF_CPU=8000000L, иначе в библиотеке Adafruit NeoPixel не работает управление трехцветным светодиодом по последовательному протоколу [3]. C:\arduino-1.8.13\arduino-builder -dump-prefs -logger=machine -hardware
C:\arduino-1.8.13\hardware -hardware C:\Users\user\AppData\Local\Arduino15\
packages -tools C:\arduino-1.8.13\tools-builder -tools C:\arduino-1.8.13\
hardware\tools\avr -tools C:\Users\user\AppData\Local\Arduino15\packages
-built-in-libraries C:\arduino-1.8.13\libraries -libraries C:\Users\user\
OneDrive\Документы\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega328old
-ide-version=10813 -build-path C:\Users\user\AppData\Local\Temp\arduino_build_461155
-warnings=none -build-cache C:\Users\user\AppData\Local\Temp\arduino_cache_496329
-prefs=build.warn_data_percentage=75
-prefs=runtime.tools.arduinoOTA.path=C:\arduino-1.8.13\hardware\tools\avr
-prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\arduino-1.8.13\hardware\tools\avr
-prefs=runtime.tools.avrdude.path=C:\arduino-1.8.13\hardware\tools\avr
-prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\arduino-1.8.13\hardware\tools\avr
-prefs=runtime.tools.avr-gcc.path=C:\arduino-1.8.13\hardware\tools\avr
-prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=C:\arduino-1.8.13\
hardware\tools\avr -verbose C:\asm\CardKeyBoard\CardKeyBoard.ino
C:\arduino-1.8.13\arduino-builder -compile -logger=machine -hardware C:\arduino-1.8.13\
hardware -hardware C:\Users\user\AppData\Local\Arduino15\packages -tools
C:\arduino-1.8.13\tools-builder -tools C:\arduino-1.8.13\hardware\tools\avr
-tools C:\Users\user\AppData\Local\Arduino15\packages -built-in-libraries
C:\arduino-1.8.13\libraries -libraries C:\Users\user\OneDrive\Документы\Arduino\
libraries -fqbn=arduino:avr:nano:cpu=atmega328old -ide-version=10813 -build-path
C:\Users\user\AppData\Local\Temp\arduino_build_461155 -warnings=none -build-cache
C:\Users\user\AppData\Local\Temp\arduino_cache_496329 -prefs=build.warn_data_percentage=75
-prefs=runtime.tools.arduinoOTA.path=C:\arduino-1.8.13\hardware\tools\avr
-prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\arduino-1.8.13\hardware\tools\avr
-prefs=runtime.tools.avrdude.path=C:\arduino-1.8.13\hardware\tools\avr
-prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\arduino-1.8.13\hardware\tools\avr
-prefs=runtime.tools.avr-gcc.path=C:\arduino-1.8.13\hardware\tools\avr
-prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=C:\arduino-1.8.13\hardware\
tools\avr -verbose C:\asm\CardKeyBoard\CardKeyBoard.ino
Using board 'nano' from platform in folder: C:\arduino-1.8.13\hardware\arduino\avr
Using core 'arduino' from platform in folder: C:\arduino-1.8.13\hardware\arduino\avr
Detecting libraries used...
"C:\\arduino-1.8.13\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11
-fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics
-Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L
-DARDUINO=10813 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\arduino-1.8.13\\hardware\\
arduino\\avr\\cores\\arduino" "-IC:\\arduino-1.8.13\\hardware\\arduino\\avr\\variants\\
eightanaloginputs" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_461155\\
sketch\\CardKeyBoard.ino.cpp" -o nul -DARDUINO_LIB_DISCOVERY_PHASE
Alternatives for Adafruit_NeoPixel.h: [Adafruit_NeoPixel@1.10.0]
ResolveLibrary(Adafruit_NeoPixel.h)
-> candidates: [Adafruit_NeoPixel@1.10.0]
"C:\\arduino-1.8.13\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11
-fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics
-Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L
-DARDUINO=10813 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\arduino-1.8.13\\hardware\\
arduino\\avr\\cores\\arduino" "-IC:\\arduino-1.8.13\\hardware\\arduino\\avr\\variants\\
eightanaloginputs" "-IC:\\Users\\user\\OneDrive\\Документы\\Arduino\\libraries\\
Adafruit_NeoPixel" "C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_461155\\
sketch\\CardKeyBoard.ino.cpp" -o nul -DARDUINO_LIB_DISCOVERY_PHASE
Alternatives for Wire.h: [Wire@1.0]
ResolveLibrary(Wire.h)
-> candidates: [Wire@1.0]
...
"C:\\arduino-1.8.13\\hardware\\tools\\avr/bin/avr-size" -A
"C:\\Users\\user\\AppData\\Local\\Temp\\arduino_build_461155/CardKeyBoard.ino.elf"
Скетч использует 6758 байт (21%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 259 байт (12%) динамической памяти, оставляя 1789 байт
для локальных переменных. Максимум: 2048 байт.
2. Импортировать скетч в Microchip Studio (бывшая Atmel Studio), тогда можно будет штатными опциями поменять F_CPU и скомпилировать проект в среде Microchip Studio. 3. Поменять определение платы в файле boards.txt, указав там новое значение для F_CPU. Пример: ... ############################################################## nano.name=CardKeyBoard (Nano, f_cpu изменена с 16 на 8 МГц) nano.upload.tool=avrdude nano.upload.protocol=arduino nano.bootloader.tool=avrdude nano.bootloader.unlock_bits=0x3F nano.bootloader.lock_bits=0x0F nano.build.f_cpu=8000000L
nano.build.board=AVR_NANO
nano.build.core=arduino
nano.build.variant=eightanaloginputs
...
[Ссылки] 1. Почему я не люблю Arduino. |