- архітектура STM8
- Вибір середовища програмування
- Вибір отладочной плати мікроконтролера
- Програмна підтримка мікроконтролерів на ядрі STM8
- Робота з мікро контролером в середовищі IAR
- Написання свого застосування
- висновок
- література
- Про компанію ST Microelectronics
Портфель мікроконтролерів компанії STMicroelectronics в його нинішньому вигляді сформувався кілька років тому (малюнок 1). Виключаючи різні вузькоспеціалізовані пристрої, в ньому виділяються 2 сімейства контролерів - 8-бітове STM8 і 32-бітове STM32 . У той час, як останнім засноване на ядрах Cortex-Mx виробництва компанії ARM, STM8 - це архітектура власної розробки. Незважаючи на те, що в нашій країні словосполучення «контролер від SТ» твердо асоціюється з приладами сімейства на ядрі Cortex, 8-бітові контролери утримують стійке лідерство за кількістю проданих мікросхем, яке становить близько 240 мільйонів шт. (За інформацією за 2011 рік).
Мал. 1. Портфель контролерів STMicroelectronics
Мікроконтролери STM8 спочатку були орієнтовані на автомобільний ринок, проте успішність архітектури дозволила вивести дане сімейство на широкий ринок. Але кращі риси, властиві контролер, орієнтованим на автомобільну промисловість, сімейство зберегло. Це, в першу чергу, те, що вся пам'ять, як Flash, так і Eeprom, побудована за технологією Еeprom, завдяки цьому енергоспоживання слабо залежить від температури кристала. Технологічний процес 130 нм гарантує низьке споживання. До речі, можна згадати, що STMicroelectronics займає 40% ринку Eeprom-пам'яті і є незаперечним лідером в цій ніші, відбувається це завдяки самим передовим технологіям. А то, що пам'ять займає до 95% кристала контролера, гарантує, що вироби будуть відповідати найвищим вимогам якості.
У даній статті ми розглянемо більш докладно архітектуру контролера, навчимося створювати проект в середовищі IAR, конфігурувати його під обрану платформу.
За кілька років існування мікроконтролери на ядрі STM8 стали де-факто лідером на ринку 8-бітних пристроїв. Щорічне виробництво становить кілька сотень мільйонів штук. Мікроконтролери цього сімейства можна знайти повсюдно: в побутовій і промисловій електроніці, комп'ютерах, медичному обладнанні.
архітектура STM8
Архітектура STM8 настільки проста для програміста, що не вимагає глибоких знань для того, щоб почати працювати з контролером. Дуже багато було взято від контролерів STM32 (читай ARM). У той же час набір команд CISC гарантує високу щільність коду, а то, що команди в більшості 1-тактові і 16-бітові - високу продуктивність. Серед розробників часто побутує думка, що STM8 - це інкарнація 51 архітектури, проте це зовсім не вірно. Наявність команд відносної непрямої адресації явно говорить про те, що система інструкцій оптимізована під язик «Сі» для швидкої обробки умов case. Слід так само відзначити, що знань асемблера для вирішення переважної більшості завдань промислового управління не потрібно.
З практичної точки зору, в першу чергу слід звернути увагу на єдине 24-бітове адресний простір, в якому чудово розмістилася Flash-пам'ять, ОЗУ, Eeprom, а також регістри периферії. Це істотно спрощує написання коду, наприклад, функції для роботи з масивами з ОЗУ і Flash-пам'яті не потрібно писати в декількох примірниках. Коди різних стеків і бібліотек легко портируют, так як в основному розраховані на архітектуру фон Неймана (в сенсі адресного простору). При цьому шини для доступу до різних типів пам'ятей розділені, що говорить нам про наявність Гарвардської архітектури.
Для того, щоб багатобайтові команди і дані надходили в ядро без затримок, реалізований 3-ступінчастий конвеєр. Команди вичитуються з пам'яті по 32-бітної шині, відповідно, за 1 звернення - 2 команди. Код можна виконувати так само з пам'яті даних, але, так як шина до пам'яті даних 8-бітна, то конвеєр буде заповнюватися набагато повільніше і продуктивність буде нижче, проте про таку можливість потрібно знати.
Система переривань реалізована в ядрі. Переривання викликаються через вектора, які розташовані в початковій частині коду. При цьому контекст зберігається автоматично. Однак для виходу з переривання потрібно інструкція, відмінна від інструкції виходу зі звичайної підпрограми, тому користувач повинен в тому чи іншому вигляді повідомляти компілятору про те, що функція є обробником переривань. Кількість переривань - до 32, з яких 29 призначені для користувача, з заданим пріоритетом, інші - системні, включаючи RESET.
Вибір середовища програмування
Найбільш популярні засоби програмування STM8 це середовища ST Visual Develop з компілятором виробництва компанії Raisonance і IAR Embedded Workbench. У таблиці 1 наведено їх короткий порівняння.
Таблиця 1. Короткий порівняння середовищ розробки IAR EW і ST VD
ПараметрST VDIAR EWПідтримка ST7 так ні Обмеження за кодом на безкоштовну ліцензію, Кбайт 32 8 Багатоплатформність компілятора немає так Вбудований дебагер-відладчик так так (ST-LINK) Рівень оптимізації коду високий високий
У нашому випадку ми виберемо середу виробника IAR, так як контролер, який ми будемо програмувати містить всього 8 Кбайт пам'яті програм і за іншими параметрами він не програє ST VD, зате більш відомий російському розробнику, так як багато хто користувався ним для програмування контролерів інших архітектур.
Вибір отладочной плати мікроконтролера
Як уже було згадано вище, ми розглянемо контролер з 8 Кбайт Flash-пам'яті, це контролер лінійки Value Line. Чому? В першу чергу тому, що дане сімейство позиціонується як найефективніший в плані ціни і не має конкурентів з боку STM32. Дані мікроконтролери призначені для створення на їх основі різних датчиків, контролерів управління для побутової та промислової апаратури. Тобто там, де потужність 32 біт не затребувана, а вартість і енергоспоживання грають найважливішу роль.
Отже, зупинимо вибір на контролері STM8S003K3T6 . Компанія STMicroelectronics для даної лінійки випустила засіб для швидкого старту під назвою STM8SVLDISCOVERY . Розглянемо коротко, що пропонує дана отладочная плата (рис. 2).
Мал. 2. Отладочная плата STM32VLDiscovery
Дана отладочная плата вже містить вбудований відладчик ST-Link, який згодом можна використовувати для програмування призначених для користувача систем.
Програмна підтримка мікроконтролерів
на ядрі STM8
Периферія мікроконтролерів STM8 дуже гнучка і для того, щоб налаштувати той чи інший блок в необхідний режим, знадобиться налаштувати до декількох конфігураційних регістрів. Для того, щоб захиститися від дрібних помилок, на виправлення яких, як правило, втрачається велика частина часу, STMicroelectronics пропонує стандартну периферійну бібліотеку. З її допомогою ініціалізація перетворюється в запуск функції з декількома зрозумілими параметрами.
Структура бібліотеки приведена на малюнку 3.
Мал. 3. Структура стандартної периферійної бібліотеки
З цієї структури видно, що всі обробники переривань зібрані в одному файлі. За кожен периферійний блок відповідає окремий файл і існує конфігураційний файл, в якому користувач повинен вибрати, які модулі периферії будуть включені, а які не будуть. До файлу програми користувача підключається єдиний файл stm8s.h, а все інше робиться автоматично.
Наявність бібліотек не виключає можливість роботи безпосередньо з регістрами. Більш того, обидва підходи можна комбінувати для досягнення найкращих показників коду.
Дана бібліотека вільно скачується з сайту www.st.com.
Робота з мікро контролером в середовищі IAR
По-перше, з сайту http://www.iar.com/ слід завантажити і встановити середовище розробки IAR Embedded Workbench для STM8 в редакції Kickstart (рисунок 4).
Мал. 4. Форма проекту в середовищі IAR EW
Найпростіший шлях створення нового проекту - це скористатися шаблоном-прикладом. В кожному архіві периферійної бібліотеки є такий приклад, який після розпакування знаходиться в папці ProjectSTM8S_StdPeriph_TemplateEWSTM8.
Ми ж, для того, щоб спростити собі задачу, візьмемо периферійну бібліотеку з шаблоном проекту саме для цієї плати [1] і в цьому архіві знайдемо файл STM8SVLDISCOVERY_DiscoverProjectsProject_templateEWSTM8Project.eww. Разархівіруйте проект і запустіть цей файл. Відкриється середу IAR. В даному проекті-шаблоні вже налаштоване все необхідне для того, щоб працювати з контролером як через бібліотеки, так і через регістри (безпосередньо).
Як неважко помітити, призначені для користувача файли виведені в окремі папки та їх можна швидко знайти, щоб відкрити і що-небудь змінити. Бібліотека периферії виділена в окрему папку і в неї можна дивитися тільки для ознайомлення, так як всі включені в неї файли мають статус «тільки для читання». Отже, перед нами класичний вид проекту в середовищі IAR, де головним є файл main.c, в якому міститься функція входу в користувальницький додаток void main (void). Другий призначений для користувача файл - це stm8s_it.c, в якому містяться порожні обробники всіх можливих переривань. Ці обробники, в разі їх використання, залишиться заповнити власним кодом.
Розглянемо детально настройки проекту. Для цього слід зайти в меню, і вибрати ProjectOptions. Мабуть, основні опції ми розглядати докладно не будемо, так як вони зрозумілі і однакові для всіх версій IAR. А ось опції, які дозволяють працювати з бібліотекою ми обговоримо докладніше (малюнок 5).
Мал. 5. Властивості компілятора
Для цього знайдемо ятати Preprocessor в опціях С / С ++ - компілятора. В першу чергу зверніть увагу, що підключена папка з файлами описів (* .h) стандартної периферійної бібліотеки. Далі потрібно звернути увагу на наявність глобального макросу-визначення STM8S003. Бібліотека працює з різними лінійками сери STM8S, тому цей макрос допомагає їй зрозуміти, з чим їй конкретно доведеться працювати.
В опціях дебаггера за замовчуванням вже обраний ST-Link і для того, щоб завантажувати проект в плату, досить підключити її по USB і натиснути кнопку «Download and Debug» на панелі інструментів (рисунок 6).
Мал. 6. Частина панелі інструментів з кнопкою запуску
Написання свого застосування
Отже, ми впритул наблизилися до написання власного коду. Ми напишемо програму, яка буде конфігурувати висновок порту, до якого підключений світлодіод, і покерувати їм Перед тим, як приступити до програмування, необхідно завантажити принципову схему, її, а також іншу корисну інформацію по даний платі, можна знайти тут: [2].
Світлодіод катодом підключений до PD0, анод підключений через токозадающій резистор до харчування. Таким чином, щоб включити світлодіод, необхідно подати на висновок порту логічний 0.
В першу чергу вивчіть файл-шаблон main.c. Ви знайдете в ньому, крім самого основного додатки, цікаву функцію void assert_failed (u8 * file, u32 line). За замовчуванням вона відключена макросом USE_FULL_ASSERT. Ця функція дозволяє відстежити некоректне використання бібліотеки в тому випадку, якщо ви задали якийсь параметр невірно або переплутали порядок проходження параметрів. Цю опцію рекомендується активувати для режиму налагодження, включивши в список преопределенность символів компілятора.
Починаємо модифікацію void main (void).
Для того, щоб зрозуміти, яку функцію потрібно взяти для ініціалізації з бібліотеки, потрібно переглянути список опцій файлу stm8s_gpio.c, і стане очевидно, що потрібна функція GPIO_Init (малюнок 7).
Мал. 7. Функції драйвера периферійного модуля GPIO
Тут же можна подивитися, які аргументи приймає ця функція. Для цього не потрібно відкрити товсті довідники, а досить просто подивитися опис функції, розташоване над нею самою у вигляді коментаря (рисунок 8).
Мал. 8. Функція ініціалізації GPIO
Відповідно, перший аргумент стане очевидно зрозумілими, це GPIOD. А ось для розуміння того, що повинні з себе представляти інші, потрібно відправитися до визначень GPIO_Pin_TypeDef і GPIO_Mode_TypeDef. І відразу стане ясно, що це GPIO_PIN_0 і GPIO_MODE_OUT_PP_HIGH_FAST відповідно.
Отже, ми отримали функцію
GPIO_Init (GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_HIGH_FAST)
Включимо її в основний код. Ось і вся ініціалізація. Після цього залишається тільки впливати на стан виведення. Для цього також звернемося в файл бібліотеки і знайдемо найбільш підходящу функцію void GPIO_Write (GPIO_TypeDef * GPIOx, uint8_t PortVal). Аналогічним чином знайдемо, які повинні бути у даній функції аргументи для того, щоб включити або вимкнути світлодіод.
Отже, в підсумку ми отримаємо такий вигляд функції void main (void) (рисунок 9):
Мал. 9. Функція void main (void)
Після цього завантажимо код в контролер і по кроках (клавіша F10) пройдемо всі команди для того, щоб переконатися, що код працює.
висновок
Мікроконтролери сімейства STM8 - це потужні і, в той же час, недорогі пристрої, на яких можна будувати різну домашню і промислову автоматику. Вкрай низька ціна контролерів лінійки Value Line робить їх досить конкурентоспроможними на ринку засобів для побудови різних датчиків (диму, газу) там, де масовість, компактний розмір і ціна важливі в рівній мірі. А то, що контролер дуже зручний у використанні як в електричному, так і в програмному сенсі, робить можливим закінчити розробку в найкоротший термін.
література
1. http://www.st.com/web/en/catalog/tools/PF257969
2. http://www.st.com/web/en/catalog/tools/PF252276 #.
Отримання технічної інформації, замовлення зразків, поставка - e-mail: [email protected]
Про компанію ST Microelectronics
Компанія STMicroelectronics є №1 виробником електроніки в Європі. Компоненти ST широко представлені в оточуючих нас споживчих товарах - від iPhone до автомобілів різних марок. Лідери індустріального ринку вибирають компоненти ST за їх надійність і видатні технічні параметри. У компанії ST працює 48 000 співробітників в 35 країнах. Виробничі потужності розташовані в 12 країнах світу. Понад 11 тисяч співробітників зайняті дослідженнями і розробками - інноваційне лідерство ... читати далі
Чому?