Приветствую всех жителей и гостей Датагор.ру!
Года полтора назад мы с Радиком Галимовым, более известным как камрад Galrad, обсуждали возможность совместной публикации о программировании микроконтроллеров на языке Си.
Содержание статьи / Table Of Contents
А недавно меня настигла и сокрушила новость о том, что Радика с нами больше нет. Об этом сообщил в редакцию нашего журнала камрад Александр (mazr).
Отдавая дань уважения, я решил всё же написать статью и посвятить её памяти этого замечательного Человека.
↑ Предисловие
Данная работа является логическим продолжение серии статей «Ассемблер для микроконтроллеров с нуля», в которой достаточно подробно освещены:• Общие принципы устройства и работы микроконтроллера (МК).
• Система тактирования и прерывания.
• Назначение и функциональные возможности таких модулей МК, как порт ввода/вывода, АЦП, таймер.
• Механизм компиляции и сборки проекта средствами GCC, включая содержимое файлов Makefile и сценария компоновщика LinkerScript.
• Подключение к проекту сторонних объектных файлов и библиотек.
• Структура программы и её оптимизация посредством макроопределений/макросов, функций и хидер-файлов.
• Основные ошибки, допускаемые программистом, и методы их поиска и устранения.
Поскольку вся вышеуказанная информация пригодится нам и при изучении Си, я буду время от времени ссылаться на соответствующий раздел вышеуказанной статьи, для краткости именуя её «Ассемблер...» и лишь в особо важных случаях — дублировать фрагмент текста.
Цель остаётся прежней — освоить базовые знания и навыки в программировании МК, используя для разных платформ единые среду программирования и компилятор.
↑ Необходимые детали и устройства
Для практических занятий нам понадобятся:1. Микроконтроллер ATmega8
2. Макетная плата STM32F401
3. Макетная плата nRF52832
Если у вас не оказалось под рукой нужного микроконтроллера, ничего страшного: достаточно внести некоторые изменения в пару файлов, адаптировав их под ваш МК, о чём — чуть ниже.
4. Программатор USBasp для ATmega8
и Программатор st-link v2 для STM32F401 и nRF52832.
5. USB-UART адаптер CH340G.
6. Макетная плата.
7. Соединительные провода.
8. Потенциометры.
9. Светодиоды.
↑ Установка и настройка ПО
↑ Компилятор, тулчейны, загрузчики, SPL и SDK
Скачайте и установите компилятор, тулчейны и загрузчики согласно раздела 3.2 первой части «Ассемблер...». Кроме того, потребуются SPL (Standard Peripheral Library) для STM32F401 и SDK (Software Development Kit) для nRF52832, которые необходимо скачать и сохранить в папку GNU.В случае, если вы используете STM32 с иным ядром, при скачивании SPL ориентируйтесь на первую цифру после буквы «F» в названии МК.
↑ Редактор VS Code
За последний год, дети «подсадили» меня на редактор Visual Studio Code, который имеет перед Notepad++ ряд преимуществ, приведу из которых пару:а) Более продвинутый интерфейс, включая систему авто-подстановки.
б) Подключение соответствующего расширения даёт возможность писать в этом же редакторе приложения под Windows, Android, iOS (на Java, Python и др.) для обмена информацией с устройством на МК.
В ходе установки следует выставить галочки для подключения опции «Открыть с помощью VS Code».
Рисунок 1. Подключение опции «Открыть с помощью VS Code»
Коротко об основных полях и вкладках редактора.
Рисунок 2. Основные вкладки и поля VS Code
Слева располагается панель инструментов, наиболее часто из вкладок которой используются «Проводник» (при кодировании) и «Расширения» (для подключения новых расширений).
В окне редактора мы будем писать наши программы. Здесь же отображаются функции расширения, предполагаемого к установке, а так же опции при настройке редактора через File/Preferences/Settings.
Окно консоли, открываемое комбинацией Control + Shift + тильда, будет использоваться для запуска программа make с целью компиляции кода и загрузки hex-файла в МК.
Поскольку в практических примерах предполагается передача данных в компьютер посредством UART, установим соответствующее расширение, для чего:
1. Пройдём во вкладку «Расширения» панели инструментов и в окне поиска наберём «serial».
2. Выберем из списка расширение «Serial monitor»
3. Нажмём кнопку «Install» в правой части редактора.
Рисунок 3. Установка расширения «Serial monitor»
После установки расширения в одном поле с консолью должна появиться вкладка «Serial Monitor», к настройкам и применению которой вернёмся позже.
↑ Шаблонные файлы
Скачайте архив папки шаблонных файлов под ваш МК. Распакуйте папку, зайдите в неё и кликните по свободному месту правой клавишей мыши. Выберите в открывшемся контекстном меню пункт «Открыть с помощью Code / Open with Code».Рисунок 4. Переход к редактору VS Code
Информацию о структуре и назначении шаблонных фалов можно почерпнуть из 2-й части и 7-й части «Ассемблер...».
В окне проводника редактора, последовательно выбирая нижеуказанные файлы, внесите следующие правки.
Для всех МК в файле c_cpp_properties.json из папки .vscode изменить на свой путь в 8-й строке.
Для AVR при использовании иного микроконтроллера, исправить на соответствующее название МК (например, attiny2313 или atmega328p) в 3-й строке файла variables.mk.
Для STM32F401
1. Изменить на свои пути в строках 8, 9 и 10 файла variables.mk.
2. При использовании МК с другим ядром изменить на соответствующие:
а) в файле variables.mk:
• тип ядра (например, cortex-m0 или cortex-m3) в 3-й строке,
• название файла startup.s в 14-й строке,
• название конфигурационного файла в 48-й строке.
б) в файле LinkerScript.ld:
• начальные адреса и размеры ОЗУ и флэш-памяти в 64-й и 65-й строках, соответственно, ориентируясь на данные из даташита.
↑ Проверка ПО и МК
Чтобы убедиться в исправности и работоспособности софта и «железа», подключим программатор к компьютеру с одной стороны, а к МК — с другой, соединив для Atmega8 одноимённые пины согласно Рисунка 5.Рисунок 5. Распиновка а) MK ATmega8 и б) программатора USBasp
В случае с STM32F401 пины, используемые для прошивки, выведены в правую часть макетной платы, причём пин SWCLCK обозначен как SCK, а SWDIO – как DIO. Распиновка макетной платы nRF52832 обозначена на её оборотной стороне.
Рисунок 6. Распиновка макетной платы а) STM32F401 и б) nRF52832 и в) программатора st-link v2
Далее создадим папку нашего первого проекта с именем first, скопируем в неё шаблонные файлы для интересующего нас МК и откроем с помощью VS Code. Скомпилируем файл main.c из папки src, набрав в консоли «make» + Enter. В случае успешной компиляции должна быть автоматически создана папка exe с elf- и hex- файлами. Осталось прошить МК, набрав в консоли «make upload» + Enter. Если компилятор не выдал в консоль сообщения об ошибках, значит мы готовы перейти непосредственно к Си.
Но, об этом — в следующий раз.
Продолжение следует!
↑ Всё железо списком
🍀 Микроконтроллер ATmega8🍀 Макетная плата STM32F401
🍀 Макетная плата nRF52832
🍀 Программатор USBasp для ATmega8
🍀 Программатор st-link v2 для STM32F401 и nRF52832
🍀 USB-UART адаптер CH340G
🍀 Макетная плата
🍀 Соединительные провода
🍀 Потенциометры
🍀 Светодиоды
↑ Файлы
Архивы шаблонных файлов под ваш МК:🎁atmega8-template.7z 1.5 Kb ⇣ 52
🎁nrf52832-template.7z 2.51 Kb ⇣ 27
🎁stm32f401-template.7z 3.5 Kb ⇣ 34