Stm32f103 сколько нанометров
Перейти к содержимому

Stm32f103 сколько нанометров

1. Общее описание архитектуры Cortex – M

Сегодня 2016 год, а серия STM32 появилась где-то в 2010 году. За это время многое было рассказано и показано. Но мы предложим своё видение и описание этого семейства.

Микроконтроллеры STM32 семейство 32-разрядных микроконтроллеров Flash на базе процессора ARM® Cortex®-M разработан, чтобы предложить новые степени свободы для пользователей MCU( см. рис. 1). 32-битный ассортимент, который сочетает очень высокую производительность, возможности в режиме реального времени, цифровой обработки сигнала, и низкое энергопотребление, низкий питание напряжения, сохраняя полную интеграцию и простоту разработки.

Большой ассортимент устройств STM32 , на основе отраслевого стандарта ядра и в сопровождении огромного выбора инструментов и программного обеспечения, делает это семейство продуктов идеальным выбором, как для небольших проектов и для целых решений платформы.

http://www.st.com/st-web-ui/static/active/en/fragment/product_related/subclass_information/subclass_level_diagram/stm32_sc1169.jpg

Рис. 1. Линейка STM 32

Для того чтобы более подробно ознакомиться с ядром на базе которого сделаны STM 32, можно скачать спецификацию на ядро Cortex – M 4 (в дальнейшем мы будем рассматривать именно это семейство):

2. Описание семейства STM32F4

В конце 2011 года компания STMicroelectronics начала серийный выпуск микроконтроллеров STM32F4xx на ядре ARM Cortex‑M4. Эта линейка продолжает развитие семейства STM32, дополняя его новым ядром ARM Cortex-M4. На данный момент общая номенклатура семейства составляет более 250 позиций на ядрах Cortex-M0/M3/M4 с широчайшим набором периферии и производительности, предоставляя разработчику богатый выбор решений для своих задач. Процессорное ядро ARM Cortex-M4 (рис. 2) является последней разработкой в семействе Cortex-M и ориентировано на цифровую обработку сигналов, занимая нишевую часть DSP-приложений, прежде принадлежавшую сигнальным процессорам. Ядро Cortex-M4 поддерживает такие операции, как умножение с накоплением за один такт, арифметика с насыщением, блок вычислений с плавающей запятой FPU (floating point unit), команды управления потоком данных SIMD (single instruction multiple data). Блок FPU совместим со стандартом IEEE 754 и позволяет процессору выполнять широкий спектр математических операций над вещественными числами. Благодаря тому, что DSP-инструкции в ядре Cortex-M4 выполняются за один такт и есть поддержка FPU, для контроллеров STM32 стали доступны новые сегменты рынка. Больше нет необходимости использовать дополнительный DSP-контроллер для обработки сигналов, можно воспользоваться одним STM32F4xx, объединяющим обычный контроллер со всем многообразием периферии и функциями DSP на одном чипе.

Рис. 2. Ядро ARM Cortex-M4

STM32F4xx можно применять в любых областях, где необходима цифровая обработка сигнала: интеллектуальное управление двигателями, обработка звука и изображений, радиолокация, навигация, релейная защита и т. д. Микроконтроллер без труда справится с цифровой фильтрацией, сверткой или преобразованием Фурье.

2.1. Описание линейки STM32F4

Новая линейка микроконтроллеров STM32F4хх производится по 90 ‑ нм технологии с использованием уже доказавшего свою эффективность ускорителя памяти (ART Accelerator), позволяющего работать с памятью без задержек на максимальной скорости. Производительность на тактовой частоте 168 МГц составляет 210 DMIPS, что означает: на данный момент STM32F4xx — лидер на рынке среди ядер Cortex-M4. Однако мало иметь высокопроизводительное ядро, нужно также обеспечивать хорошую пропускную способность между ядром и периферией. И тут у STM32F4xx все в порядке: применяется 7 ‑ уровневая матрица шин.

Рис. 2.1.1. Функциональная схема STM32F4хх

Основные характеристики семейства:

· Ядро ARM 32 ‑ битное Cortex-M4.

· Частота тактирования: 168 МГц, 210 DMIPS/1,25 DMIPS/МГц (Dhrystone 2.1).

· Новая высокопроизводительная AHB-матрица шин.

· До 1 Mбайт флэш-памяти.

· До 192 + 4 кбайт SRAM-памяти.

· Напряжение питания: 1,8–3,6 В (POR, PDR,PVD и BOR).

· Внутренние RC-генераторы на 16 МГц

· и 32 кГц (для RTC).

· Внешний источник тактирования 4–26 МГц

· и для RTC — 32,768 кГц.

· Модули отладки SWD/JTAG, модуль ETM.

· Три 12 ‑ битных АЦП на 24 входных канала(скорость до 7,2 Мсемплов, температурный датчик).

· Два 12 ‑ битных ЦАП.

· DMA-контроллер на 16 потоков с поддержкой пакетной передачи.

· 17 таймеров (16 и 32 разряда).

· Два сторожевых таймера (WDG и IWDG).

· Коммуникационные интерфейсы : I2C,USART (ISO 7816, LIN, IrDA), SPI, I2S.

· CAN (2,0 B Active).

· USB 2.0 FS/HS OTG.

· 10/100 Ethernet MAC (IEEE 1588v2,MII/RMII).

· Контроллер SDIO ( карты SD, SDIO, MMC,CE-ATA).

· Интерфейс цифровой камеры

· (8/10/12/14 ‑ битные режимы).

· FSMC- контроллер (Compact Flash, SRAM,PSRAM, NOR, NAND и LCD 8080/6800).

· Аппаратный генератор случайных чисел.

· Аппаратное вычисление CRC, 96 ‑ битный

· Модуль шифрования AES 128, 192, 256,Triple DES, HASH (MD5, SHA-1), HMAC.

· Расширенный температурный диапазон:

2.2. Ускоритель памяти (ART-акселератор)

Ускоритель памяти (ART-акселератор) Для обеспечения высокой скорости работы нового ядра с флэш-памятью компания ST применила уже хорошо зарекомендовавший себя в серии STM32F2хх ART-акселератор памяти. Использование акселератора флэш памяти вместо увеличения быстродействия самой памяти позволило снизить динамическое потребление и уменьшить общую стоимость готового продукта. Чтобы обеспечить высокую производительность процессора Cortex-M4, ART-акселератор использует кэш очереди предварительных выборок команд и переходов, позволяя выполнять записанные в 128 ‑ битной флэш памяти программы с нулевым временем ожидания на частотах до 168 МГц (рис. 2.2.1).

Рис. 2.2.1. Ускоритель памяти

2.3. Матрица шин

Новая 32 ‑ битная многоуровневая AHB матрица шин (рис. 2.3.1.) обеспечивает взаимодействие ведущих и ведомых устройств в микроконтроллере, занимается арбитражем при одновременной работе нескольких ведущих. Через матрицу шин ядро Cortex-M4 получает доступ к данным и инструкциям, находящимся во встроенной SRAM- и флэшпамяти, может обратиться через FSMC к внешней памяти или работать с данными от периферии. DMA осуществляет перемещение данных между периферией и памятью или между различными видами памяти. В STM32F4 появился отдельный блок оперативной памяти 64 кбайт, который подключен непосредственно к шине данных ядра. Это сделано специально для работы без задержек с данными ЦОС — при хранении

Рис. 2.3.1. Многоуровневая матрица шин

2.4. I2C-интерфейс

Микроконтроллер содержит три модуля I2C. Каждый модуль может работать в режиме «ведущий» (Master) или «ведомый» (Slave). Поддерживается режим multimaster. Доступны стандартные (Standard) скорости передачи данных до 100 кГц и быстрая передача данных на частотах до 400 кГц. Возможна 7 ‑ и 10 ‑ битная адресация. Присутствует аппаратный блок проверки пакетных ошибок PEC (Packet Error Checking). I2C- модули поддерживают два расширенных протокола : SMBus 2.0 (System management bus) и PMBus ( Р ower management bus). SPI-интерфейс Микроконтроллер содержит три модуля SPI. Каждый модуль может работать в режиме Мaster (c поддержкой режима мultimaster) или Slave и поддерживать полнодуплексную, полудуплексную и симплексную передачу данных. Модуль SPI1 поддерживает скорость до 37,5 Mбит/с. Остальные модули — до 21 Мбит/с. Данные передаются 8/16 ‑ битными словами старшим или младшим битом вперед. Полярность и фазу тактового сигнала можно программно изменить. Встроена аппаратная поддержка вычисления циклически избыточного кода CRC для обеспечения надежной связи: значения CRC могут быть переданы в качестве последнего байта в режиме Tx, автоматически проводится проверка ошибок CRC для последнего полученного байта.

2.5. I2S-интерфейс

STM32F4хх имеет на борту два модуля I2S. Оба модуля мультиплексированы с SPIинтерфейсом. Этот интерфейс предназначен для работы с цифровыми звуковыми данными. В схеме тактирования теперь имеется выделенный модуль PLL (PLLI2S), который позволяет генерировать частоты сэмплирования аудиосигнала с частотами от 8 до 192 кГц, с точностью порядка 0,01%. Модули работают в режиме Мaster или Slave и поддерживают полнодуплексную и симплексную передачу данных. Данные предаются по 16, 24 или 32 бита. Осуществляется поддержка протоколов: стандарт I2S Phillips, стандарт PCM, MSB и LSB-выравнивание данных.

2.6. USART-интерфейс

STM32F4xxx содержит четыре модуля USART (синхронные) и два модуля UART (асинхронные). Модули USART1 и USART6 могут работать на скорости до 10,5 Mбит/с. Остальные — до 5,25 Mбит/с.

Данные предаются 8/9 ‑ битными словами с одно- или двухстоповыми битами и контролем четности. Поддерживается NRZ (Non Return to Zero) стандарт передачи данных. Модули USART могут быть использованы для подключения к шине LIN, часто используемой в автомобильных приложениях, работать как кодер/декодер инфракрасного сигнала IrDA. Для работы с модемами имеются дополнительные линии управления RTS и СTS. Возможно подключение смарт-карт в соответствии со стандартом ISO 7618-3. В дополнение ко всем описанным функция USART может работать в режиме SPI. В этом режиме модуль USART работает как ведущее SPI-устройство.

2.7. CAN-интерфейс

STM32F4 содержит два контроллера CAN. Контроллеры CAN поддерживают стандарты 2 А и 2 В, активную и пассивную передачу данных на скорости до 1 Мбит/с. Работают со стандартными (11 ‑ битными) и расширенными (29 ‑ битными) кадрами. Каждый CANконтроллер имеет три буфера сообщений на передачу, FIFO с тремя каскадами и 28 распределенных масштабируемых банков фильтров.

2.8. SDIO-интерфейс

SDIO позволяет микроконтроллеру обмениваться информацией с SD/SDIO/MMCкартами памяти и CE-ATA совместимыми устройствами. STM32F4хх поддерживает следующие спецификации: MultiMediaCard System версии 4.2 и более ранних версий (поддержка трех режимов: 1/4/8 бит), SD Memory Card версии 2.0, SD I/O Card версии 2.0 (поддержка двух режимов: 1/4 бит), CE-ATA цифровой протокол версии 1.1. Скорость передачи данных — до 48 МГц в 8 ‑ битном режиме.

2.9. USB-интерфейс

Микроконтроллер содержит два USBмодуля. Первый — USB OTG full – speed . Поддерживает режимы Device, Host и OTG. Физический уровень выполнен на кристалле. USB OTG FS совместим со спецификациями USB 2.0 и OTG 1.0. Поддерживает протоколы SRP (Session request protocol) и HNP (Host negotiation protocol). Второй — USB OTG high-speed. Поддерживает режимы Device, Host и OTG на скорости до 480 Мбит/с. Физический уровень для скорости 12 Mбит/с (низкая скорость) выполнен на кристалле. Для реализации скорости в 480 Мбит/с (высокая скорость) необходим внешний высокоскоростной трансивер, подключаемый через интерфейс ULPI.

2.10. Ethernet-интерфейс

Модуль Ethernet представлен не во всех микроконтроллерах линейки STM32F4, а только в сериях STM32F407xx и STM32F417xx. Ethernet-модуль соответствует стандарту IEEE802.3 и обеспечивает передачу данных на скоростях 10 и 100 Мбит/с. Для синхронизации часов на аппаратном уровне выполнена поддержка протокола IEEE1588 v2. Для подключения к физической линии (медь, оптика) необходимо использовать внешний трансивер физического уровня (PHY). PHY подключается через порт MII (17 сигналов) или RMII (9 сигналов).

2.11. Цифровой интерфейс камеры (DCMI)

Представлен только в сериях STM32F407xx и STM32F417xx. DCMI позволяет соединить микроконтроллер с камерами и CMOS-сенсорами через параллельный 8/10/12/14 ‑ битный интерфейс. Доступны внутренняя и внешняя синхронизация кадров и строк, работа в непрерывном или покадровом режиме и функция обрезки изображения. Поддерживаются форматы: 8/10/12/14 ‑ битное прогрессивное видео, YCbCr 4:2:2 и RGB 565, сжатые данные JPEG.

2.12. Контроллер статической памяти (FSMC)

Модуль FSMC представлен только в микроконтроллерах с корпусами, содержащими 100, 144 или 176 выводов. FSMC дает возможность подключения к микроконтроллеру графических LCD-дисплеев и внешней статической памяти. FSMC способен поддерживать связь с внешней синхронной/асинхронной памятью и 16 ‑ битными PC-Card устройствами. Основное назначение FSMC — это перевод данных внутри микроконтроллера в доступный для соответствующих внешних устройств вид и обеспечение временных параметров связи этого протокола. Все внешние устройства получают свои адреса в адресном пространстве, сигналы данных и управления. Доступ к каждому внешнему устройству осуществляется посредством индивидуального сигнала выбора микросхемы. Одновременное обращение к двум различным микросхемам внешней памяти невозможно. Поддерживаются следующие типы памяти: PC Card/Compact Flash, SRAM, PSRAM, NOR Flash и NAND Flash. Параллельный LCD-интерфейс поддерживает два режима работы с LCD-контроллерами — Intel 8080 и Motorola 6800, но является довольно гибким для адаптации к другим LCD-интерфейсам.

2.13. Аналоговая периферия (АЦП И ЦАП)

Микроконтроллер содержит три аналогово ‑ цифровых преобразователя (АЦП) и два одноканальных цифро-аналоговых преобразователя (ЦАП). АЦП обладает разрешающей способностью 12 бит и очень высокой скоростью преобразования в 2,4 МГц в одиночном режиме и 7,2 МГц — в тройном режиме. Максимальное количество входных аналоговых каналов — 24. Есть встроенный источник опорного напряжения. Гибкая система настроек встроенного аналогового мультиплексора позволяет задавать любые последовательности преобразования аналоговых каналов (за исключением одновременного преобразования одного канала на нескольких АЦП). Настройки АЦП позволяют производить однократные и циклические измерения. Скорость работы АЦП зависит от напряжения питания микроконтроллера. Для проведения преобразований на максимальной скорости до 7,2 МГц необходимо соблюдать условие: напряжение питания микроконтроллера должно составлять 2,4–3,6 В. При снижении напряжения до 1,8 В скорость преобразования уменьшается до 1,2 МГц. Для контроля внутренней температуры микроконтроллера встроен температурный датчик. На его выходе формируется напряжение в зависимости от окружающей его температуры. Выход датчика через мультиплексор подключается к АЦП. Используя температурный датчик, можно измерять температуру от –40 до +125 °C с точностью ±1,5 °C. ЦАП обладает разрешающей способностью 12 бит, преобразование возможно в 8/12 ‑ битовом формате с выравниванием этого результата по левому или правому краям. Так как ЦАП содержит два канала, есть возможность формирования стереосигнала. Доступна функция автоматической генерации шумового сигнала с меняющейся амплитудой или треугольного сигнала.

2.14. Таймеры

Микроконтроллеры новой линейки могут содержать до 17 таймеров: два 16 ‑ битных таймера с расширенными функциями, два 32 ‑ битных таймера общего назначения, восемь 16 ‑ битных таймеров общего назначения, два 16 ‑ битных базовых таймера, два сторожевых таймера (независимый и оконного типа) и 24 ‑ битный системный таймер. Часть таймеров можно конфигурировать на работу в мультирежимном формате, что позволяет строить системы из таймеров. Например, повысить разрядность счетчика до 48, сконфигурировав последовательно три таймера, или синхронно запускать сразу несколько таймеров. Таймеры с расширенными функциями имеют очень большую функциональность. Это комплементарные выводы для поддержки трехфазных двигателей, поддержка режимов счета в прямом и обратных направлениях, генерация ШИМ, каналы захвата/сравнения сигнала, режим одиночного импульса, поддержка DMA, дополнительные функции безопасности в случае сбоев, поддержка интерфейса энкодера и датчика Холла. Таймеры общего назначения аналогичны таймерам с расширенными функциями, за исключением функций, связанных с управлением двигателями. Отличия между таймерами общего назначения заключаются в различном количестве каналов захвата/сравнения, в поддержке направления счета и поддержке DMA или ее отсутствии. Базовые таймеры имеют наименьший функционал: отсутствуют каналы захвата/сравнения, поддержка функций управления двигателями. Они, как правило, предназначены для использования в качестве обычных счетчиков. Область резервного питания, часы реального времени В микроконтроллерах STM32F4x реализована область резервного питания, позволяющая работать микроконтроллеру при пропадании основного питания и поддержки частичной функциональности микроконтроллера. Область резервного питания состоит из трех составляющих: • часы реального времени (RTC); • 4 кбайт памяти резервной SRAM; • 20 байт резервных регистров (80 байт). Часы реального времени выполнены в виде 32 ‑ разрядного счетчика с полной аппаратной поддержкой 0,5 секунды, секунд, минут, часов (в 12 ‑ или 24 ‑ часовом формате), а также день (день недели), дата (день месяца), месяц и год, представленные в двоично-десятичном формате (BCD). Работа с 28-, 29 ‑ дневными (високосный год) и 30-, 31 ‑ дневными месяцами происходит в автоматическом режиме. Поддерживается переход на летнее/зимнее время. Функция цифровой калибровки позволяет компенсировать неточность кварцевого резонатора. Часы реального времени реализуют дополнительные функции — два конфигурируемых будильника, защиту от несанкционированного доступа с сохранением времени взлома и очисткой резервных регистров. Часы могут оставаться активными во всех режимах работы микроконтроллера и выводить его из различных режимов сна. 4 кбайт резервной памяти доступны только для CPU. Эта память сохраняет свой контекст в низкопотребляющих режимах и при пропадании основного питания микроконтроллера. Но только при условии, что подключено батарейное питание на специально предусмотренный вывод микросхемы Vbat, который при доступности основного питания не потребляет дополнительной энергии. В линейке STM32F4x потребление часов реального времени и 4 ‑ кбайт резервной памяти значительно снижено: и RTC, и SRAM потребляют менее 1 мкА, а вместе — менее 2 мкА.

2.15. Модуль шифрования и хеширования

Модуль шифрования (сryptographic accelerator) представлен только в сериях STM32F415 и STM32F417. Он позволяет аппаратно реавания с очень высокой скоростью «на лету», что необходимо для обеспечения конфиденциальности информации в широком круге задач. Реализованы следующие алгоритмы шифрования: • DES (Data Encryption Standard) — симметричный шифр; • Triple DES (TDES, 64/128/192 ‑ битные ключи) — симметричный блочный шифр; • AES (Advanced Encryption Standard, 128/192/256 ‑ битные ключи) — симметричный блочный шифр. Поддержка хеширования: • SHA-1 (Secure Hash Algorithm-1) — алгоритм криптографического хеширования; • MD5 (Message Digest 5) — 128 ‑ битный алгоритм хеширования; • HMAC (Hash-based message authentication code) — хеш-код идентификации сообщений. В таблице представлен сравнительный анализ оценки пропускной способности STM32F4xx в Мбайт/c для работы с данными на основе вышеприведенных алгоритмов. По таблице видно, что с помощью STM32F4x можно проектировать приложения с криптографической обработкой данных «на лету», практически не используя ресурсы ядра микроконтроллера.

2.16. Порты ввода/вывода общего назначения

Микроконтроллеры оснащены большим количеством портов ввода/вывода общего назначения GPIO (General-Purpose Input Output). На данный момент доступны корпуса LQFP и BGA, максимальное количество выводов микроконтроллера составляет 176. Приведем краткие характеристики портов ввода/вывода: • Регистры управления 16 бит. • Толерантность к 5 В. • Состояния — подтяжка к питанию/«земле», третье состояние, альтернативные функции, аналоговое состояние. • Конфигурация скорости — 2, 25, 50 и 100 МГц. • Механизм защиты конфигурации от изменения. • Генерация прерывания почти любым выводом. Основное же отличие от STM32F1x заключается в более гибком подходе при конфигурировании альтернативных функций (USART, АЦП и т. д.) на одну ножку. Работа портов ввода/вывода стала намного быстрее.

2.17. Отладка

Для подключения микроконтроллера к отладочным средствам используется стандартной JTAG-интерфейс или двухпроводный SWD (Serial Wire Debug). Выходы SWDинтерфейса мультиплексированы с выходами JTAG. Разработчику предоставляется возможность в выборе интерфейса отладки/программирования. Интегрированная макроячейка трассировки (Embedded Trace Macrocell) значительно расширяет функции отладки, позволяя наблюдать за потоком инструкций и данных внутри ядра CPU в реальном времени. Данные выводятся через небольшое количество ETM-выводов на внешний TDAанализатор. По сообщениям специалистов компании MathWorks, хорошо известной по инструментарию Matlab, в 2012 году должен появиться специальный пакет в Matlab для генерирования и создания кода алгоритмов цифровой обработки сигналов для ядра Cortex-M4. Это заметно облегчит применение ЦОС в микроконтроллерах на ядре Cortex-M4. При выпуске на рынок новой линейки микроконтроллеров на ядре CortexM4 STMicroelectronics следует своим традициям и предлагает разработчикам недорогую отладочную плату STM32F4DISCOVERY из серии плат Discovery. За невысокую цену, менее 900 рублей, разработчик получает полноценную отладочную плату с программатором-отладчиком и может начинать осваивать STM32 без дополнительных затрат. На этот раз в этой отладочной плате, помимо встроенного программатораотладчика, присутствуют МЭМС-датчики (акселерометр и микрофон), а также USB и аудиокодек с разъемом для подключения наушников или колонок. Новые компоненты на отладочной плате вкупе с ядром Cortex-M4 и периферией STM32F4x открывают разработчику новые возможности.

3. Заключение

Новая линейка микроконтроллеров STM32F4 на базе ядра Cortex-M4 вобрала в себя все лучшее от своих предшественников на ядре Cortex-M3 — серий STM32F1 и STM32F2. Основное преимущество новой серии — значительно возросшая производительность: скорость работы ядра выросла до 168 МГц. Усовершенствованный ускоритель памяти позволяет работать с флэш-памятью на этой частоте без задержек. Осуществляется и поддержка DSPинструкций и операций с плавающей точкой. Рост производительности ядра также сказался на увеличении скорости работы периферии. Все новые микроконтроллеры на базе ядра Cortex-M4 программно совместимы с существующими сериями STM32F1xx и STM32F2xx. Совместимость по ножкам между STM32F2x и STM32F4x полная, то есть разработчику доступна полная гибкость при переходе между ядрами CortexM3 и Cortex-M4. К сожалению, полной совместимости по выводам между STM32F1x и STM32F2x/STM32F4x нет, может не совпадать от двух до трех ножек (это ножки питания и «земли»), но вся периферия сохранила свое положение. Рекомендации по созданию универсальной платы для использования STM32F1x и STM32F2x/STM32F4x приведены в документации. Невысокая цена, низкое потребление и новые возможности STM32F4xx по цифровой обработке сигналов, несомненно, сделают эти новые микроконтроллеры лидером в своем сегменте рынка. Недавно компания STMicroelectronics сообщила о выходе на рынок новой линейки 32 ‑ разрядных микроконтроллеров STM32F0xx на ядре Cortex-M0. Эта линейка позиционируется для рынка недорогих 8/16 ‑ битных решений. Фактически семейство STM32 теперь перекрывает весь рынок 8/16/32 ‑ битных микроконтроллеров, позволяя разработчику просто выбрать платформу Cortex-M для всего круга задач. При этом по максимуму соблюдается программная совместимость и совместимость по ножкам, что позволяет с наименьшими затратами переходить от одного микроконтроллера к другому в случае нехватки или переизбытка ресурсов. В массовое же производство новая линейка STM32F0xx выйдет в III квартале 2012 года.

STM32F103CBT6, Микроконтроллер 32-Бит, Cortex-M3, 72МГц, 128КБ Flash, USB, CAN, [LQFP-48]

Фото 1/9 STM32F103CBT6, Микроконтроллер 32-Бит, Cortex-M3, 72МГц, 128КБ Flash, USB, CAN, [LQFP-48]

Микроконтроллеры семейства STM32F10x: серия STM32F103 с тактовой частотой 72МГц, обеспечивает лучшую в классе 32-битных MK-производительность. Серия STM32F101 с тактовой частотой 36МГц является бюджетным вариантом STM32F103 и предлагает пользователям 16-битных контроллеров значительный прирост в производительности при том же уровне цен.

Обе линейки имеют встроенную FLASH-память от 32К до 128К и отличаются между собой максимальным объёмом SRAM-памяти и набором периферии. При работе на 72Мгц и выполнении программ из FLASH-памяти, STM32F10X потребляет всего 36мА. STM32 идеально подходит для приложений с батарейным питанием, т.к. работает при напряжении питания от 2 до 3,6В и потребляет до 2мкА в режиме ожидания с работающей схемой сброса.

Отличительные особенности:
• ядро: ARM Cortex M3;
• тактовая частота: до 72МГц;
• FLASH-память: 32. 128кб;
• SRAM-память: до 20кб;
• интерфейсы: SPI, I2C, USART, USB 2.0, CAN;
• АЦП: до двух 12 бит/16 каналов;
• напряжение питания: 2…3,6В;
• ток потребления: до 2мкА в режиме ожидания;
• четыре режима работы с малым потреблением;
• температурный диапазон: -40°C. 125°С;
• типы корпусов: VFQFPN36, LQFP48, LQFP64, LQFP100.

Области применения: автомобильная электроника, промышленная автоматика, оборудование для беспроводной связи.

Урок 1. Введение. Общие сведения, скорее впечатления, об STM32.

Уроки STM32

Вводная статья курса уроков по программированию микроконтроллеров STM32.

Этой статьей начинаю цикл уроков, посвященных программированию микроконтроллеров STM32.

Тема очень интересная, по популярности может превзойти ”Уроки Ардуино”. В принципе, это в какой-то степени продолжение или расширение ”Уроков Ардуино”. По крайней мере, я собираюсь постоянно ссылаться на статьи из этой рубрики, проводить аналогию между ними и уроками STM32.

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

Язык программирования в принципе один и тот же. Тем более одинаковы аппаратные компоненты, подключаемые к контроллеру: кнопки, светодиоды, дисплеи, модули проводных и беспроводных технологий связи и т.п.

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

Контроллеры STM32 значительно превосходят по техническим характеристикам платы Ардуино на 8 разрядных микроконтроллерах ATmega328, ATmega2560 и т.п. У них более высокая производительность, больше объем памяти, периферийные устройства разнообразнее по функциям, номенклатуре, количеству. STM32 позволяют реализовывать значительно более сложные задачи, чем платы Ардуино.

Несмотря на вышесказанное я считаю, что программировать STM32 не сложнее, чем Ардуино. По крайней мере, я собираюсь так преподнести материал. Хотя объем информации будет больше.

Уроки рассчитаны как на опытных программистов, изучающих STM32, так и на людей, делающих первые шаги в программировании. Т.е. я собираюсь приводить строгую информацию и сопровождать ее подробными пояснениями. Для второй категории читателей я буду давать ссылки на аналогичные темы в ”Уроках Ардуино”. Не хочется одно и то же ”разжевывать” несколько раз.

Буду преподносить оптимальный с моей точки зрения подход к программированию STM32. Кто-то может с ним не согласиться.

Итак. Я ставлю цель:

  • научить вас практическому программированию микроконтроллеров STM32;
  • расширить ваши знания в области программирования на языке C++, конечно у кого их не хватает;
  • представить строгую техническую информацию о контроллерах STM32 на русском языке;
  • какая-то часть уроков будет посвящена аппаратной части, подключаемой к микроконтроллеру.

Общие сведения о микроконтроллерах семейства STM32.

Возможности контроллеров STM32 потрясают! По крайней мере, меня.

Плата с микроконтроллером STM32F103C8T6 по стоимости сопоставима с ценой плат Ардуино на базе ATmega328 и значительно дешевле плат типа Arduino Mega2560.

По моей партнерской ссылке она стоит всего 175 руб.

Отладочная плата STM32F103C8T6

Но по техническим характеристикам! Что стоит только сравнение разрядности обрабатываемых данных. 32 против 8!

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

Параметры STM32F103C8T6 Arduino Nano
Разрядность 32 бит 8 бит
Частота 72 мГц 16 мГц
Объем FLASH 64 кБайт 32 кБайт
Объем ОЗУ 20 кБайт 2 кБайт
Число выводов 37 22
Аппаратное умножение и деление Есть, 32 разряда Только умножение, 8 разрядов
АЦП 2 АЦП, 12 разрядов, 10 входов, 1 мкс время преобразования 10 разрядов, 8 входов, 100 мкс время преобразования
Контроллеры прямого доступа к памяти 7 каналов нет
Таймеры 7 3
UART 3 (выше скорость, больше режимов) 1
I2C 2 1
SPI 2 1
USB 1 нет
CAN 1 нет
Часы реального времени есть нет
Модуль аппаратного расчета CRC кода есть нет

К этому можно бесконечно добавлять с приставкой ”гораздо более мощные, совершенные, функциональные”: система прерываний, порты ввода-вывода, коммуникационные интерфейсы и т.п.

И это еще далеко не самый мощный вариант STM32. У меня есть плата STM32F407VET6 с частотой 210 мГц и АЦП со скоростью преобразования до 7,2 миллионов выборок в секунду. Собираюсь на ней сделать динамическую подсветку телевизора, т.е. обрабатывать видеосигнал.

Плата STM32F407VET6

Техническая документация.

Я не буду пересказывать общую информацию о микроконтроллерах STM32. Советую вам просмотреть книжку “Мартин М. Инсайдерское руководство по STM32”, чтобы иметь общее представление о STM32. Я не стал давать ссылку. Не знаю, как обстоят дела с авторским правом на этот документ. Но найдете без труда. Подробно компоненты и узлы STM32 будем изучать в уроках.

Из строгой официальной документации надо иметь:

    . Периферия, электрические характеристики. . Описание регистров, работы периферии.

Все документы на английском языке, с официального сайта STMicroelectronics, но все что будем использовать, я распишу на русском.

В следующем уроке рассмотрим нашу базовую плату STM32, добавим к ней узлы для загрузки программ из компьютера во FLASH-память микроконтроллера.

32 бита для самых маленьких

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

32 бита для самых маленьких

История о непростой дружбе Marlin 2.0 и микроконтроллера STM32F103C8T6.

Часть первая — аппаратная.

Началось все с того, что захотелось построить симпатичный плоттер с Thingiverse, а заказанная для него электроника бесследно сгинула после пересечения границы.

Ждать еще месяц не хотелось, равно как и покупать электронику по локализованным ценам, поэтому был приобретен пустой CNC shield v3, а роль UNO взяла на себя синяя таблетка — минималистичная отладочная плата с микроконтроллером STM32F103C8T6.

В процессе проектирования платы переходника аппетиты росли — ног у отладочной платы больше, чем нужно для CNC shield’а. На свободные ноги были назначены дисплей 2004, энкодер, два аналоговых входа для термисторов и четыре полевых транзистора. Потом захотелось добавить SD карту, для возможности автономной печати, но выводов микроконтроллера для такой роскоши уже не хватало. Для решения этой проблемы дисплей пришлось перевести с параллельной шины на I2C, а после заменить на I2C вариант OLED 128×64.

  • 4 шаговых двигателя с общей сигнальной линией enable
  • 3 концевых выключателя
  • 2 аналоговых входа для термисторов
  • 4 аппаратных ШИМ канала для управления 4 полевыми транзисторами или 3 транзисторами и сервоприводом
  • I2C шина для подключения OLED дисплея 12864
  • энкодер
  • SPI шина для SD карты
  • USB порт для подключения к компьютеру

Изначально планировалась выделенная линия enable для двигателя экструдера, но оказалось, что на CNC shield все линии enable сведены вместе.

После разводки получилась вот такая плата.

32 бита для самых маленьких

32 бита для самых маленьких

Часть вторая — программная.

Первопроходцем в портировании Marlin на STM32 является Victor Perez.

Топик на reprap.org Топик на github.comДля сборки Marlin 2.0.x с HAL STM32F1 я использовал PlatformIO.

В platformio.ini было несколько вариантов для STM32 — F103RE, F407VG и некая плата Malyan M200 построенная на F103CB. Добавил новое окружение, свою MOTHERBOARD, написал к ней распиновку и запустил компиляцию.

Результат получился неожиданный — компиляция прошла на ура, а вот линковка не задалась. В минимальной конфигурации Marlin занимает больше 90КБ, а флеш памяти у F103C8 только 64КБ.

По счастью даже в даташите не всегда отражено истинное положение вещей и у имеющихся у меня F103C8 не флеш 64КБ, а очень даже 128KБ. То есть по факту у меня на руках микроконтроллер F103CB, который промаркирован и определяется как F103C8.

После замены в platformio.ini ‘board = genericSTM32F103C8’ на ‘board = genericSTM32F103CB’ линковка и прошивка прошли успешно.

Подключенная по USB плата определилась как LibMaple COM порт и Repetier Host успешно к ней подключился.

Осталась ерунда — сконфигурировать периферию и пересобрать. Какими граблями был засеян этот путь я тогда даже не догадывался.

Сразу заработали: UBS порт, шаговые двигатели, концевики, термисторы, нагреватели и энкодер. Вентиляторы включались и выключались, но, как выяснилось позже, не имели плавной регулировки оборотов.

Первая проблема была почти тривиальна — SD карта прекрасно читалась из тестовой программы, но не из Marlin.

Логический анализатор показывает, что несмотря на схожесть процедур инициализации, в SPI шину уходят совершенно разные импульсы.

Причина крылась в некорректной инициализации аппаратного SPI и линии SS (slave select) для SD карты.

Следующим был неработающий через I2C переходник дисплей LCD 2004. Логический анализатор показывал что в I2C шины данные уходят, но отклика в кремниевом сердце переходника на вызывают.

Причиной такой черствости стала банальная экономия — вместо микросхемы PCA8574 в переходнике использовалась более дешевая ее версия PCF8574, работавшая только с частотой шины 100КГц . Библиотека LiquidTWI2 такую экономию не приветствовала и инициализировала I2C шину на 400КГц. После внесения правок в LiquidTWI2.cpp дисплей заработал.

Борьба за пиксели.

На смену LCD 2004, вернувшемуся на свое законное место на передней панели моего принтера, пришел миниатюрный OLED дисплей 128×64. И на этот раз проблема была куда более серьезной — библиотека U8glib-HAL, необходимая для работы с графическими дисплеями, вызвала множественные ошибки компиляции. Адаптированная под ARM версия U8glib не дружила с stm32duinо, на котором построен весь HAL для STM32F1.

Недружила весьма серьезно: одна из ошибок компиляции была вызвана конфликтом в определении констант — одни и те же константы в stm32duino определялись через enum, а в U8glib-HAL — через #define.

Единственной платформой, на которой U8glib-HAL использовалась и компилировалась была LPC1768, но разница в устройстве HAL для STM32F1 и LPC1768 не позволяла воспользоваться кодом из LPC1768 без полной переработки HAL для STM32F1.

Высокие материи C++ никогда не были моей сильной стороной, поэтому был выбран обходной путь. Из библиотеки были надерганы файлы с функционалом, необходимым для компиляции, проблемный файл u8g_delay.c заменил u8g_delay.cpp с альтернативной реализацией u8g_Delay(), а из u8g.h были удалены все упоминания о неиспользуемых функциях.

Результатом стала успешная компиляция и до получения картинки на экране оставался всего один шаг — замена коммуникационной функции u8g_com_null_fn() на что-то более осмысленное.

Аналогичная коммуникационная функция у меня уже была в тестовом проекте, и все, что оставалось сделать, это заменить прямое обращение в аппаратной I2C периферии на вызовы библиотеки Wire.

Объем кода в этой функции пустяковый, так что уже через 15 минут экран озарился черным прямоугольником заботливо прикопанных граблей.

Верный логический анализатор показал, что управляющие команды в шину передаются, а данные — нет. Причиной тому стало переполнение буфера библиотеки Wire. U8glib передает блок в

130 байт, а под буфер в библиотеке Wire выделено всего 32 байта. Вариантов решения было всего два — увеличить размер буфера в stm32duino до 144 байт или добавить в коммуникационную функцию проверку на переполнение буфера и отправку блока в несколько приемов. Для личного использования больше подходит первый вариант, но ручная правка библиотеки в stm32duino не самое переносимое решение.

В итоге в коде появилась константа, определяемая через #define. Если она определена — используется кусочная отправка, если нет — отправляем все и сразу, экономя на этом несколько байт лишних проверок.

    Для подключения обновленной библиотеки в platformio.ini нужно добавить https://github.com/jmz52/U8glib-HAL/archive/stm32duino.zip в список lib_deps.

После того, как графический дисплей заработал, настал момент переехать с макетки на полноценную печатную плату, а заодно и опробовать в деле новенькие драйвера LV8729.

Переезд прошел успешно и уровень шума от новых драйверов порадовал.

Война с таймерами и подключение сервопривода.

У F103C8 есть 4 таймера с возможностью генерации ШИМ. Еще во время использования макетной платы я заметил, что вентиляторы подключенные к ШИМ каналам таймеров 1 и 3 противно пищат, поэтому при проектировании платы управление полевыми транзисторами вентиляторов и сервоприводом было повешено на выходы таймера 4.

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

В Marlin используется два таймера для генерации прерываний — STEP_TIMER для управления шаговыми двигателями и TEMP_TIMER для контроля температуры и прочих операций. На время обработки прерывания таймер останавливается, что делает невозможным использование этих таймеров для генерации ШИМ.

Для F103С8 TEMP_TIMER — это таймер 2, а STEP_TIMER — это таймер 4, на который и были повешены вентиляторы и сервопривод.

Противный писк вентиляторов, который мне так не понравился, вызван особенностью реализации analogWrite() в stm32duino. Таймеры используются с максимальным разрешением (16-бит) и без понижения частоты (prescale), а функция analogWrite() умножает 8-ми битное значение на 257, для получения 16-битного значения для генерации ШИМ.

При тактовой частоте микроконтроллера в 72 МГц, 16-ти битный таймер генерирует ШИМ с частотой 1.1 КГц. Противный писк вентиляторов был индикатором работающего аппаратного генератора ШИМ.

По счастью решить эту проблему можно было программным образом, назначив в HAL_timers_Stm32f1.h таймер 3 на роль STEP_TIMER_NUM.

Это освободило таймер 4 для генерации ШИМ, но не решило проблему с сервоприводом.

Сервопривод управляется ШИМ импульсами. Частота импульсов 50Гц, а ширина задает угол поворота сервопривода.

Инициализация сервопривода устанавливает предделитель таймера (prescaler), снижая его частоту до 50Гц. Писк вентилятора, управляемого другим каналом того же таймера сменился негромким жужжанием, из чего можно было сделать вывод, что инициализация отработала корректно. К сожалению на этом все и заканчивалось, так как код управления сервоприводом оказался нерабочим.

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

Кроме этого был очередной конфликт между кодом Marlin и фреймворком stm32duino — moduleservo.h из Marlin и librariesServosrcServo.h из stm32duino используют одну и ту же константу _SERVO_H_ для исключения повторной обработки файла. Это приводит к тому, что файл из библиотеки stm32duino фактически не используется при компиляции и класс libServo, наследуемый от библиотечного класса Servo вызывает ошибку при линковке.

В итоге я переписал управление сервоприводом, убрав зависимость от библиотеки Servo и удалив весь неиспользуемый в Marlin код.

Часть третья — пробный запуск и разбор полетов.

Хотя на плате и заработала вся периферия, удачный решением ее назвать нельзя.

  • Неправильный размер отверстий для сверловки. В 0.8мм не проходят выводы большинства элементов. Почти все отверстия пришлось рассверливать до 1.0мм.
  • Отсутствует диод на входе стабилизатора 5В. При подключении USB на линии +12В оказывается

  • Было интересно.Очень понравились драйвера LV8729.
  • Возможностей STM32F103C8T6 достаточно для построения 3d принтера.
  • Для полнофункционального контроллера 3d принтера нужно брать более серьезный микроконтроллер.
  • Плату стоит перепроектировать на два слоя и в размере 100×100мм.

В качестве бонуса — 32-х битный сапог Марго

32 бита для самых маленьких

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *