STM8L Quick Start

Материал из Документации
Перейти к: навигация, поиск

Модуль поставляется с прошитой демо-программой, а в мануале есть описание того как прошить МК через бут. Казалось-бы, что еще нужно для счастья? Но я все таки решил описать процесс создания мигалки с нуля. Просто потому, что сам знаю, как иногда напрягает процесс создания первого проекта для незнакомого МК.


Два самых популярных компилятора под STM8: COSMIC и IAR. Оба имеют бессрочную пробную версию, но с ограничением 8кБ на размер выходного файла. Я пишу в IAR, поэтому и «быстрый старт» у нас будет в ней. Потом может быть дополню примером на COSMIC.

Итак, качаем, ставим. Я думаю тут ничего сложного нету, и можно не описывать.

Содержание

Настройка окружения

Для начала можно прицепить шаблон проекта со стандартной библиотекой от ST. Шаблоны живут в папке

C:\Program Files\IAR Systems\Embedded Workbench 6.0 Kickstart\stm8\config\template\project

Закидываем туда содержимое архива template.zip. Теперь среди других шаблонов есть папка ST_Lib_C, а в ней заготовка для будущих проектов со стандартной библиотекой.

В подпапки inc и src можно кидать свои файлы, которые часто используются в проектах. Так они будут сразу включаться в новый проект при создании. Я туда бросил файлики с реализацией задержек из демо прошивки STM8L-Discovery (delay.h и delay.c). В шаблоне есть заготовка для main.c. Если у вас какой-то код присутствует в каждом проекте, то почему-бы не включить его в шаблон?

Добавив шаблон, попробуем создать простенький проект и помигать светодиодом. Пинаем IAR и идем создавать проект: Project -> Create new project… На выбор нам предлагают разные шаблоны:

Createnew.png

Берем самый последний — тот, что мы только-что добавили (STM8L Standart Peripheral library). Нам предложат выбрать место для сохранения проекта и дать ему название. Сохраним куда-нибудь (желательно без русских букв в пути). Теперь все файлы из папки с шаблоном скопируются в папку с проектом. Можно начинать кодить.

Слева на вкладке workplace можно лицезреть структуру проекта. Но мы ее и так знаем. Щелкнув правой мышью по названию проекта и выбрав из меню «options» попадаем в настройки проекта.

Options.png

Тут в первую очередь нас интересует General options. На этой вкладке выбираем модель МК (STM8L152K6)

Model.png

В качестве отладчика у нас по-умолчанию выбран ST-Link (так настроено в шаблоне, а при создании пустого проекта будет выбран симулятор). Если у вас есть демоплата discovery, то отлаживать можно через ST-Link прямо из IAR. А если нет, то придется прошивать через бутлоадер. Для бутлоадера нужно заставить IAR выдавать .hex файл. Идем на вкладку Output converter и выбираем там Intel Extended:

Extended.png

Пробный код

Теперь можно что-нибудь написать. Конечно, для тупого мигания светодиодом никакие библиотеки не нужны, но у нас же демонстрационный пример? :)

Для начала переключим частоту ядра. При старте МК тактируется от HSI (внутренний 16Мгц RC генератор) с делителем на 8. То есть работает на 2Мгц. Нам вроде хватает? Но есть один прикол со встроенным бутом — он не любит возращать исходный предделитель. После него мы внезапно работаем уже на 16Мгц. А раз так, то надо явно указать, с каким делителем мы хотим работать.

Открываем файл stm8l15x_conf.h — там у нас конфигурация библиотеки. Убираем комментарий со строк

#include "stm8l15x_clk.h"
#include "stm8l15x_gpio.h"

Чтобы подключить к проекту либы для управления тактированием и работы с пинами.

Теперь в main() пишем

CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_2);

Опа! Вот сейчас работаем уже на 8Мгц (16MHz / 2)

Для мигания светиком, пусть это будет LED3 на пине D5, надо настроить ноги:

GPIO_Init(GPIOD, GPIO_Pin_5, GPIO_Mode_Out_PP_Low_Slow);

Вон та большая конструкция — это режим работы пина. Их чуть более чем дофига:

  GPIO_Mode_In_FL_No_IT      = (uint8_t)0x00,   	/*!< Input floating, no external interrupt */
  GPIO_Mode_In_PU_No_IT      = (uint8_t)0x40,   	/*!< Input pull-up, no external interrupt */
  GPIO_Mode_In_FL_IT         = (uint8_t)0x20,   	/*!< Input floating, external interrupt */
  GPIO_Mode_In_PU_IT         = (uint8_t)0x60,   	/*!< Input pull-up, external interrupt */
  GPIO_Mode_Out_OD_Low_Fast  = (uint8_t)0xA0,   	/*!< Output open-drain, low level, 10MHz */
  GPIO_Mode_Out_PP_Low_Fast  = (uint8_t)0xE0,   	/*!< Output push-pull, low level, 10MHz */
  GPIO_Mode_Out_OD_Low_Slow  = (uint8_t)0x80,   	/*!< Output open-drain, low level, 2MHz */
  GPIO_Mode_Out_PP_Low_Slow  = (uint8_t)0xC0,   	/*!< Output push-pull, low level, 2MHz */
  GPIO_Mode_Out_OD_HiZ_Fast  = (uint8_t)0xB0,   	/*!< Output open-drain, high-impedance level, 10MHz */
  GPIO_Mode_Out_PP_High_Fast = (uint8_t)0xF0,   	/*!< Output push-pull, high level, 10MHz */
  GPIO_Mode_Out_OD_HiZ_Slow  = (uint8_t)0x90,   	/*!< Output open-drain, high-impedance level, 2MHz */
  GPIO_Mode_Out_PP_High_Slow = (uint8_t)0xD0    	/*!< Output push-pull, high level, 2MHz */

Но описание всех параметров немного выходит за рамки происходящего (да вроде и по комментариям понятно). Потому продолжим. Подключаем к проекту (через #include) файл delay.h. В нем у нас живут задержки. Задержки реализованы на таймере и значения выбраны для частоты 8Мгц. Если будете использовать сей файл при другом тактировании — надо поправить числа, которые заносятся в регистры таймера (там в комментариях есть расчет).

Сделаем простую мигалку:

while (1)
{
  GPIO_ToggleBits(GPIOD, GPIO_Pin_5);
  delay_ms(250);
}

Теперь компилируем (F7, Project->Make или кнопка на панели). Ни ошибок, ни ворнингов быть не должно.

Работа с Discovery

Те у кого есть discovery цепляют ее к модулю:

Discovery.png

Discovery2.jpg

Для того чтобы отдадчик на дискавери мог прошивать внешние МК, надо

  • Для STM8L-Discovery: снять джамперы на противоположной от разъема SWIM стороне (они подписаны DISCOVERY и ST-LINK)
  • Для STM8S-Discovery (и SVL туда-же): отпаять перемычки SB1 и SB2 около разъема SWIM.

Для версии STM8L-Discovery подключать можно только линии RST и SWIM, если земли Pinboard и дискавери соединены.

А вот для версии STM8S-Discovery надо еще подать питание с процессора (CPU_POWER) на вход Vcc, чтобы отладчик мог замерить напряжение. Без этого он даже не почувствует контроллер.

Теперь жмем Project -> Download and debug (Ctrl+D) и наблюдаем за загрузкой проекта.

После загрузки можно запустить его на выполнение (F5) и наблюдать за миганием светодиода (джампер на D5 одеть не забудьте!). Или пошагать по коду, следя за выполнением.

Работа через загрузчик

Те у кого дискавери нету, цепляют проводок от пина RST на ADBUS4 (или BDBUS4 если используется другой канал FT2232). В архиве лежит пропатченая Flash Loader Demonstrator — программка которая заливает hex файлик через бут. Перед тем как стучаться к буту, она передергивает DBUS4, сбрасывая МК.

Чтобы бут мог общаться с внешним миром, надо подключить UART. Накидываем джамперы на нужный канал. Например, для канала B вот так:

Jumpers.jpg

Запускаем flash loader и видим настройки порта:

Flashloader.png

Выбираем тут нужный порт, а остальное не трогаем. Жмем next. Программа выругается, что не нашла описание для нашего типа МК.

Mesage.png

Выбираем STM8L_32K.

Select.png

А может выругаться на то, что нету вообще никакого МК.

Nomk.png

В таком случае надо проверить

  • Правильно ли подключен проводок от RST к DBUS4 (может перепутан канал?)
  • Правильный ли выбран COM-порт. Это можно легко установить, потупив в светодиодики TxA, RxA, TxB, RxB — передающие (TX) будут несильно вспыхивать, когда FlashLoader стучится в МК.

Если лыжи все-равно не едут, можно отключить нафиг проводок и самому сбросить МК. Временное окно после сброса 1 секунда, за это время надо успеть нажать Next в программе.

Еще раз жмем next и выбираем наш *.hex файл c прошивкой. Он должен лежать в папке с проектом в /debug/exe.

Downld.png

Последний раз тыкаем next и смотрим как прошивка утекает в МК.

Load.png

После прошивки, бутлоадер передает управление на нашу прошивку и она начинает мигать светодиодом. Если не начала, то

  • Не подключен джампер на D5
  • Какой-то косяк в коде. Например забыта инициализация пина или работа ведется не с тем пином (не спрашивайте, как можно так ошибиться при копипастинге :)
  • Не подключен светодиод на PINBOARD2 (джампер должен стоять вот так)
  • Неправильная фаза луны. Попробуйте завтра.

Прикручиваем бутлоадер к IAR или консольные заморочки

Но кроме милого и дружелюбного графического интерфейса, у нас есть суровая консольная прошивалка. А ее можно прикрутить к IAR, чтобы прошивка происходила по одному нажатию кнопки.

Консольная утилита лежит в той-же папке, что и все остальное. Называется «STMFlashLoader.exe» (а графическая — STMicroelectronics flash loader.exe). Рядом, в папке Doc есть файлик UM0462.pdf в котором можно найти описание всех команд, которые понимает прошивалка. Поэтому распинаться я тут не буду.

Для того, чтобы прикрутить прошивалку к IAR, идем в меню Tools -> Configure Tools. Там жмем «New» и заполняем поля:

Conftools.png

Menu Text это просто название, которое будет отображаться в менюшке и оно ни на что не влияет.

В поле Command прописываем полный путь до нашего консольного прошивальщика. У меня он лежит в

C:\Program Files\FlashLoader\STMFlashLoader.exe

В поле Argument пишем

-c --pn 13 -i _STM8L_32K -d --fn "$EXE_DIR$\$PROJ_FNAME$.hex" -r --a 8000 -v
  • Цифры после —pn это номер COM порта, через который идет общение с бутлоадером, он у вас тоже скорее всего будет другим.
  • То, что после —fn это путь к hex файлу. Вместо $EXE_DIR$ IAR подставит папку с исполняемыми файлами проекта, а вместо $PROJ_FNAME$ — имя проекта. Да, если вы зачем-то при настройке генерации hex файла дали ему другое имя, то тут надо будет поправить. А иначе — оставить как есть.
  • -r —a 8000 означает запуск прошивки с адреса 0×8000 (это начало памяти программ). Если убрать этот ключ, то прошивка запустится только после сброса МК. В некоторых случаях это может быть удобно.

С консольной прошивалкой есть одна беда — после выполнения прошивки и запуска ее, программа не завершается, а висит и настойчиво просит «press any key». А у нас запуск из IAR! И консольного окошка нет, поэтому эни кей никак не нажать. Как быть? Можно поправить исходники (лежат там в папке Src), но у меня visual studio не было, поэтому пришлось искать особо хитрый метод. И он нашелся. В программе предусмотрена обработка параметра -v, но обработчик пустой, и если параметр в самом конце, то программа завершается безо всяких вопросов. Вот такая вот история последнего ключа в строке :)

Теперь тыкаем OK и лезем в менюшку tools: там появился пункт bootload. Если его нажать, то запустится консольная прошивалка и зальет прошивку в МК.

Чтобы было совсем удобно, можно закрепить за командой прошивки какое-либо сочетание клавиш. Для этого идем в tools -> options -> Key bindings. Там из списка menu выбираем Tools и прописываем хоткей для нашей команды:

Tools.png

С такой консольной примочкой и хаком от Vga прошивка камня просходит вообще без лишних телодвижений, одним нажатием кнопки. И это круто!

Пожалуй, на этом быстрый старт можно закончить. Светодиод мигает, модуль работает, все довольны. Теперь можно открывать демо проект и начать копошиться там. Комментариев там целая куча (больше пожалуй только в демке для w5100) и разобраться можно без проблем.

Полезные ссылки, архивы с софтом и примерами

  • RM0031 — Толстый мануал с ответами на все (почти вопросы). За тем, как работает та или иная периферия — туда.
  • Datasheet на STM8L152K6T6. Там распиновка, электрические параметры и т.д. Табличка прерываний тоже там.
  • blink.zip Проект с мигалкой светодиодом (из быстрого старта).
  • projectstm8.zip Документация на модуль в виде одного большого pdf, архив с демо-проектом, архив с «хакнутым» FlashLoader’ом, схема в eagle и документация на стандартную библиотеку — все вместе.
Личные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты