Речь пойдет о маломощном микроконтроллере STM8L001J3. Постараюсь подробно рассказать о необходимых шагах для прошивки «hello world» и различных подводных камнях.
Основные характеристики микроконтроллера:
Максимальная частота ядра
Объем памяти программ
Объем оперативной памяти
Из этих данных видно, что STM8L001J3 вполне может заменить так горячо любимый всеми ATTiny13. Более подробно можно посмотреть на официальном сайте STM.
Для изучения нам понадобятся:
- Вот такой девайс — Модуль STM8L, он минималистичен, но все необходимое на борту имеется;
- IDE, приложение для написания и редактирования кода; после долгих проб остановился на IAR EW for STM8;
- Ну и, конечно, программатор ST-Link V2. Любой клон, главное чтобы был рабочий.
Часть 1. Установка и настройка IAR EW for STM8
Помимо этого варианта есть и другие возможные комбинации работы с микроконтроллером, например, Code::Blocks/SDCC/ST Visual Programmer или STVD/Cosmic/STVP. Кстати, «Cosmic» на мои письма не ответила по неизвестной причине. Мы же будем использовать IAR EW for STM8.
STM8 — Урок #2. Среда разработки IAR
На сегодняшний день есть масса возможных ограничений, которые можно обойти, затратив некоторые усилия. Поэтому я буду освещать только общие моменты. Возможно, когда Вы будете читать эту статью что-то изменится. Скачиваем IAR EW for STM8 с официального сайта (не обязательно) последнюю версию и ставим на компьютер. Дальше настраиваем среду для работы.
Маленькое отступление для тех, кто любит видеоуроки: есть очень хорошие обзоры у Бородатого Инженера. Там, правда, простая STM8, но первые уроки вполне подходят. А здесь расскажу в картинках, как это все настроить.
Открываем приложение и заходим в File/New Workspace, тем самым создаем новое рабочее пространство. Сохраняем проект, называем, к примеру «HW-STM8L»; нажимаем «ОК». Получаем вот такой экран:
Добавляем файлы библиотек в проект. Для этого создадим две новых группы, ПКМ (правая кнопка мышки) по корню, Add/Add Group, даем им имена «Inc» и «src».
Далее внимательно: если Вы параллельно смотрите видео, то будут отличия. Файлы библиотек SPL для STM8 и STM8L различные. Поэтому идем на официальный сайт ST и скачиваем библиотеки для нашей 8L. Называется файл «en.stsw-stm8012». Сохраняем на диске и разархивируем. Теперь, чтобы добавить файлы библиотек в наши вновь созданные папки, кликаем ПКМ по этим папкам, Add/Add Files.
Находим на диске разархивированный файл en.stsw-stm8012STM8L10x_StdPeriph_LibLibrariesSTM8L10x_StdPeriph_Driver выбираем всё и добавляем в папки соответственно их названиям.
Быстрый старт с STM8 (SPL). 1. Настройка IAR Embedded Workbench
Теперь добавляем основной файл и файлы конфигурации. Находим разархивированный файл библиотек. Выбираем из папки en.stsw-stm8012STM8L10x_StdPeriph_LibProjectSTM8L10x_StdPeriph_Templates четыре файла и переносим их в папку с проектом.
Соглашаемся с заменой, «ОК». Для удобства перенесем эти файлы в корень. Для этого опять ПКМ на корне и добавляем три файла (mane.c уже поменялся):
Продолжаем настраивать конфигурацию: ПКМ по корневому файлу, далее Options. Появляется вот такое окно, выбираем в нём наш микроконтроллер:
Следующая настройка С/С++ Comiler/Preprocessor, туда добавим наши папки «inc» и «src».
Также добавляем папку с четырьмя добавленными файлами.
Прописываем наш микроконтроллер в это окно Defined:
Далее в этом окне идем в Debugger меняем Simulator на ST-Link. Следом в Output Converter: ставим галку и выбираем Output format как «Intel Extended».
Нажимаем «ОК» и ждём, пока настройки применятся. Потом F7 или зеленый многогранник со стрелочкой, именуем Work Space, «ОК», даем какое-то время для сборки. После сборки ошибок быть не должно. Если они есть, то исключите файл, на который жалуется приложение из папки «src». Примерно так: ПКМ на файле, «Options» и ставите галку здесь:
В моем случае жалоба была на файл «stm8l10x_itc.c», после его исключения ошибка пропала. Вот он, наш замечательный бесконечный цикл. Настройка завершена.
Часть 2. Разбираем Модуль STM8L
На борту этого модуля микроконтроллер, светодиод и кнопка. Питается от внешнего напряжения 5-15 Вольт. Есть отдельные пины для подключения программатора. При необходимости можно удалить перемычки J1 и J2, тем самым освободив пины микроконтроллера под свои нужды. В комплекте, кстати, идет дополнительно еще один микроконтроллер и макетка.
По схеме у нас светодиод на выводе №6 — PB6, а кнопка на выводе №7 — PB7, это нам понадобится в третье главе, когда будем писать код для микроконтроллера.
Также обратите внимание: здесь всего три вывода для внутрисхемного программирования. Отсутствует привычный четвертый вывод «Reset». У этого микроконтроллера его нет. Эту особенность, нужно учитывать при программировании, и она накладывает некоторые ограничения при написании кода. Подробнее в следующей главе.
Часть 3. Пишем код и заливаем
Прежде всего необходимо рассказать о главной особенности микроконтроллера STM8L001J3. Я уже писал, что разработчики отказались от «Reset» ножки. Поэтому в даташите рекомендуется при написании кода в первых же строках дать 5-секундную задержку перед началом выполнения основной программы. Таким образом, при подаче питания у нас есть 5 секунд для начала заливки кода.
Если заливки нет, программа благополучно начнет работу после небольшой паузы. Когда же код будет полностью отлажен, можно убрать задержку и прошить, осознавая, что внести изменения кода в микроконтроллер больше нельзя.
Итак, полагаясь на даташит и знания Си, пишем наш Hello World:
Можно скопировать весь текст на странице «main.c». Главный цикл находится в самом конце, это несколько строчек. Все остальное — инициализация и подготовка. Переносим текст, нажимаем зеленый квадратик со стрелкой (ALT+F7) и компилятор должен выдать «Ошибок 0».
Переходим к прошивке. Используем ST-LINK: скачиваем и устанавливаем под него свежие драйвера. Вставляем в USB. Подключаем три провода программатора ST-LINK: Gnd, Swim, +3.3 к соответствующим выводам Модуля STM8L. Здесь нужно заметить, что на Модуле STM8L уже загружена тестовая прошивка.
Поэтому, на все про все есть ровно 5 секунд. За это время нужно соединить три контакта и нажать кнопку «Download and Debug» (Ctrl+D). После прошивки рестарт, ждем 5 секунд и видим наш мигающий светодиод. Можно поменять в программе паузу, правда, чтобы её увеличить, необходимо задать переменную «i» как uint32.
Это первые шаги. В даташите приводится код на Си. Можно самостоятельно дописать нашу программу, чтобы можно было использовать UART и таймеры.
Источник: habr.com
Изучаем STM8S Медленный старт. Часть 0
МК семейства STM8S относительно STM8L/32 имеет меньший арсенал периферии, но позволяет без лишних усложнений разобраться с основами и получить необходимые навыки для работы с его старшими братьями.
0. На кого ориентирован материал, зачем и почему
При написании данной статьи, я предполагаю, что читающий умеет:
- Внимательно читать (что редкость)
- Немного работать с англоязычной технической литературой (ну или мотивацию научиться, т.к. первый язык программиста — английский)
- Паять (хотя бы минимальные навыки)
- Программировать на С (опять же, не все так сложно)
- Гуглить (без этого никуда)
- Пользоваться мультиметром и имеет прочие базовые навыки (по типу «не суй пальцы в розетку»)
- Обзорно пробежать все этапы разработки системы на базе микроконтроллера
- Дать необходимые вводные для человека практически не посвященного
- По возможности формирование у читающего понимания того, где, что и как найти
(Не существенно)
Думаю имеет смысл сделать подробный курс программирования МК.
Мне послужит поводом изучить всю периферию более детально и попутно поможет другим.
Знаю, что уже существует огромное количество статей и даже обучающих курсов, но я имею слегка иной подход. (Возможно получу адекватную критику, изменю мнение и примкну к MX Cube ребятам).
Грустно видеть, как stm контроллеры превращают в arduino.
По поводу arduino:
Есть 3 (известных мне, мб я просто не дорос) подхода к разработке ПО на МК:
- Разработка на ассемблере
- Разработка под конкретную модель МК
- Разработка с использованием HAL и им подобных библиотек
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.
Плюс нужен программатор, у меня китайский 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 SystemsEmbedded Workbench 6.5stm8inc
Находим среди заголовочных файлов iostm8 свою модель МК, для меня:
iostm8s105k6.h
Подключаем её в самом начале и добавляем бесконечный цикл.
Результат:
#include //Заголовочный файл int main() < while(1)< //Бесконечный цикл >return 0; >
В меню Project -> Options -> General Options в графе Device выбираем свой МК.
В Project -> Options -> Debugger в графе Driver выбираем ST-LINK.
Находим на панели инструментов кнопку Download and Debug.
При первой компиляции среда попросит выбрать имя .eww файла. (Я называю так же как и проект.)
Внизу в окне Debug Log должны быть сообщения, что:
- Preprocessor for STM8 — запустился препроцессор
- Debugger for STM8 — запустился отладчик
- Connected to STM8 SWIM Debugging system — произошло подключение к МК
- Loaded debugee — произошла загрузка прошивки
- Target reset — произошел сброс
Нажимаем Stop debugging, отладка прекращается, но МК питается от программатора и дальше выполняет программу, а именно крутит бесконечный цикл и делает ничего.
Итоги
Получился краткий обзор и вводная в программирование МК серии STM8S без самого программирования. Получилась только база для работы, с этого обычно все и начинается — со сборки макета.
Раскрывать тему подробней смысла не вижу.
Во многих статьях уже после введения, буквально через пару строчек мигают светодиодами, что мне не понятно.
Насколько выполнены цели судить можно будет по тому, получилось ли у начинающего что-то сделать самостоятельно, используя предложенную мной информацию. (индикатор окно Debug log)
Источник: temofeev.ru
DIY Microcontrollers Blog
DIY electronics for each other. Электронные самоделки для всех.
Создание проекта для STM8 в IAR EWSTM8
- Получить ссылку
- Электронная почта
- Другие приложения
Хотите создать проект для STM8 в IAR, но не знаете с чего начать? Тогда эта статья для Вас. Многие думают, что работать в IAR сущий ад, особенно когда речь идет о STM32, но с линейкой STM8 это совсем не так.
Шаг первый (создание проекта):
- запускаем IAR, жмем «Project» -> «Create New Project»
- выбираем «С» или «C++» из списка «Project templates» и жмем «OK»
- далее сохраняем наш проект в нужное место
Проект создан, теперь нужно его настроить для работы с конкретным микроконтроллером.
Шаг второй (настройка проекта):
- Жмем правой кнопкой на название проекта в окне «Workspace» и выбираем «Options. «
- В категории «General Options» на вкладке «Target» выбираем нужный микроконтроллер. У меня под рукой STM8S103F3P6, соответственно выбираем «STM8S103F3P».
- Переходим к категории «Debugger», во вкладке «Setup» выбираем то, чем будем программировать / отлаживать наше устройство. Я использую ST-Link, поэтому выбираю именно его. Больше никакие настройки на первом этапе нас не интересуют, поэтому жмем «OK» и приступаем к написанию кода.
Проект создан, настроен, осталось подключить библиотеки и написать код. Очень часто возникает вопрос, как узнать название основной библиотеки с тем или иным микроконтроллером. Здесь все очень просто. Открываем проводник, заходим в папку с установленным IAR (чаще всего это «C:Program Files (x86)IAR SystemsEmbedded Workbench 7.3» ), далее идем в «. stm8inc» , там расположены библиотечные файлы для всех микроконтроллеров STM8. Ищем нужный файл по названию микроконтроллера, запоминаем или копируем его имя и переходим к написанию кода.
Подключаем библиотеку ввода-вывода для STM8S103F3, как мы увидели выше, она называется «iostm8s103f3.h» и создаем функцию задержки для обычнейшего мигания светодиодом:
void delay(unsigned long time)
Теперь переходим к редактированию основной программы. Не будем вдаваться в подробности всех примененных функций — это не входит в тему данного поста. Просто вставим весь получившийся код программы для мигания светодиодом. На моей отладочной плате он подключен к порту «B5».
void delay(unsigned long); //задержка
int main( void )
//конфигурируем порт B5 на выход
PB_DDR_bit.DDR5 = 1;
PB_CR1_bit.C15 = 1;
PB_CR2_bit.C25 = 1;
//мигаем в бесконечном цикле
PB_ODR_bit.ODR5 = !PB_ODR_bit.ODR5;
delay(10000);
void delay(unsigned long time)
Теперь жмем «F7» или «Make», убеждаемся что нет ошибок, а затем загружаем код сочетанием клавиш «Ctrl+D» или кнопкой «Download and debug». Но пока ничего не происходит, т.к. микроконтроллер сейчас остановлен и ожидает действий пользователя, ведь мы в режиме отладки. Тут есть два варианта — нажать «Go» или «Stop debugging» (красный крест). Первый вариант запустит выполняться наш код в режиме отладки, а второй сбросит микроконтроллер, отключится от него и он сам будет выполнять программу из Flash памяти.
Но это еще не все, есть небольшой подводный камень, который вызовет ошибку при попытке загрузить и отладить наш код. Если Вы сами собираете плату или подключаетесь проводками к голому контроллеру, то не забудьте подключить конденсатор, емкостью 470 — 3300 нФ (например 1 мкФ) между ножками Vss и Vcap. Без него, увы, ничего работать не будет.
- Получить ссылку
- Электронная почта
- Другие приложения
Разборка ноутбука Xiaomi Mi notebook pro 15.6 (сушим клавиатуру)
На днях произошла ужасная вещь — на клавиатуру ноутбука вылилось небольшое, но достаточное для глюков количество воды. Хорошо, что вода оказалось чистой, и особенно то, что в Красноярске вода содержит мало примесей (за несколько лет в чайнике нет ни капли накипи).
Что нужно делать, если что-то подобное случилось с Вами: Быстро перевернуть ноутбук, позволить жидкости вытечь из клавиатуры ( при этом стоит следить, чтобы жидкость в этот момент не стекала на матрицу. Вытереть тряпкой остатки воды (спорный пункт!) Я взял баллон со сжатым воздухом и продул под всеми клавишами, при этом вылетело много жидкости.
Возможно, таким образом можно лишь усугубить ситуацию, загнав жидкость потоком воздуха куда не следует. Теперь нужно разобрать ноутбук и просушить клавиатуру. Других вариантов нет. Имейте ввиду, что если Вы конкретно залили клавиатуру, то можете попрощаться с ноутбуком и вот почему: Клавиатур пока нет ни в России, ни в Китае! Я обзвонил много сервисных центр
Использование UART + DMA при заранее неизветном количестве принимаемых символов (STM32)
У контроллеров STM32, в большинстве своем, отсутствует как таковой буфер приемника UART. Исходя из этой особенности, приходится создавать кольцевой буфер и использовать прерывания. При низкой тактовой частоте ядра и высоких скоростях UART это оказывается очень накладно как по производительности, так и по энергопотреблению. Всего этого можно избежать при помощи DMA, но как?
Ведь при настройке DMA указывается фиксированный размер буфера, в который копируются принятые данные. К тому же у DMA есть прерывания только при полном и половинном заполнении буфера. Фактически, если вы уверены, что длина принимаемых данных не превысит длину буфера, прерывания от DMA можно не использовать вовсе. А обойтись только прерыванием IDLE от UART.
Флаг прерывания IDLE в интерфейсе UART выставляется в случае, если после стоп-бита последнего переданного символа на линии RX нет данных в течении времени приема одного символа. Флаг IDLE сбрасывается программно.
Как запрограммировать STM32 без программатора
Мало кто знает, а в особенности те, кто только начинает изучать микроконтроллеры STM32, что их можно запрограммировать не имея специального программатора. Необходимо лишь выбрать режим загрузки контроллера через встроенный загрузчик, подключитьcя через UART и записать необходимый код. Теперь обо всем подробнее.
Большая часть контроллеров STM32 имеет встроенный (нестираемый) загрузчик в специальной области памяти, который работает по протоколам UART, SPI, I2C и CAN. Конечно же проще всего работать через UART, т.к. он есть почти у каждого, кто имеет дела с электроникой, поэтому его и будем рассматривать. Выбор области памяти, из которой осуществляется загрузка контроллера осуществляется подачей низкого или высокого уровня на ножки BOOTx (может быть как одна, так и несколько). Подробнее о том, как выбрать загрузчик на конкретном контроллере указано в AN2606. Так же в AN2606 указано, какой интерфейс контроллера можно использовать для программирования. Еще, чтобы записать код
Источник: diymcblog.blogspot.com