Процесори STM32: Архітектура і Периферія

Архітектура мікропроцесорів STM32

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

Рисунок 1. Схема Cortex-M3.

 

На цьому рівні можна виділити три основних компоненти:

Обчислювальне ядро (CM3Core)

Виконує інструкції, робить обчислення у своєму АЛУ (арифметико-логічному пристрої). Його Гарвардська архітектура дозволяє одночасно завантажувати інструкції й здійснювати доступ до пам’яті — завдяки цьому, а також триступінчастому конвеєру, більшість інструкцій виконуються за 1 такт. Ядро Cortex-M3 підтримує набір інструкцій Thumb-2, який містить як 32-бітні, так і 16-бітні інструкції для скорочення обсягу коду за рахунок менш далекобійних переходів; має 13 регістрів загального призначення, знижуючи потребу в частому звертанні до пам’яті.

Контролер вкладених переривань (NVIC)

Ця частина відповідає за генерацію переривань на різні події: зовнішні — зміна логічного рівня на вході ніжки, пробудження з режиму сну; і внутрішні — завершення приймання/відправлення даних, переповнення лічильника таймера й т.п. Контролер підтримує до 240 переривань і до 256 рівнів пріоритету, причому вхід в оброблювач переривання займає 12 тактів і переривання можуть бути вкладеними: якщо під час обробки переривання виникає переривання с меншим пріоритетом, то друге буде оброблено через 6 тактів після обробки першого. Крім того, існують немасковані переривання — NMI (Non-Masked Interrupts), які неможливо скинути, не обробивши, і які переривають виконання програми незалежно від яких-небудь умов. Такі переривання генеруються при збої зовнішнього джерела тактування (кварцу, керамічного резонатора) і при виявленні некоректної інструкції.

Шинна матриця (Bus matrix)

Сучасні процесори містять безліч різних шин, до яких підключаються інші пристрої системи. На зорі комп’ютерної епохи шиною (bus) називали просто пачку провідників, що з’єднують кілька пристроїв із процесором, який міг одночасно працювати лише з одним пристроєм, а інші в цей час простоювали, тому що шина була на всіх одна. До того ж, усі пристрої були змушено працювати на одній швидкості (самого повільного пристрою), що втримувало ріст продуктивності систем. Сьогодні шини стали складніше їх число збільшилося на порядок. Роздільні шини дають можливість працювати з декількома пристроями одночасно, причому на різних швидкостях: у кожної шини може бути своя швидкість. Можна гнучко управляти енергоспоживанням, відключаючи невикористовувані пристрої й цілі шини. Для керування всією цією купою шин знадобилося вводити спеціальний контролер, керуючий обміном даними між шинами й процесором.

Шинна матриця — це розвиток ідеї простого контролера шини: тут шини з’єднані так, що пристрої можуть взаємодіяти прямо, не через ядро. Також вона управляє доступом до не вирівняних даних (адреси яких не кратні 4, як прийнято в 32-бітних архітектурах) і атомарним доступом до окремих бітів у спеціально виділеному діапазоні (технологія bit-banding)

Тепер розглянемо спрощену блок схему архітектури STM32, зображену на малюнку 3.

Рисунок 2.  Спрощена блок-схема шинної архітектури STM32

 

Шини ядра STM32:

Icode bus – 32-бітна шина інструкцій — забезпечує зв’язок ядра з інтерфейсом інструкцій Flash.

Dcode bus – шина даних — забезпечує зв’язок ядра з інтерфейсом даних в Flash.

System bus – системна шина ядра — забезпечує зв’язок ядра й периферії

Flash interface (FLITF) інтерфейс Flash-Пам’яті — забезпечує читання, запис, стирання, читання з буфером попередньої вибірки, захист пам’яті ( від запису або читання).

DMA (Direct Memory Access) — забезпечує прямий доступ до пам’яті в обхід ядра (потрібно лише задати що, звідки й куди передати, а DMA сам усе вибере й передасть кому треба через матрицю шин)

Reset & Clock Control (RCC) — забезпечує тактування ядра й периферії й скидання контролера.

Периферія підключена до шини APB (PPB), яка з’єднана з AHB System bus (Advanced High-performance Bus – шина, яка зв’язує матрицю шин і периферійні шини APB ) через два так званих «мости» (шини) APB1 і APB2, причому до кожного мосту підключений свій набір периферії. Фішка в тому, що в цих мостів різняться максимальні робочі частоти: APB2 може працювати на частоті ядра (максимум 72 МГц для STM32F10x), а APB — максимум на половині частоти ядра (тобто 36 МГц). Як бачимо, GPIO (виводи загального призначення) підключені до більш швидкої APB2, що дозволяє працювати їм на частоті 50 Мгц у МК із частотою 72 Мгц; також сюди підключені АЦП (до 1 мільйона вибірок у секунду), USART1 (до 4.5 Мбит/с), SPI1 ( до 18 Мбит/с). Менш швидка периферія підключена до APB1. Хоча є виключення — full-speed USB 2.0, наявний тільки в МК лінійки Performance line, підключений до APB1.

 

Периферійні модулі STM32

У мікроконтролерах STM32 доступні наступні інтерфейси передачі даних:

FSMC – Інтерфейс підключення зовнішньої SRAM, PSRAM, NOR, NANDROM, RAM, Nandflash, Compact Flash пам’яті, а також для підключення LCD дисплеїв з паралельною шиною.

Ethernet – Інтерфейс для підключення до комп’ютерної мережі.

SPI/(I2S) – Широко розповсюджений послідовний інтерфейс передачі даних, служить для підключення різних мікросхем, карт пам’яті, LCD дисплеїв з послідовною шиною й багато чого іншого.

I2C – Двохпровідна шина передачі даних, служить для підключення різних мікросхем і інших модулів.

USART (UART) – Стандартний універсальний синхронний (асинхронний) приймально-передавальний інтерфейс, служить для обміну даними з іншими пристроями через RS-232, RS-485 шини й т.п.

USB – Сучасний комп’ютерний інтерфейс передачі даних, призначений для підключення до мікроконтролера USB клавіатур, flash накопичувачів, а також для підключення мікроконтролера до ПК, може працювати як у режимі пристрою (Device), так і в режимі хоста (Host).

CAN – Промисловий інтерфейс передачі даних, також використовується в автомобілебудуванні й т.п.

Camera interface – Спеціалізований інтерфейс, призначений для підключення високошвидкісної цифрової камери, з 8-, 10-, 12- або 14-бітною паралельною шиною даних.

SDIO – Інтерфейс для високошвидкісного підключення SD карт пам’яті.

Крім периферійних модулів, відповідальних за обмін даними із зовнішніми пристроями, існують також і інші різні периферійні модулі, значення яких не менш важливе, ніж інтерфейсних модулів:

Таймер – Дуже важливий модуль, що дозволяє точно відміряти інтервали часу, генерувати вихідний ШИМ сигнал, підключати энкодер, підраховувати період вхідного сигналу й ін.

АЦП – Аналогово-цифровий перетворювач (має вбудований датчик температури) призначений для виміру значень аналогових напруг, також може працювати як віконний компаратор.

ЦАП – Цифро-аналоговий перетворювач видає на виході аналоговий сигнал відповідний заданому цифровому значенню.

RTC – Годинник реального часу.

JTAG – Модуль внутрішньо-схемного налагодження програми.

Cписок використаної літератури з ARM Cortex STM32

 

  1. Веб-сайт компанії “STMicroelectronics” [Електронний ресурс].
  2. Веб-сайт компанії “ARM Ltd.” [Електронний ресурс].
  3. ARM – это просто. [Електронний ресурс]. /Сторожев Д.
  4. Введение в архитектуру Cortex-M3. Часть 1. [Електронний ресурс].
  5. Что такое ARM. [Електронний ресурс].
  6. STM32: Урок 5 – Архитектура. [Електронний ресурс].
  7. Знакомство с ARM Cortex-M3 и с STM32, в частности. [Електронний ресурс].
  8. Stm32: Эпоха 32-битных микроконтроллеров наступила. [Електронний ресурс].

    Автор: Ікальчик Ю.М, ДК-11, ФЕЛ, КЕОА, НТУУ «КПІ»