Інтернет Windows Android

ARM. STM32 швидкий старт

Опубліковано 09.08.2016

мікроконтролери STM32 набувають все більшої популярності завдяки своїй потужності, досить різнорідної периферії, і своїй гнучкості. Ми почнемо вивчати, використовуючи бюджетну тестову плату, вартість якої не перевищує 2 $ (у китайців). Ще нам знадобиться ST-Link програматор, вартість якого близько 2.5 $ (у китайців). Такі суми витрат доступні і студентам і школярам, \u200b\u200bтому саме з такого бюджетного варіанту я і пропоную почати.


Цей мікроконтролер не є найпотужнішим серед STM32, Але і не найслабший. Існують різні плати з STM32, В томі числі Discovery які за ціною коштують близько 20 $. На таких платах майже все те ж, що і на нашій платі, плюс програматор. У нашому випадку ми будемо використовувати програматор окремо.

Мікроконтролер STM32F103C8. Характеристики

  • Ядро ARM 32-bit Cortex-M3
  • Максимальна частота 72МГц
  • 64 Кб Флеш пам'ять для програм
  • 20Кб SRAM пам'яті
  • Харчування 2.0 ... 3.3В
  • 2 x 12-біт АЦП (0 ... 3.6В)
  • DMA контролер
  • 37 входів / виходів толерантних до 5В
  • 4 16-розрядно таймера
  • 2 watchdog таймера
  • I2C - 2 шини
  • USART - 3 шини
  • SPI - 2 шини
  • USB 2.0 full-speed interface
  • RTC - вбудований годинник

На платі STM32F103C8 доступні

  • виводь портів A0-A12, B0-B1, B3-B15, C13-C15
  • Micro-USB через який можна живити плату. На платі присутній стабілізатор напруги на 3.3В. Харчування 3.3В або 5В можна подавати на відповідні висновки на платі.
  • кнопка Reset
  • дві перемички BOOT0 і BOOT1. Будемо використовувати під час прошивки через UART.
  • Два кварцу 8МГц і 32768 Гц. У мікроконтролера є множник частоти, тому на кварці 8 МГц ми зможемо досягти максимальної частоти контролера 72Мгц.
  • Два світлодіоди. PWR - сигналізує про подачі живлення. PC13 - підключений до виходу C13.
  • Конектор для програматора ST-Link.

Отже, почнемо з того, що спробуємо прошити мікроконтролер. Це можна зробити за допомогою через USART, або за допомогою програматора ST-Link.

Завантажити тестовий файл для прошивки можна. Програма блимає світлодіод на платі.

Прошивка STM32 за допомогою USB-Uart перехідника під Windows

У системної пам'яті STM32 є Bootloader. Bootloader записаний на етапі виробництві і будь-який мікроконтролер STM32 можна запрограмувати через інтерфейс USART за допомогою USART-USB перехідника. Такі перехідники найчастіше виготовляють на базі популярної мікросхем FT232RL. Перш за все підключимо перехідник до комп'ютера і встановимо драйвера (якщо потрібно). Завантажити драйвера можна з сайту виробника FT232RL - ftdichip.com. Треба качати драйвера VCP (Virtual com port). Після установки драйверів в комп'ютері повинен з'явитися віртуальний послідовний порт.


підключаємо RX і TX виходи до відповідних висновків USART1 мікроконтролера. RX перехідника підключаємо до TX мікроконтролера (A9). TX перехідника підключаємо до RX мікроконтролера (A10). Оскільки USART-USB має виходи живлення 3.3В подамо харчування на плату від нього.

Щоб перевести мікроконтролер в режим програмування, треба встановити висновки BOOT0 і BOOT1 в потрібний стан і перезавантажити його кнопкою Reset або вимкнути і включити харчування мікроконтролера. Для цього у нас є перемички. Різні комбінації заганяють мікроконтролер в різні режими. Нас цікавить тільки один режим. Для цього у мікроконтролера на виведення BOOT0 має бути логічна одиниця, а на виведення BOOT1 - логічний нуль. На платі це таке положення перемичок:

Після натискання кнопки Reset або відключення і підключення живлення, мікроконтролер повинен перейти в режим програмування.

Програмне забезпечення для прошивки

Якщо використовуємо USB-UART перехідник, ім'я порту буде приблизно таке / Dev / ttyUSB0

Отримати інформацію про чіп

результат:

Читаємо з чіпа в файл dump.bin

sudo stm32flash -r dump.bin / dev / ttyUSB0

Пишемо в чіп

sudo stm32flash -w dump.bin -v -g 0x0 / dev / ttyUSB0

результат:

Stm32flash 0.4 http://stm32flash.googlecode.com/ Using Parser: Raw BINARY Interface serial_posix: 57600 8E1 Version: 0x22 Option 1: 0x00 Option 2: 0x00 Device ID: 0x0410 (Medium-density) - RAM: 20KiB (512b reserved by bootloader) - Flash: 128KiB (sector size: 4x1024) - Option RAM: 16b - System RAM: 2KiB Write to memory Erasing memory Wrote and verified address 0x08012900 (100.00%) Done. Starting execution at address 0x08000000 ... done.

Прошивка STM32 за допомогою ST-Link програматора під Windows

При використанні програматора ST-Link висновки BOOT0 і BOOT1 не використовуються і повинні стояти в стандартному положенні для нормальної роботи контролера.

(Книжка російською мовою)

маркування STM32

Device familyProduct typeDevice subfamilyPin countFlash memory sizePackageTemperature range
STM32 =
ARM-based 32-bit microcontroller
F \u003d General-purpose
L \u003d Ultra-low-power
TS \u003d TouchScreen
W \u003d wireless system-on-chip
60 \u003d multitouch resistive
103 \u003d performance line
F \u003d 20 pins
G \u003d 28 pins
K \u003d 32 pins
T \u003d 36 pins
H \u003d 40 pins
C \u003d 48/49 pins
R \u003d 64 pins
O \u003d 90 pins
V \u003d 100 pins
Z \u003d 144 pins
I \u003d 176 pins
B \u003d 208 pins
N \u003d 216 pins
4 \u003d 16 Kbytes of Flash memory
6 \u003d 32 Kbytes of Flash memory
8 \u003d 64 Kbytes of Flash memory
B \u003d 128 Kbytes of Flash memory
Z \u003d 192 Kbytes of Flash memory
C \u003d 256 Kbytes of Flash memory
D \u003d 384 Kbytes of Flash memory
E \u003d 512 Kbytes of Flash memory
F \u003d 768 Kbytes of Flash memory
G \u003d 1024 Kbytes of Flash memory
I \u003d 2048 Kbytes of Flash memory
H \u003d UFBGA
N \u003d TFBGA
P \u003d TSSOP
T \u003d LQFP
U \u003d V / UFQFPN
Y \u003d WLCSP
6 \u003d Industrial temperature range, -40 ... + 85 ° C.
7 \u003d Industrial temperature range, -40 ... + 105 ° C.
STM32F103 C8 T6

Як зняти захист від запису / читання?

Якщо ви отримали плату з STM32F103, а програматор її не бачить, це означає, що китайці захистили Флеш пам'ять мікроконтролера. Питання "навіщо?" залишимо без уваги. Щоб зняти блокування, підключимо UART перехідник, програмуватимемо через нього. Виставляємо перемички для програмування і поїхали:

Я це буду робити з під Ubuntu за допомогою утиліти stm32flash.

1. Перевіряємо видно чи мікроконтролер:

Sudo stm32flash / dev / ttyUSB0

Повинні отримати щось таке:

Stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Version: 0x22 Option 1: 0x00 Option 2: 0x00 Device ID: 0x0410 (Medium-density) - RAM: 20KiB (512b reserved by bootloader) - Flash: 128KiB (sector size: 4x1024) - Option RAM: 16b - System RAM: 2KiB

2. Знімаємо захист від читання а потім від записи:

Sudo stm32flash -k / dev / ttyUSB0 stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Version: 0x22 Option 1: 0x00 Option 2: 0x00 Device ID: 0x0410 (Medium-density) - RAM: 20KiB ( 512b reserved by bootloader) - Flash: 128KiB (sector size: 4x1024) - Option RAM: 16b - System RAM: 2KiB Read-UnProtecting flash Done. sudo stm32flash -u / dev / ttyUSB0 stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Version: 0x22 Option 1: 0x00 Option 2: 0x00 Device ID: 0x0410 (Medium-density) - RAM: 20KiB ( 512b reserved by bootloader) - Flash: 128KiB (sector size: 4x1024) - Option RAM: 16b - System RAM: 2KiB Write-unprotecting flash Done.

Тепер можна нормально працювати з мікро контролером.

Курс допоможе оволодіти навичками програмування мікроконтролерів з нуля. Як приклад для роботи взята отладочная плата STM32F3Discovery з встановленим мікро контролером STM32F303VCT6.

Ми встановимо програмні інструменти для роботи з цією отладочной платою, познайомимося з портами введення-виведення, таймерами-лічильниками та іншими периферійними модулями і навчимося їх використовувати.

Урок 1: Введення

Введення в програмування мікроконтролерів. Вибір апаратних засобів. Перше знайомство з налагоджування платою.

Урок 2: Установка IAR

Знайомство з фірмою-виробником ST Microelectronics. Установка програмного середовища розробки IAR.

Урок 3: Додаткові інструменти

Установка програми-конфігурувати STM32Cube. Установка програми роботи з пам'яттю ST Visual Programmer.

Урок 4: Створення проекту

Створення конфігурації проекту в STM32Cube і генерація проекту для IAR Embedded Workbench.

Урок 5. FLASH-пам'ять

Урок 6. Порти введення-виведення

Поняття портів і ліній введення-виведення. Завантаження програми в отладочную плату засобами середовища розробки IAR. Включення світлодіодів на платі.

Урок 7. Світлодіоди і кнопка

Реалізація «біжить вогню», а також перемикання світлодіодів по кнопці.

Урок 8. Збереження даних

Збереження енергонезалежних даних у FLASH-пам'ять мікроконтролера на прикладі запам'ятовування світлодіода, на якому закінчився перемикання біжить вогню перед відключенням живлення

Урок 9. Таймери-лічильники

Використання периферійного модуля таймера-лічильника для формування затримки.

Урок 10. Переривання

Використання переривання по переповнення таймера-лічильника TIM6 для реалізації затримки.

Урок 11. Зовнішні переривання

Використання різних переривань і їх пріоритетів.

Урок 12. Тактирование

Завдання тактової частоти ядра і периферійних модулів.

Урок 13. Широтно-імпульсна модуляція

Конфігурація і використання широтно-імпульсної модуляції на каналах таймера TIM1 з різною частотою.

Урок 14. Сторожовий таймер

Використання незалежного і системного сторожового таймера. Використання регістра вікна.

Урок 15. Аналого-цифровий перетворювач

Використання аналого-цифрового перетворювача і внутрішнього датчика температури.

Урок 16. Основні і додаткові канали АЦП

Використання декількох каналів єдиного модуля АЦП.

Урок 17. Прямий доступ до пам'яті

Використання прямого доступу до пам'яті для отримання результатів аналого-цифрового перетворення.

Урок 18. Дискретизація

Використання таймера для синхронізації запусків АЦП зі збереженням результатів через прямий доступ до пам'яті.

Урок 19. Цифро-аналоговий перетворювач

Використання цифро-аналогового перетворювача для генерації трикутного сигналу, сигналу шуму або постійного аналогового значення.

Урок 20. користувача сигнал

Використання цифро-аналогового перетворювача для генерації сигналу довільної форми.

Вітаю всіх любителів програмування, мікроконтролерів, та й електроніки в цілому на нашому сайті! У цій статті трохи розповім про те, чим ми будемо займатися тут, а саме про учбовому курсі з мікроконтролерів ARM.

Отже, для початку розберемося, що ж потрібно знати і вміти, щоб почати вивчати ARM'и. А, в принципі, нічого супер складного і феєричного 😉 Звичайно, на контролери ARM люди зазвичай переходять, вже награвшись з PIC'амі і AVR'камі, тобто в більшості своїй досвідчені розробники. Але я постараюся максимально докладно і зрозуміло описувати все те, що ми будемо розбирати, щоб ті, хто вперше вирішив спробувати себе в програмуванні мікроконтролерів, могли легко розібратися в матеріалі. До речі, якщо будуть виникати якісь питання, чи просто щось буде працювати не так, як було задумано, пишіть в коментарі, постараюся розібратися і допомогти.

Тепер перейдемо до технічних питань) Кілька разів я вже згадав назву «Навчальний курс ARM», але, за великим рахунком, це не зовсім вірно. Мікроконтролера ARM як такого не існує. Є контролер з ядром (!) ARM, а це, погодьтеся, все-таки не одне і те ж. Так ось, такі девайси випускає ряд фірм, серед яких особливо виділяються, STMicroelectronics і NXP Semiconductors. Відповідно випускають вони контролери STM і LPC. Я зупинив свій вибір на STM32, вони мені просто більше сподобалися \u003d) У STM дуже підкуповує, що розібравшись з будь-яким МК з лінійки STM32F10x, не виникне ніяких проблем і з будь-яким іншим. Одна лінійка - один даташит. До речі є величезна кількість як дорогих, так і не дуже, налагоджувальних плат з контролерами STM32, що дуже радує, хоча перший час будемо налагоджувати наші програми в симуляторі, щоб оцінити можливості контролера, перш ніж купувати залізо. Ось, про всяк випадок, офіційний сайт STMicroelectronics -.

Як то плавно виїхали на тему компілятора, так що скажу пару слів про це. Я, не довго думаючи, вибрав Keil, не в останню чергу через потужний вбудованого симулятора. Можна і на UART там подивитися, і на будь-який регістр, і навіть логічний аналізатор є в наявності. Словом, у мене Keil залишив в основному тільки приємні враження, хоча є і мінуси, звичайно, але не катастрофічні. Так що можете сміливо качати Keil uvision4 з офф. сайту (). Правда є одне АЛЕ - IDE платна, але доступний демо-режим з обмеженням коду в 32Кб, яких нам поки з лишком вистачить. Кому цього мало є величезна кількість кряков для Keil'а 😉 Встановлюється все без проблем - пару раз тикаємо далі і все відмінно ставиться і працює без додаткових танців з бубном.

Власне, ось і все, що я хотів тут розповісти, пора переходити від слів до справи, але це вже в наступній статті. Будемо вивчати програмування мікроконтролерів STM32 з нуля!

Мікроконтролер STM32 - популярна і дуже затребувана платформа, що дозволяє створювати професійні рішення для автоматизації в самих. На відміну від доступного Arduino, STM32 вимагає більш глибокого занурення в деталі, вона складніше для початківців, для неї менше підручників російською. У цій статті ми постараємося дати базову інформацію про платформу, її історії, підкажемо, де можна скачати програми і бібліотеки, як написати перший скетч.

STM32 - це платформа, в основі якої лежать мікроконтролери STMicroelectronics на базі ARM процесора, різні модулі та периферія, а також програмні рішення (IDE) для роботи з залізом. Рішення на базі stm активно використовуються завдяки продуктивності мікроконтролера, його вдалою архітектурі, малому енергоспоживанні, невеликій ціні. В даний час STM32 складається вже з декількох лінійок для самих різних призначень.

Історія появи

Серія STM32 була випущена в 2010 році. До цього компанією STMicroelectronics вже випускалися 4 сімейства мікроконтролерів на базі ARM, але вони були гірше за своїми характеристиками. Контролери STM32 вийшли оптимальними за властивостями і ціною. Спочатку вони випускалися в 14 варіантах, які були розділені на 2 групи - з тактовою частотою до 2 МГц і з частотою до 36 МГц. Програмне забезпечення у обох груп однакову, як і розташування контактів. Перші вироби випускалися з вбудованою флеш-пам'яттю 128 кбайт і ОЗУ 20 кбайт. Зараз лінійка істотно розширилася, з'явилися нові представники з підвищеними значеннями ОЗУ і Flash пам'яті.

Переваги та недоліки STM32

Основні переваги:

  • Низька вартість;
  • Зручність використання;
  • Великий вибір середовищ розробки;
  • Чіпи взаємозамінні - якщо не вистачає ресурсів одного мікроконтролера, його можна замінити на більш потужної, не змінюючи самої схеми і плати;
  • Висока продуктивність;
  • Зручна налагодження мікроконтролера.

недоліки:

  • Високий поріг входження;
  • На даний момент не так багато літератури по STM32;
  • Більшість створених бібліотек вже застаріли, простіше створювати свої власні.

Мінуси STM32 не дають поки микроконтроллеру стати заміною Ардуіно.

За технічними характеристиками Ардуіно програє STM32. Тактова частота мікроконтролерів Ардуіно нижче - 16 МГц проти 72 МГц STM32. Кількість висновків GRIO у STM32 більше. Обсяг пам'яті у STM32 також вище. Не можна не відзначити pin-to-pin сумісність STM32 - для заміни одного виробу на інший не потрібно міняти плату. Але повністю замінити Ардуіно конкуренти не можуть. В першу чергу це пов'язано з високим порогом входження - для роботи з STM32 потрібно мати базис. Плати Ардуіно більш поширені, і, якщо у користувача виникає проблема, знайти рішення можна на форумах. Також для Ардуіно створені різні Шілд і модулі, що розширюють функціонал. Незважаючи на переваги, по співвідношенню ціна / якість виграє STM32.

Сімейство мікроконтролерів STM32 відрізняється від своїх конкурентів відмінним поведінкою при температурах від -40С до +80 С. Висока продуктивність не зменшується, на відміну від Ардуіно. Також можна знайти вироби, що працюють при температурах до 105С.

Огляд продуктових лінійок


Сімейство STM32 має широкий асортимент виробів, що розрізняються за обсягом пам'яті, продуктивності, споживання енергії та інші характеристики.

Серії STM32F-1, STM32F-2 і STM32L повністю сумісні. Кожна із серій має десятки мікросхем, які можна без праці поміняти на інші вироби. STM32F-1 була першою лінійкою, її продуктивність була обмежена. Через це за характеристиками контролери швидко наздогнали вироби сімейства Stellaris і LPC17. Пізніше була випущена STM32F-2 з поліпшеними характеристиками - тактова частота досягала 120 МГц. Відрізняється високою процесорної потужністю, яка досягнута завдяки новій технології виробництва 90 нм. Лінійка STM32L представлена \u200b\u200bмоделями, які виготовлені за спеціальним технологічним процесом. Витоку транзисторів мінімальні, завдяки чому прилади показують кращі значення.

Важливо відзначити, що контролери лінійки STM32W не мають pin-to-pin сумісності з STM32F-1, STM32F-2 і STM32L. Причина полягає в тому, що лінійку розробляла компанія, яка надала радіочастотну частина. Це наклало обмеження на розробку для компанії ST.


Мікросхема STM32F100R4 має мінімальний набір функцій. Обсяг флеш пам'яті становить 16 Кбайт, ОЗУ - 4 Кбайт, тактова частота становить 12 МГц. Якщо потрібно більш швидке пристрій зі збільшеним об'ємом флеш-пам'яті до 128 Кбайт, підійде STM32F101RB. USB інтерфейс є у вироби STM32F103RE. Існує аналогічний пристрій, але з більш низьким споживанням - це STM32L151RB.

Програмне забезпечення для роботи з контролером


Для ARM архітектури розроблено безліч середовищ розробки. До найвідоміших і дорогим відносяться інструменти фірм Keil і IAR System. Програми цих компаній пропонують найбільш просунуті інструментарії для оптимізації коду. Також додатково існують різні системи - USB стеки, TCP / IP-стеки та інші. Застосовуючи системи Keil, користувач отримує хороший рівень технічної підтримки.

Також для STM32 використовується середовище розробки Eclipse і побудовані на ній системи Atollic TrueStudio (платна) і CooCox IDE (CoIDE) (безкоштовна). Зазвичай використовується остання. Її переваги перед іншими середовищами розробки:

  • Вільне програмне забезпечення;
  • Зручність використання;
  • Є багато прикладів, які можна завантажити.

Єдиний недолік середовища розробки CooCox IDE - збірка є лише під Windows.


Почати вивчення мікроконтролера STM32 краще з плати Discovery. Це пов'язано з тим, що на цій платі є вбудований програматор. Його можна підключити до комп'ютера через USB кабель і використовувати як в якості програмованого мікроконтролера, так і для зовнішніх пристроїв. Плата Discovery має повну розводку пинов з контролера на Піни плати. На плату можна підключати різні сенсори, мікрофони та інші периферійні пристрої.

Що потрібно для підключення STM32 до комп'ютера

Щоб почати роботу, будуть потрібні наступні компоненти:

  • Сама плата STM32 Discovery;
  • Datasheet на обрану модель;
  • Reference manual на мікроконтролер;
  • Встановлена \u200b\u200bна комп'ютер середовище розробки.

Як приклад перша програма буде розглянута в середовищі CooCox IDE.

перша програма


CooCox CoIDE

Навчання слід починати з найпростішого - з Hello World. Для початку потрібно встановити CooCox IDE на комп'ютер. Установка стандартна:

  • Скачується програма з офіційного сайту;
  • Там потрібно ввести адресу своєї електронної пошти і почати завантаження файлу з расшіреніем.exe;
  • Потрібно відкрити CooCox IDE вкладку Project, Select Toolchain Path;
  • Вказати шлях до файлу;
  • Знову відкрити середу розробки і натиснути View -\u003e Configuration на вкладку Debugger;
  • Тепер можна записувати програму.

Коли програма встановлена, її потрібно відкрити. Слід перейти у вкладку Browse in Repository і вибрати ST - свій мікроконтролер.

Далі на екрані з'явиться список бібліотек, які можна підключити. Для першої програми будуть потрібні системні CMSIS core і CMSIS Boot, бібліотека для роботи з системою тактирования RCC, GPIO для роботами з пинами.

Сама програма пишеться як і для Ардуіно, потрібно знати основи мови Сі.

У віконці Project слід відкрити main.c. У коді на самому початку слід підключити бібліотеки крім CMSIS (вони вже автоматично підключені). Додаються вони в такий спосіб:

#include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h". // Для миготіння светодиодом потрібно задати затримку: void Delay (int i) (for (; i! \u003d 0; i--);)

Потім додається тактирование порту в головній функції main. Який контакт за що відповідальний, можна переглянути в даташіте до мікроконтролеру.

RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOC, ENABLE);

Для налаштування параметрів висновків слід прописати її назву і поставити крапку. У спливаючому меню будуть вказані всі характеристики. Їх можна виправляти.

Після цього потрібно зробити зациклення в while, щоб світлодіод блимав, поки не відключиться харчування.

Коли програма написана, її можна завантажувати в контролер. Якщо є отладочная плата, її потрібно підключити через USB кабель і натиснути Download Code To Flash. Якщо плата відсутня, буде потрібно перехідник, який потрібно підключити до порту комп'ютера. Контакт BOOT 0 підключається до плюса харчування контролера, а потім включається саме харчування МК. Після цього почнеться прошивка.

Щоб завантажити програму в мікроконтролер, потрібно слідувати вказівкам від додатка. Спочатку прописується код порту, до якого підключений мікроконтролер. Також вказується швидкість. Радиться брати невелике значення, щоб не було збоїв. Програма знайде мікроконтролер, і потрібно буде натиснути кнопку «далі». У вкладці Download to device потрібно в поле Download from file вибрати написану програму і натиснути "далі".

Після цього потрібно вимкнути живлення контролера STM32, закрити Flash Loader Demonstrator, вимкнути перехідник. Тепер можна знову включити мікроконтролер в звичайному режимі. Коли програма буде завантажена, світлодіод блимає.

Робота в інших програмах проходить подібним чином. Також вибираються потрібні бібліотеки, і прописується код. У платних утиліт функціонал більше, і можна створювати більш складні проекти.

Нещодавно колега мене підсадив на ідею створення розумного будинку, я навіть встиг замовити собі десятки різних датчиків. Стало зрозуміло про вибір мікроконтролера (Далі МК) або плати. Після деяких пошуків знайшов кілька варіантів. Серед них були і Arduino (Включаючи його клони, один з яких собі замовив заради того, щоб просто побавитися) і Launchpad, Але все це надмірно і громіздко (хоча в плані програмування набагато простіше, але тему холіваров піднімати не буду, у кожного свої смаки). У підсумку вирішив визначатися не з готової платою, а взяти тільки МК і робити все з нуля. В результаті вибирав між Atmel ATtiny (2313), Atmel ATmega (Вирішив відмовитися тому що не зміг знайти за адекватні гроші), STM32 (Cortex на ядрі ARM). З Тиньков я вже встиг побалуватися, так що взяв собі STM32VL-Discovery. Це можна назвати вступом до циклу статей по STM32. Відразу зазначу, автором більшості цих статей являюся не я, тому що сам тільки пізнаю, тут я публікую їх в першу чергу для себе, щоб зручніше було шукати якщо щось забуду. І так поїхали!

Загальні відомості

мікроконтролери сімейства STM32 містять в своєму складі до семи 16-розрядних портів вводу-виводу c іменами від PORTA до PORTG. У конкретної моделі мікроконтролера без винятків доступні всі висновки портів, загальна кількість яких залежить від типу корпусу і обумовлено в DataSheet на відповідне підродина.

Для включення в роботу порту x необхідно попередньо підключити його до шини APB2 установкою відповідного біта IOPxEN в регістрі дозволу тактирования периферійних блоків RCC_APB2ENR:

RCC-\u003e APB2ENR | \u003d RCC_APB2ENR_IOPxEN; // Дозволити тактирование PORTx.

управління портами STM32 здійснюється за допомогою наборів з семи 32-розрядних регістрів:

  • GPIOx_CRL, GPIOx_CRH - задають режими роботи кожного з бітів порту в якості входу або виходу, визначають конфігурацію вхідних і вихідних каскадів.
  • GPIOx_IDR - вхідний регістр даних для читання фізичного стану висновків порту x.
  • GPIOx_ODR- вихідний регістр здійснює запис даних безпосередньо в порт.
  • GPIOx_BSRR - регістр атомарного скидання і установки бітів порту.
  • GPIOx_BSR - регістр скидання бітів порту.
  • GPIOx_LCKR - регістр блокування конфігурації висновків.

Режими роботи висновків GPIO

Режими роботи окремих висновків визначаються комбінацією бітів MODEy і CNFy регістрів GPIOx_CRL і GPIOx_CRH (Тут і далі: x-ім'я порту, y- номер біта порту).

GPIOx_CRL - регістр конфігурації висновків 0 ... 7 порту x:

структура регістра GPIOx_CRH аналогічна структурі GPIOx_CRL і призначена для управління режимами роботи старших висновків порту (біти 8 ... 15).

Біти MODEy зазначених регістрів визначають напрямок виведення і обмеження швидкості перемикання в режимі виходу:

  • MODEy \u003d 00: Режим входу (стан після скидання);
  • MODEy \u003d 01: Режим виходу, максимальна швидкість - 10МГц;
  • MODEy \u003d 10: Режим виходу, максимальна швидкість - 2МГц;
  • MODEy \u003d 11: Режим виходу, максимальна швидкість - 50МГц.

Біти CNF задають конфігурацію вихідних каскадів відповідних висновків:

в режимі входу:

  • CNFy \u003d 00: Аналоговий вхід;
  • CNFy \u003d 01: Вхід в третьому стані (стан після скидання);
  • CNFy \u003d 10: Вхід з притягає резистором pull-up (якщо PxODR \u003d 1) або pull-down (якщо PxODR \u003d 0);
  • CNFy \u003d 11: Зарезервовано.

в режимі виходу:

  • CNFy \u003d 00: Двотактний вихід загального призначення;
  • CNFy \u003d 01: Вихід з відкритим стоком загального призначення;
  • CNFy \u003d 10: Двотактний вихід з альтернативної функцією;
  • CNFy \u003d 11: Вихід з відкритим стоком з альтернативної функцією.

З метою підвищення завадостійкості все вхідні буфери містять в своєму складі тригери Шмідта. частина висновків STM32, Забезпечених захисними діодами, з'єднаними із загальною шиною і шиною живлення, позначені в datasheet як FT (5V tolerant) - сумісні з напругою 5 вольт.

Захист бітів конфігурації GPIO

Для захисту бітів в регістрах конфігурації від несанкціонованого запису в STM32 передбачений регістр блокування налаштувань GPIOx_LCKR
GPIOx_LCKR - регістр блокування налаштувань виведення порту:

Для захисту налаштувань окремого виведення порту необхідно встановити відповідний біт LCKy. Після чого здійснити послідовну запис в розряд LCKK значень "1" - "0" - "1" і дві операції читання регістра LCKR, Які в разі успішної блокування дадуть для біта LCKK значення "0" і "1". Захист настроювальних бітів збереже свою дію до чергового перезавантаження мікроконтролера.

Файл визначень для периферії мікроконтролерів STM32 stm32f10x.h визначає окремі групи регістрів, об'єднані загальним функціональним призначенням (в тому числі і GPIO), Як структури мови Сі, а самі регістри як елементи цієї структури. наприклад:

GPIOC-\u003e BSRR - регістр BSRR установки / скидання порту GPIOC.
Скористаємося визначеннями з файлу stm32f10x.h для ілюстрації роботи з регістрами введення-виведення мікроконтролера STM32F100RB встановленого в стартовому наборі STM32VLDISCOVERY:

#include "stm32F10x.h" u32 tmp; int main (void) (RCC-\u003e APB2ENR | \u003d RCC_APB2ENR_IOPCEN; // Дозволити тактирование PORTC. GPIOC-\u003e CRH | \u003d GPIO_CRH_MODE8; // Висновок світлодіода LED4 PC8 на вихід. GPIOC-\u003e CRH & \u003d ~ GPIO_CRH_CNF8; // Двотактний вихід на PC8. GPIOC-\u003e CRH | \u003d GPIO_CRH_MODE9; // Висновок світлодіода LED3 PC9 на вихід. GPIOC-\u003e CRH & \u003d ~ GPIO_CRH_CNF9; // Двотактний вихід на PC9. GPIOA-\u003e CRL & \u003d ~ GPIO_CRL_MODE0; // Кнопка "USER" PA0 - на вхід. // Заблокувати налаштування висновків PC8, PC9. GPIOC-\u003e LCKR \u003d GPIO_LCKR_LCK8 | GPIO_LCKR_LCK9 | GPIO_LCKR_LCKK; GPIOC-\u003e LCKR \u003d GPIO_LCKR_LCK8 | GPIO_LCKR_LCK9; GPIOC-\u003e LCKR \u003d GPIO_LCKR_LCK8 | GPIO_LCKR_LCK9 | GPIO_LCKR_LCKK; tmp \u003d GPIOC-\u003e LCKR; tmp \u003d GPIOC-\u003e LCKR;)

Запис і читання GPIO

Для запису і читання портів призначені вхідний GPIOx_IDR і вихідний GPIOx_ODR регістри даних.

Запис у вихідний регістр ODR порту налаштованого на висновок здійснює установку вихідних рівнів всіх розрядів порту відповідно до записуваним значенням. Якщо висновок налаштований як вхід з підтягують резистори, стан відповідного біта регістра ODR активує підтяжку виведення до шини харчування (pull-up, ODR \u003d 1) або загальної шині мікроконтролера (pull-down, ODR \u003d 0).

читання регістра IDR повертає значення стану висновків мікроконтролера налаштованих як входи:

// Якщо кнопка натиснута (PA0 \u003d 1), встановити біти порту C, інакше скинути. if (GPIOA-\u003e IDR & GPIO_IDR_IDR0) GPIOC-\u003e ODR \u003d 0xFFFF; else GPIOC-\u003e ODR \u003d 0x0000;

Скидання і установка бітів порту

Для атомарного скидання і установки бітів GPIO в мікроконтролерах STM32 призначений регістр GPIOx_BSRR. Традиційний для архітектури ARM спосіб управління битами регістрів не вимагає застосування операції типу "Читання-модифікація-запис" дозволяє встановлювати і скидати біти порту простим записом одиниці в біти установки BS (BitSet) і скидання BR (BitReset) регістра BSRR. При цьому запис в регістр нульових бітів не впливає на стан відповідних висновків.

GPIOx_BSRR - регістр скидання і установки бітів порту:

GPIOC-\u003e BSRR \u003d GPIO_BSRR_BS8 | GPIO_BSRR_BR9; // Запалити LED4 (PC8), погасити LED3. GPIOC-\u003e BSRR \u003d GPIO_BSRR_BS9 | GPIO_BSRR_BR8; // Запалити LED3 (PC9), погасити LED4.

альтернативні функції GPIO і їх перепризначення (Remapping)
Практично всі зовнішні ланцюга спеціального призначення STM32 (Включаючи висновки для підключення кварцових резонаторів, JTAG / SWD і так далі) можуть бути дозволені на відповідних висновках мікроконтролера, або відключені від них для можливості їх використання в якості висновків загального призначення. Вибір альтернативної функції виведення здійснюється за допомогою регістрів з префіксом "AFIO”_.
Крім цього регістри AFIO_ Дозволяють вибирати кілька варіантів розташування спеціальних функцій на висновках мікроконтролера. Це зокрема відноситься до висновків комунікаційних інтерфейсів, таймерів (регістри AFIO_MAPR), Висновків зовнішніх переривань (регістри AFIO_EXTICR) і т.д.