[Из песочницы] Изучаем STM8S Медленный старт. Часть 0
МК семейства STM8S относительно STM8L/32 имеет меньший арсенал периферии, но позволяет без лишних усложнений разобраться с основами и получить необходимые навыки для работы с его старшими братьями.
0. На кого ориентирован материал, зачем и почему
При написании данной статьи, я предполагаю, что читающий умеет:
- Внимательно читать (что редкость)
- Немного работать с англоязычной технической литературой (ну или мотивацию научиться, т.к. первый язык программиста — английский)
- Паять (хотя бы минимальные навыки)
- Программировать на С (опять же, не все так сложно)
- Гуглить (без этого никуда)
- Пользоваться мультиметром и имеет прочие базовые навыки (по типу «не суй пальцы в розетку»)
Целями статьи считаю:
- Обзорно пробежать все этапы разработки системы на базе микроконтроллера
- Дать необходимые вводные для человека практически не посвященного
- По возможности формирование у читающего понимания того, где, что и как найти
Думаю имеет смысл сделать подробный курс программирования МК.
Мне послужит поводом изучить всю периферию более детально и попутно поможет другим.
Знаю, что уже существует огромное количество статей и даже обучающих курсов, но я имею слегка иной подход. (Возможно получу адекватную критику, изменю мнение и примкну к MX Cube ребятам).
Грустно видеть, как stm контроллеры превращают в arduino.
По поводу arduino:
Есть 3 (известных мне, мб я просто не дорос) подхода к разработке ПО на МК:
- Разработка на ассемблере
- Разработка под конкретную модель МК
- Разработка с использованием HAL и им подобных библиотек
1) Я сторонник такого мнения, что если ты строишь дом, то не стоит обжигать каждый кирпич из глины своими руками, потому ассемблер отпадает (хоть и начинал с этого). Слишком низкая скорость разработки.
2) Библиотеки HAL и т.п. для начинающего непрозрачна и слишком много моментов «просто пиши вот так». Потому — тоже в помойку.
3) Наиболее здоровым вариантом для начинающего считаю процесс создания ПО под конкретный МК, полученные навыки позволят разобраться и с 8L и 32 сериями (хоть это и больно делать единолично по документации).
Вы наверно заметили, что arduino в этом списке не фигурирует, потому что это образовательная платформа и для разработки на её базе компактных устройств не предназначена. Но подход к её программированию по какой-то (мне не известной) причине переносится и расползается по интернету. И даже применяется в реальных коммерческих проектах. (представляет собой, «скачал на форуме библиотеку, подключил, заработало, как работает не знаю»).
Я же предлагаю, с моей точки зрения, академически и методически более осмысленный подход.
1. Выбор микроконтроллера
У меня в наличии имеется несколько STM8S105K6 в корпусе LQFP32, он из этого семейства, потому выбираю его.
Вы можете выбрать любой МК в пределах серии.
Есть готовые Discovery платы от ST, можно купить у китайцев или заказать с других ресурсов. Есть готовые платы на STM8S103F3P6 и ей подобные от китайцев.
Но, следует учесть, что готовые платы предназначены для обучения.
На сайте производителя st.com, находим свой МК и скачиваем к нему документы:
Reference manual: RM0016 — общий документ для всех МК семейств STM8S и STM8AF. Далее RM.
Datasheet: У меня DS5855 — документ к моделям STM8S105C4/6, STM8S105K4/6 и STM8S105S4/6. Далее DS.
Из вкусного у него (поверхностно):
- Поддержка 16 МГц
- 32 Кб Flash памяти, 1 Кб EEPROM и 2Кб RAM
- Питание 2.95–5.5В
- 8-ми и 16-ти битные таймеры
- UART, SPI, I2C
- 10-ти битный АЦП
- до 38 дискретных входов/выходов
2. Необходимое оборудование
Я вижу два варианта работы с МК:
- Сборка макета из отдельных компонентовЗдорово, классно, мне нравится. Так делают многие люди.
В этом случае для МК нужна будет так называемая обвязка. План простой:
- Берем макетную плату, в моем случае TQFP (32–64PIN)0.8MM, запаиваем на неё МК
- Берем двухрядную гребенку PLS-2×40 припаиваем к отверстиям, которые ведут к выводам МК
- Берем печатную макетную плату (у меня 9×15 см) и припаиваем на нее прошлый бутерброд
- Смотрим RM пункт 7. Power supply, читаем. Написано нужен конденсатор соединяющий вывод VCAP и наши 0В источника питания. Еще написано, что подробней в смотреть нужно в DS к конкретному МК в секции electical characteristics. Для меня это пункт 10.3.1 VCAP external capasitor со ссылкой на Table 18 где и указан номинал 470 — 3300 нФ. Я взял 1 мФ (на схеме C3). (для чего он нужен, надеюсь, почитаете сами в RM)
- Там же в DS в пункте 10.3.8. Reset pin characteristics находим номинал конденсатора 0.1 мФ (на схеме C4). Резистор R4 номиналом 10 КОм используют в отладочных платах и различных application note, хотя внутри МК уже есть подтягивающий резистор номиналом от 30 до 80 КОм (если верить тому же DS). Параллельно конденсатору C4 ставим нашу кнопку сброса. Такую схему сброса можно увидеть например в Desighn note DN0005.
- Также, ST любят добавлять на отладочные платы конденсаторы по питанию на 100нФ, в количестве N выводов подключенных к питанию +1. На схеме нарисовано всего C1, C2 и C5 3 шт, и на плату я их не паял, но смысл вы поняли. На столе работать будет и без них, а в реальной коммерческой разработке лучше этим делом озаботиться при разведении платы устройства.
- Распаять SWIM разъем программирования (я делаю из PLS-1×40)
У меня получилось такое чудо: - Покупка готовой платы (что не избавляет от работы паяльником)Здорово, классно, мне нравится. Так делают многие люди.
Стоит ознакомиться с конфигурацией платы, если это плата от ST, то она сразу с программатором и подключается USB type B кабелем. На сайте ST будет схема на странице продукта. На плате будут кнопки, светодиоды, пищалки, ёмкостные кнопки и прочие прелести с которыми можно поиграться.
Если плата китайская, то часто платы без программатора, то нужен будет программатор.
Шелкографии названий выводов лучше не верить и перепроверить сравнив с DS.
Работу с контактными макетными платами (breadboard) я не рассматриваю потому, что не использую.
Плюс нужен программатор, у меня китайский ST-Link V2. Умеет программировать и STM8 и STM32.
3. Выбор IDE
Для меня вопрос выбора пока не актуален, работаю в IAR для STM8, ибо в ней делали проект над которым я сейчас работаю, по той же причине старая версия.
Идем на сайт iar.com, в поиске набираем модель своего МК.
Скачиваем IAR Embedded Workbench for STM8, выбираем при установке size-limited evaluation и миримся с ограничением в 8 Кб кода. Или покупаем. Есть на запрещенных на территории РФ ресурсах взломанные версии, но для коммерческих проектов не годится.
Инструкция по установке есть в самом установщике либо в гугле.
Я использую версию 6.5.3.2581.
Устанавливаем среду, вместе с ней драйвера на программатор.
4. Создание проекта
Заходим в IDE, идем Project → Create new project → C++
Жмем OK, выбираем директорию (желательно не имеющую кириллицы и пробелов), выбираем имя (без пробелов и кириллицы).
Идем в корневую папку своей IDE и находим папку inc, для меня путь:
C:\Program Files (x86)\IAR Systems\Embedded Workbench 6.5\stm8\inc
Находим среди заголовочных файлов iostm8 свою модель МК, для меня:
iostm8s105k6.h
Подключаем её в самом начале и добавляем бесконечный цикл.
#include //Заголовочный файл
int main()
{
while(1){ //Бесконечный цикл
}
return 0;
}
В меню Project → Options → General Options в графе Device выбираем свой МК.
В Project → Options → Debugger в графе Driver выбираем ST-LINK.
Находим на панели инструментов кнопку Download and Debug.
Внизу в окне Debug Log должны быть сообщения, что:
- Preprocessor for STM8 — запустился препроцессор
- Debugger for STM8 — запустился отладчик
- Connected to STM8 SWIM Debugging system — произошло подключение к МК
- Loaded debugee — произошла загрузка прошивки
- Target reset — произошел сброс
Мы попали в режим отладки, но выполнение программы приостановлено.
Там же на панели инструментов находим и нажимаем кнопку Go.
Мы запустили МК в режиме отладки.
Нажимаем Stop debugging, отладка прекращается, но МК питается от программатора и дальше выполняет программу, а именно крутит бесконечный цикл и делает ничего.
Итоги
Получился краткий обзор и вводная в программирование МК серии STM8S без самого программирования. Получилась только база для работы, с этого обычно все и начинается — со сборки макета.
Раскрывать тему подробней смысла не вижу.
Во многих статьях уже после введения, буквально через пару строчек мигают светодиодами, что мне не понятно.
Насколько выполнены цели судить можно будет по тому, получилось ли у начинающего что-то сделать самостоятельно, используя предложенную мной информацию. (индикатор окно Debug log)
Спасибо за внимание.