Сегодня по плану первый старт с демо платой STM8L-Discovery. В рамках которого хочется рассказать о том как самостоятельно создать простенький проект и прошить его. Что из этого получится посмотрим…
Введение
Ранее я писал что предлагаемые IDE меня не устраивают, уж больно сильно я подсел на Eclipse. Отказ ведет к потере автоматизма, в связи с чем придется собирать все ручками, но данный процесс меня устраивает. Однако это не мешает Вам использовать решения “по умолчанию”.
Cosmic
В состав пакета входят компилятор и компоновщик (линкер), задача компилятора прочитать наш программный код и сформировать из них набор инструкций, которые компоновщик соберет в конечный выходной файл годный для заливки в МК.
Исходя из того нам нужно каким-то образом объяснить компоновщику как устроен наш МК, т.е. написать некий сценарий (указать сколько у нас флеш и ОЗУ, по каким адресам расположены, а так же указать куда что «положить»).
Кроме того нужно выполнить начальную инициализацию МК.
Сценарий
Необходимый минимум информации который должен содержать сценарий:
расположение и размер флеш, ОЗУ и EEPROM
расположение кода, данных
размер и расположение стека
Шаблон сценария идёт в комплекте с компилятором, файл располагается в корневой директории Stm8lkf.lkf. Я немного скорректировал его, и добавил комментарии:
Формат файла довольно прост, необходимо указать распределение памяти: флеш, EEPROM, ОЗУ. Далее перечислить исходники: код начальной инициализации, ваши исходники, файлы библиотек и таблицу прерываний. В заключении описаны определения необходимые для начальной инициализации микроконтроллера.
Начальная инициализация
В отличии от STM32, здесь я решил воспользоваться файлами идущими в комплекте с компилятором. На выбор имеются несколько вариантов начальной инициализации:
Название файла
Краткое описание
crts.sm8
crts0.sm8
Инициализация стека, передача управления основной программе
crtsif.sm8
crtsx.sm8
crtsx0.sm8
crtsxf.sm8
Инициализация стека, инициализация переменных, передача управления основной программе
Наличие нескольких файлов с инициализацией переменных обусловлено структурой памяти, например файлы с именами заканчивающимися нулем предназначены для приложений с размером кода менее 64 кБ (при этом файлы библиотек так же должны заканчиваться “нулем”). Более подробно можно почитать в документации: C Cross Compiler User’s Guide for ST Microelectronics STM8, раздел Programming Environments.
Makefile
Все необходимое для сборки проекта у нас есть, можно приступить к майк-файлу. Долго не мудрил взял готовый от проекта на STM32 и поправил только под текущий компилятор. Вот что получилось:
Ни чего сложного в файле нет. Вначале из исходников получаем объектные файлы, далее их собирает компоновщик, ну и для информативности вывожу информацию о секциях.
Последние две цели mcu_program и mcu_restart позволяют прошить и сбросить микроконтроллер, что очень удобно не нужно переключаться между окнами. (К сожалению данная утилита не хочет прошивать микроконтроллер установленный в STM32-Discovery, хотя теоритически должна. И почему то в ней не предусмотрен сброс, поэтому приходится использовать костыль в виде mcu_restart). Файл управляющих команд (stm8l152c6.ini):
В результате получаем вот такую информацию (сборка, прошивка, сброс):
Последний штрих
Для полного счастья нахватает только описать таблицу прерываний и структуру регистров микроконтроллера. Данные файлы я взял из стандартной либы. (stm8_interrupt_vector.c, stm8l15x.h). Приведу только файл с таблицей:
Хух, на этом пока все, далее по плану линии ввода-вывода и пример работы с ЖКИ индикатором от мобильного телефона Нокиа 1100.