пятница, 27 февраля 2015 г.

Обмен контактами и дальнейшие планы

Друзья, если вы хотите, чтобы я вас информировал о новых заметках и о предстоящих встречах, напишите свой e-mail в комментариях к этой записи или пришлите мне на почту vasily.smirnov<at>gmail.com

По программированию и языку Си я выложил базовые материалы, которые помогут начать. Пробуйте сами, задавайте вопросы, ищите в интернете.

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

Далее в этом курсе мы будем рассматривать вопросы создания схем устройств, моделирования, разводки печатных плат, изготовления печатных плат, закупки и монтажа комплектующих.

До связи!

"hello world" для STM8

По доброй традиции выкладываю базовый проект для STM8 с общепринятым названием "hello world". Этот проект мигает светодиодом на плате STM8S-Discovery. К нему также подключены все файлы библиотеки периферийных устройств STM8S105. Этот проект можно использовать как основу.

main.c:

#include "stm8s.h"

main()
{
    uint16_t a = 0;
    
    /* GPIOD reset */
    GPIO_DeInit(GPIOD);

    /* конфигурируем вывод PD0 как выход на светодиод (LED1) */
    GPIO_Init(GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_HIGH_FAST);
    
    GPIO_WriteHigh(GPIOD, GPIO_PIN_0);

    while (1) // бесконечный цикл
    {
        a++;
        if(a == 0) // переполнение наступает через 65536 циклов
        {
            // меняем состояние светодиода
            GPIO_WriteReverse(GPIOD, GPIO_PIN_0);
        }
    }

}

Скачать:
stm8s-hello-world.zip
stm8s-a_stdperiph_lib_um.chm.zip - справка по библиотеке периферийных устройств

Примечание: чтобы компилятор находил файлы библиотеки, были изменены настройки проекта (меню Project->Settings...):




четверг, 26 февраля 2015 г.

Сигнал опорной частоты STM8

Микроконтроллеры для своей работы используют сигнал опорной (тактовой) частоты. Этот сигнал имеет прямоугольную форму или близкую к ней. Этот сигнал определяет сразу несколько аспектов работы:

  • периодичность выполнения команд (тактов) - от полной остановки при отсутствии сигнала до максимальной частоты данного МК (16 МГц для STM8S105)
  • потребляемый ток - при каждом переключении транзисторов внутри МК рассеивается энергия источника питания (уходит в тепло), поэтому, чем выше частота, тем выше потребляемый ток МК
  • точность формирования других частот и интервалов времени

В STM8 есть 3 варианта выбора источника опорного сигнала:
  1. HSE - внешний сигнал или кварцевый резонатор от 1 до 16 МГц
  2. HSI - встроенный RC генератор 16 МГц
  3. LSI - встроенный RC генератор 128 кГц
HSE - самый точный, но потребляет больше тока в рабочем режиме
HSI - менее точный, потребляет меньше тока
LSI - самый неточный, минимум потребления тока, низкая скорость выполнения команд

Подробнее см. слайды ниже, пример программы и документацию производителя (ключевые слова clock, HSE, HSI, LSI)

Скачать:
Слайды
Программа stm8s-clocking (проект для ST Visual Develop)

Основная информация по STM8

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

STM8S105 datasheet - спецификация на микросхему STM8S105C6, полезна при выборе микросхемы, при создании устройства и печатной платы

STM8S reference manual - подробная спецификация по периферийным модулям STM8 и их регистрам, основной документ для программиста

STM8S programming manual - информация по ядру МК, регистрам, командам ассемблера, при программировании на Си требуется крайне редко

STM8S-DISCOVERY user manual - документ по плате STM8S-discovery, содержит общее описание платы, разъемов и схемы, очень полезный документ

STM8S-DISCOVERY schematic - схема платы STM8S-discovery в отдельном архиве

Из этих документов я выделил абсолютный минимум базовой информации по STM8, которую можно использовать для начала работы. Скачать слайды

Программирование на Си для МК (STM8)

Хотя я предполагаю, что для изучения языка Си вы воспользуетесь материалами, доступными в интернете, я хочу обозначить основные элементы языка, которые часто используются при программировании для МК вообще, и STM8 в частности.

1. Основной файл программы называется main.c
Это необязательно, но так принято. В нем определяется функция main(), которая является точкой входа программы на языке Си.
void main()
{
   /* это классический комментарий в программе на Си */
   // такие комментарии в Си обычно тоже работают
}

2. В начале файла подключаются необходимые заголовочные файлы

Мы будем пользоваться библиотекой для работы с периферийными устройствами STM8S STM8S/A Standard peripheral library (STSW-STM8069)

Чтобы ей воспользоваться вставляем в начале main.c строчку
#include "stm8s.h"

Чтобы компилятор нашел этот файл, нужно в свойствах проекта указать путь к папке, в которой он расположен. Также для ясности можно добавить файл к проекту, однако это не избавляет от необходимости указывать путь. Подробнее об этом будет в другой заметке.

3. Для работы с типами данных вместо стандартных для языка Си char, short, int пользуемся синонимами int8_t, int16_t, int32_t, uint8_t, uint16_t, uint32_t или аналогами. Для STM8 эти синонимы определены в файле stm8s.h

Одна из особенностей языка Си в том, что стандартный тип int имеет разное количество бит (и разный диапазон чисел) на разных платформах. На ПК это обычно 32 бита, на МК это могут быть 16 или 8 бит. Поэтому программа, использующая тип int, может работать по-разному на разных платформах. Для улучшения переносимости программы в ней пользуются синонимами с явным указанием разрядности, а сами синонимы определяют в отдельном файле для каждой платформы (часто называется types.h).

int8_t - 8-битное число со знаком, диапазон значений от -128 до +127
int16_t - 16-битное число со знаком, диапазон значений от -32768 до +32767
uint8_t - 8-битное число без знака, диапазон значений от 0 до 255
uint16_t - 16-битное число без знака, диапазон значений от 0 до 65535

32-разрядные числа на 8-разрядном МК используются только при крайней необходимости, поскольку требуют заметно больше тактов МК на каждую операцию.

4. Для работы с регистрами периферийных устройств пользуемся битовыми операциями
a | b    побитовое ИЛИ (OR)
a & b    побитовое И (AND)
a ^ b    исключающее ИЛИ (XOR)
~a       инверсия всех бит

5. Директивой #define даем числовым значениям символьные имена по их смыслу, например:
#define OK          1
#define ERROR       0
#define RESET_MASK  (1<<3)   /* бит 3 */
и далее пользуемся этими именами в программе вместо чисел

6. Условный оператор if

7. Циклы for, while

8. Использование готовых функций и модулей
Стараемся пользоваться существующими наработками - экономим своё время на написание и отладку. Подключаем модуль:
- добавляем файл .с к проекту
- в свой файл вставляем директиву #include "имя_модуля.h"
- вызываем функции модуля function_name(arg1, arg2);

9. Создание своих функций и модулей
Структурируем свою программу. Оформляем отдельные по смыслу блоки программы в виде функций. Повторяющиеся элементы программы также оформляем в виде функции.
Функции, переменные и смысловые имена (#define), решающие одну законченную задачу, оформляем в виде модуля - пары файлов <имя_модуля>.c и <имя_модуля>.h
Чтобы понять, как написать .h файл, смотрите готовые примеры или учебники в интернете.

10. Для объединения переменных, связанных между собой по смыслу, пользуемся структурой (ключевое слово struct)

Язык программирования Си - материалы и ссылки

Язык Си будет для нас основным при работе с STM8. 

У нас уже установлена среда разработки ST Visual Develop + Cosmic C Compiler и мы можем набирать программы, компилировать и запускать их под отладчиком на реальной плате STM8S-discovery или в симуляторе, если платы у нас нет.

В интернете можно найти обучающие материалы по этому языку. Однако специфика такова, что скорее всего это будет либо учебник по языку Си для больших ПК, либо учебник по языку Си для другого МК, например AVR. И те, и другие материалы можно использовать для изучения общих принципов. Однако, чтобы запустить на STM8 примеры для других МК или для ПК, придётся проявить догадливость и находчивость :-)

Для STM8 производитель предоставил примеры программ. Наибольший интерес представляют библиотека для работы с периферийными устройствами:
STSW-STM8069 STM8S/A Standard peripheral library
и примеры работы с периферийными устройствами:
STSW-STM8026 STM8S optimized examples package

Электронные курсы по языку Си (для ПК)
http://kpolyakov.narod.ru/school/c.htm
http://www.intuit.ru/studies/courses/43/43/info

Хотя это не имеет прямого отношения к языку Си, ниже дана ссылка на книги по микроконтроллерам AVR. После беглого просмотра мне приглянулись книги Белова А.В. В них можно посмотреть схемы и общие идеи программирования МК.
http://avr.ru/docs/books/textbook

воскресенье, 8 февраля 2015 г.

Создаем первый проект для STM8S в среде ST Visual Develop

Запускаем ST Visual Develop:


Выбираем меню Debug instrument->Target settings... Для STM8S-discovery в окне указываем способ связи: Swim ST-Link. Нажимаем ОК:
 

ИЛИ

Если в наличии нет физической платы МК, можно воспользоваться симулятором. Для этого в окне указываем способ связи: SimulatorНажимаем ОК. Если будут появляться окна с настройками виртуального МК, нажимаем ОК.


Меню File->New workspace... Далее идут разные окна, вводим данные и нажимаем ОК:




На плате STM8S-discovery установлен МК STM8S105C6. Важно точно указывать модель МК, чтобы не возникало непонятных ошибок и "глюков":


Будет создан новый проект (project) и рабочее пространство (workspace), в котором размещается этот проект. К проекту будут добавлены файлы исходного кода. Файл main.c содержит главную функцию main() на языке Си. Программа на языке Си начинает выполняться с этой функции (до этого выполняется подготовка МК к работе и инициализация окружения языка Си, но для программиста на Си эта часть программы незаметна и добавляется автоматически компилятором и средой разработки). 


Сохраняем - меню File->Save workspace

Изменим настройки проекта, меню Project->Settings...

Эта настройка позволяет избежать сообщения об ошибке, что область памяти .ubsct слишком мала (у меня эта ошибка возникла, когда моей программе понадобился глобальный массив на 255 байт). Это сделать желательно:


Эта настройка включает генерацию файла карты памяти (*.map). Это делать необязательно. Этот файл полезен, чтобы посмотреть, как программа располагается в памяти, сколько памяти занимает, по какому адресу расположены переменные и функции, и др:


Далее из исходных файлов на языке Си необходимо подготовить двоичный образ программы для записи в память МК. Этот процесс называется компиляцией и сборкой программы. 

Выбираем конфигурацию Debug (это значит, что выходной elf файл будет содержать информацию, необходимую для отладки), далее меню Build->Build или F7 на клавиатуре. Если компилятор языка Си Cosmic C Compiler был успешно установлен и нашел свою лицензию, то программа будет успешно собрана с сообщением "0 errors(s), 0 warning(s)":


Подключаем плату STM8S-discovery к USB, выбираем меню Debug->Start Debugging. Если настройки связи были выбраны верно, то программа будет записана во Flash память МК (и будет хранится там после выключения питания), МК будет остановлен на первой команде и показано окно отладчика:


F5 запускает программу на выполнение. Shift+F5 останавливает программу в отладчике. Видно, что программа всё время выполняет цикл while(1). Также видно, по какому адресу происходит выполнение, и видно команду на языке ассемблера (JRT 0x80d3).


Таким образом создаётся минимальный проект в среде ST Visual Develop, который собирается, записывается в память МК и запускается под отладчиком.

Меню Debug->Stop Debugging прекращает отладку.

Проверяем связь с МК с помощью ST Visual Programmer

Инструменты разработки для STM8S установлены на ПК, начинаем пробовать.

Запускаем ST Visual Programmer:


Выбираем меню Configure->Configure ST Visual Programmer, в появившемся окне выбираем способ связи с МК: ST-LINK, USB, SWIM, STM8S105x6 (на плате STM8S-discovery установлен STM8S105C6). Нажимаем ОК:


Подключаем плату STM8S-discovery к USB. Выбираем меню Read->Current tab. Если плата подключена, и USB драйверы ST-Link v2 были установлены верно, то будет показано содержимое памяти МК (еще в процессе чтения на плате программатора будет быстро моргать светодиод):
 

Если появилось сообщение об ошибке, то нужно проверить, что МК подключен к USB, что настройки способа связи выбраны верно. Можно поискать ответ в интернете по данному сообщению об ошибке.

Инструмент ST Visual Programmer помогает убедиться, что наш МК жизнеспособен и имеет связь с ПК, а также позволяет посмотреть содержимое памяти МК (если не была установлена защита от чтения). Закрываем ST Visual Programmer.


вторник, 3 февраля 2015 г.

Инструменты разработки для STM8S

Под инструментами разработки для МК обычно понимают специальную программу - среду разработки (IDE, integrated development environment), которая включает в себя примерно такой набор возможностей:
  • текстовый редактор для исходных текстов программы
  • ведение проекта - список файлов с исходными текстами программы 
  • компилятор языка Си, включая ассемблер и компоновщик (англ. linker)
  • запись программы во Flash память МК
  • отладчик (англ. debugger)

На современном уровне компилятор языка Си является стандартом де-факто даже для 8-битных МК. Его применение существенно ускоряет процесс разработки по сравнению с ассемблером. Отладчик также является очень полезным инструментом, ускоряющим разработку в неочевидных и проблемных ситуациях. 

Для STM8S есть пара разумных вариантов IDE:

1.
  • ST Visual Develop - среда разработки (нет Си компилятора, только ассемблер)
  • Cosmic C compiler - компилятор языка Си (ограничение на размер программы 32 Кбайта, бесплатная лицензия на год)
  • ST-Link v2 driver (Win7/Vista/XP, Win8) - USB драйвер для подключения к плате STM8S-discovery (нужно для записи программы во flash и для отладчика).

Достоинства: этот вариант подходит для начала, примеры программ для STM8S от производителя выложены именно под эту среду.

Недостатки: нужно регистрироваться на Cosmic C compiler (ответ может занять сутки, лицензия только на 1 год), ST Visual Develop бывает "тормозит" при работе с исходными текстами программы.

Если возникнут проблемы с ссылками, то вот дополнительные:
Ссылка на Cosmic с сайта st.com
Список инструментов разработки для STM8S на сайте st.com

2.
  • IAR Embedded Workbench for STM8 (EWSTM8) - полная среда разработки с компилятором языка Си и отладчиком, бесплатная версия имеет ограничения на размер программы 8 Кбайт (Kickstart, size-limited evaluation) или 30 дней пробный период (30-day time-limited evaluation).

Достоинства: среда IAR существует для массы других МК, хороший отладчик

Недостаткинужно регистрироваться, более жесткое ограничение на размер программы (8 Кбайт), нужно привыкать к интерфейсу

Если возникнет проблема с ссылкой, то вот дополнительная:
Ссылка на IAR-EWSTM8 на сайте st.com