В начало | Зарегистрироваться | Заказать наши киты почтой
 
 
 
 

Программирование микроконтроллеров на языке C. Часть 1

📆15 декабря 2022   ✒️erbol   🔎4.881   💬2  
Программирование микроконтроллеров на языке C. Часть 1

Приветствую всех жителей и гостей Датагор.ру!
Года полтора назад мы с Радиком Галимовым, более известным как камрад Galrad, обсуждали возможность совместной публикации о программировании микроконтроллеров на языке Си.
Далее закружились всякие важные и не очень события и стало как-то не до того.
А недавно меня настигла и сокрушила новость о том, что Радика с нами больше нет. Об этом сообщил в редакцию нашего журнала камрад Александр (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».
Программирование микроконтроллеров на языке C. Часть 1
Рисунок 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
 

Читательское голосование

Нравится

Статью одобрили 39 читателей.

Для участия в голосовании зарегистрируйтесь и войдите на сайт с вашими логином и паролем.
 

Поделись с друзьями!

 

 

Связанные материалы

 

Схема на Датагоре. Новая статья Ассемблер для микроконтроллера с нуля. Часть 7. Компиляция, отладка, загрузка... Привет датагорцам и гостям нашего кибер-города! В предыдущих частях материала по Ассемблеру...
Схема на Датагоре. Новая статья Ассемблер для микроконтроллера с нуля. Часть 4. Система адресации памяти, назначение выводов, тактирование и прерывания МК... Привет датагорцам! Сегодня мы остановимся на следующих вопросах касательно рассматриваемых нами...
Схема на Датагоре. Новая статья Ассемблер для микроконтроллера с нуля. Часть 5. Периферия МК.... Сегодня мы рассмотрим работу следующих модулей периферии: • порта ввода-вывода, • таймера •...
Схема на Датагоре. Новая статья Ассемблер для микроконтроллера с нуля. Часть 2. Шаблонные файлы и инструкции МК... В предыдущей части статьи мы провели подготовительную работу и вкратце разобрали принципы работы...
Схема на Датагоре. Новая статья Ассемблер для микроконтроллера с нуля. Часть 1. Начало пути... Приветствую всех сограждан и читателей журнала Датагор! Пользуясь кучей времени, предоставленной...
Схема на Датагоре. Новая статья Ассемблер для микроконтроллера с нуля. Часть 3. Макросы и функции... Привет, датагорцы — любители Ассемблера! В пункте 2.5.2 «Инструкции условного перехода» предыдущей...
Схема на Датагоре. Новая статья Электронные часы-термометр с беспроводным датчиком через радиомодуль nRF24L01... Здравствуйте, уважаемые Датагорцы! Представляю вашему вниманию электронные часы с функцией...
Схема на Датагоре. Новая статья Ассемблер для микроконтроллера с нуля. Часть 6. Протоколы обмена данными I2C и SPI... В проекте из предыдущей части нашей ассемблерной эпопеи мы подключали к микроконтроллеру светодиод...
Схема на Датагоре. Новая статья Програмирование в AVR Studio 5 с самого начала. Часть 8... Перейдем к изучению встроенных таймеров. Изучение прерываний и особенно таймеров в...
Схема на Датагоре. Новая статья Программирование микроконтроллеров в AtmelStudio 6. Часть 2. Одна программа на разных языках.... Для радиолюбителей, которые до определенного времени не использовали микроконтроллеры в своих...
Схема на Датагоре. Новая статья Програмирование в AVR Studio 5 с самого начала. Часть 5... Для того чтобы писать более сложные программы, нужно хорошо представлять структуру и...
Схема на Датагоре. Новая статья Програмирование в AVR Studio 5 с самого начала. Часть 7... Поговорим о прерываниях. Слово прерывание говорит само за себя, происходит остановка какого — то...
 

Комментарии, вопросы, ответы, дополнения, отзывы

 

<
Читатель Датагора

EKremer-RF20

<
Читатель Датагора

erbol

Добавить комментарий, вопрос, отзыв 💬

Камрады, будьте дружелюбны, соблюдайте правила!

  • Смайлы и люди
    Животные и природа
    Еда и напитки
    Активность
    Путешествия и места
    Предметы
    Символы
    Флаги
 
 
В начало | Зарегистрироваться | Заказать наши киты почтой