Ще один 8 бітний вечір
Нині важко когось здивувати тим що ти вмієш поводитись з контролерами AVR
. Курсів, що пропонують вивчити Arduino
стільки що всі й не порахувати. Пропонуються різні модифікації плат. Але їх поєднує одне… ЇХ називають просто Arduino
.
Вже навіть дітей вчать програмувати на цій платі…
А на ринку праці вимагають, щоб розробник знався з кристалами STM
.
Сьогодні вечір дорослішання.
Підготовка
Для програмування нам потрібно: плата, комп’ютер, та копілятор.
Почну я з останнього. З копілятора… А згодом пошукаю у коробці “естемку”
SDCC
Заванатажуємо та встановлюємо
Для компіляції програм для цього камінця я буду(так в мережі рекомендують) використовувати компілятор sdcc
(Small Device C Compiler). Це колекція компіляторів для мови ANSI C
для великої кількості архітектур одна з яких восьмимітний STM. Є версії для різних ОСей. Я буду використовувати версію для linux
. Тож завантажуємо архів з необхідною версією з http://sdcc.sourceforge.net/
Відкриваємо термінал вводимо наступні команди
|
|
В результаті таких дій ми отримаємо розпаковані файли. В мене розпакований каталог з іменем sdcc-4.4.0-rc2
, а у вас він може відрізнятися. Крокуємо далі…
|
|
Ми перейшли до каталогу з компіляторами які скачали
|
|
Видаляємо зайві файли, які в системі не потрібні. Ви ж не забули проглянути вміст файлів які ми тільки що видалили? Ні. Пізно 😄…
Продовжуємо інсталяцію.
Важливо!!! Тепер нам знадобляться права суперкористувача. Якщо нам потрібно виконати команду від імені root
:
|
|
І вводимо пароль
Перевіримо чи працює
Тепер перевіримо чи працює
|
|
Програма відгукнулась мені
SDCC : mcs51/z80/z180/r2k/r2ka/r3ka/sm83/tlcs90/ez80_z80/z80n/r800/ds390/pic16/pic14/TININative/ds400/hc08/s08/stm8/pdk13/pdk14/pdk15/mos6502/mos65c02 TD- 4.4.0 #14579 (Linux)
published under GNU General Public License (GPL)
ми бачимо перелік всього що ми можемо запрограмувати цим компілятором
Ще один тест. Кличу прогу без повного шляху
|
|
Програма успішно відгукується так само
Пограємось з компілятором
Хочу погратись з компілятором таким чином. Подразнити його. В якому форматі він мене матюкати буде?
Створюю порожній файл stm8.cpp
і згодовою його компілятору
|
|
Отримую перший матюк error 119: don't know what to do with file 'stm.cpp'. file extension unsupported
. Ми не можемо програмувати мовю C++
. (Мій наставник говорив: “Якщо знаєш С++, ти автоматично знаєш чистий Сі. Віримо і йдемо далі.)
Створємо c
-файл і повторюємо. Посилаємо новий файл компілятору. Отримуємо нові повідомлення:
stm.c:1: warning 190: ISO C forbids an empty translation unit
stm.c:1: error 74: function 'main' undefined
Змінюю файл stm.c
надаючи такого вигляду
|
|
А ще карще почитаємо інструкцію
STM8FLASH
Завантажуємо та встановлюємо
Для завантаження програми на мікроконтроллер нам знадобиться окрім програматора утиліта stm8flash
. Для операційних систем віндовс є готові виконувані файли цієї утиліти. А я на шастя не користутюсь операційною системою віндовс. Я буду збирати цю утиліту з джерельного коду, який доступний на GitHub
за посиланням https://github.com/vdudouyt/stm8flash
Для збирання за моєю інструкцією потрібно виконати наступні дії
|
|
Коротока перевірка
|
|
В мене програма відгукнулас так:
20170616-1.1
Знайомство з платою
STM8L-DISCOVERY
Я колись давно придбав собі плату STM8L-DISCOVERY
з якої хотів почати своє самостійне знайомство з контролерами STM
. Нарешті настав її час.
STM8L-DISCOVERY
зібрана на базі мікроконтролера STM8L152C6T6
і має вбудований інтерфейс відлагодження ST-Link
, рідкокристалічний дисплей, користувацьку кнопку та світлодіод.
Сам мікроконтролер наділений 32KB
Flash, 2KB
оперативної пам’яті та 1KB
енергонезалежної пам’яті. Може працювати при напрузі джерала живлення від 1.8V
до 3.6V
працюючи на частоті 16MHz
і маючи при цьому 5 варіантів роботи в режимі енергозбереження. Виробники запхнули в нього 12 бітний цифроан-алоговий перетворювач та 12 бітний 25 канальний аналогово-цифровий перетворювач з можливістю робити 1M
замірів за секунду.
Про всі інші можливості можна дізнатися з даташиту на мікроконтреллери STM8L151x4, STM8L151x6,STM8L152x4, STM8L152x6
Ось ще корисна інформація про плату розробки
Pin-control
Основана робота з портами введення виведння ведеться через п’ять регістрів на кожен порт. Ось вони
Px_ODR
- Port x output data register. Регістр для виведення даних(аналог PORTx у AVRках). Якщо порт сконфігкрований на вихід, то запис в цей порт змінить електичний стан відповідної ніжки чіпаPx_IDR
- Port x input data register. Регістр читання даних (PINx у AVRках)Px_DDR
- Port x data direcrion register. Регістр визначає напрямок роботи порту. При низькому рівні в цьому регістрі, відповідний пін налаштований на вхід.Px_CR1
- Port x control register 1. Електричні властивості порту. Якщо пін налаштований на вхід запис1
в цей регіст вмикаєpull_up
резистор в середині чіпа інакше вивід отримуєZ
стан (плаваючий). Якщо пін налаштваний на вихід то1
в цьому регістрі вмикаєpush-pull
режим, інакше ніжка працює як відкритий колектор.Px_CR2
- Port x control register 2. Якщо пін налаштовано на вхід1
дозволяє генерацію зовнішнього переривання на піні, інакше таке заборонено. Якщо пін працює на виввід то запис1
обмежує швидкість перемикання піна до 10 MHz, інакше - 2 MHz.
Дрик-Дрик ножкою
Спробуємо подригати ніжкою мікрокоторлеру.
В нас на платі є два користувацькі світлодіоди які через резистори піж’єднані до портів PE7
та PC7
. Спробуємо увімкнути їх.
|
|
Компілюємо файл
|
|
Запихаємо у нашу плату
|
|
Урра! Наші світлодіоди горять! Тобто світяться 😄
А як щодо помигати світлодіодами?
Препишемо трошки код
|
|