1. Почему STM32F072 — отличная замена ATmega328

STM32F0C8T6 – это очень дешевый 32 битный микроконтроллер. Этот чип может быть интересной заменой привычной ATmega328 на платах Arduino DIY проектах. Я выбрал этот чип для экспериментов в основном по двум причинам:
1. Встроенный USB модуль, который может работать БЕЗ внешнего кварцевого резонатора. Только от встроенного тактового генератора частотой 48 МГц. Таким образом на этом контроллере можно создать USB устройство в котором нет ни одного кварцевого резонатора. Это еще больше удешевляет готовое устройство.
2. Очень низкая цена. Я купил десяток таких чипов на Алиэкспресс по цене примерно 0.5 доллара да штуку. Кроме того, у чипа много других архитектурных преимуществ, которые вы можете оценить из таблицы ниже.
| Характеристика | STM32F072C8T6 | ATmega328p |
|---|---|---|
| Архитектура ядра | ARM Cortex-M0 (32-бит) | AVR RISC (8-бит) |
| Тактовая частота | До 48 МГц | До 20 МГц |
| Flash-память | 64 КБ | 32 КБ |
| SRAM | 16 КБ | 2 КБ |
| EEPROM | Нет (эмулируется во Flash) | 1 КБ |
| Контроллер DMA | Есть (7 каналов) | Нет |
| Напряжение питания | 2.0 – 3.6 В | 1.8 – 5.5 В |
| АЦП | 12-бит (до 16 каналов) | 10-бит (8 каналов в TQFP, 6 в DIP) |
| ЦАП | Есть (12-бит, 2 канала) | Нет |
| Интерфейсы | USB 2.0 (Crystal-less), 2x I2C, 2x SPI, 4x USART, CAN | 1x I2C (TWI), 1x SPI, 1x UART |
Вдохновляет также наличие на борту 12 битного двухканального ЦАП, который можно с успехом использовать для вывода различных аналоговых сигналов в наших самодельных проектах.
Из недостатков STM32F072C8T6 можно отметить меньший диапазон напряжения питания (3.3V), отсутствие выделенной энергонезависимой памяти EEPROM и более высокий порог вхождения для начинающих программистов по сравнению с ATmega328p/Arduino.
2. Железо: Минимальная обвязка и самодельная плата
К сожалению я не нашел готовых плат с этим контроллером по адекватной цене, поэтому решил заказать десяток отдельных микроконтроллеров. Микроконтроллер поставляется в SMD корпусе с 48 выводами и шагом выводов 0.5 мм. Поэтому я заказал также небольшие универсальные макетные платы-переходники для подобных чипов.

Это двухсторонняя плата. С одной стороны можно установить чип с шагом 0.5 мм, а с другой стороны – с шагом 0.8 мм. Так как у нас чип с 48 выводами, а на плату можно установить чип до 100 выводов, то у нас остается место для компонентов обвязки.

Вид собранной платы с установленным контроллером и другими элементами

С обратной стороны плат соединения выполнены тонким одножильным проводом.

Это схема минимальной обвязки, необходимой для того, чтобы микроконтроллер можно было прошить с помощью программатора STLINK. Я начал с этой схемы. После того, как я убедился в работоспособности контроллера на этой плате, я добавил USB порт, светодиод на вывод PA0 и стабилизатор напряжения на 3.3 V чтобы плата могла получать питание от +5V порта USB.

Полная схема тестовой платы с STM32F072
Для включения питания от USB необходимо установить перемычку J1. В этом случае нельзя подавать питание 3.3 V от программатора на пин VDD. Если вы планируете подавать питание на плату от программатора, то снимите перемычку J1.
3. Программатор
В качестве программатора я использовал свою старую плату STM32 Discovery F0 с микроконтроллером STM32F051R8T6 на борту. На этой плате также имеется качественный программатор STLINK V2, который можно настроить на программирование внешних микроконтроллеров. Для этого нужно снять две перемычки на плате Discovery.

Плата STM32F0 DISCOVERY, которую я использовал в качестве программатора. Левая (на фото) половина плата с чипом меньшего размера – это встроенный в плату программатор STLINK V2, который можно использовать для прошивки внешних контроллеров. Можно также использовать популярный программатор STLINK – “китайский свисток” с Алиэкспресс. Будет работать так же.
Для прошивки можно использовать утилиту STM32Cube Programmer или струю программу STM32 ST-LINK utility. Обе программы работают хорошо. STM32Cube Programmer удобен тем, что понимает файлы прошивок формата .elf, котоорые не видит старая ST-LINK utility. Для использования ST-LINK utility нужно принудительно включать в IDE (в компиляторе) генерацию HEX файлов, которая обычно отключена по умолчанию.

Приложение STM32 ST-LINK utility

Приложение STM32Cube Programmer
4. Настройка USB стека и написание прошивки
Для написания программы для контроллера я использовал редактор Visual Studio Code с плагином от STM32. Для первоначальной настройки контроллера и генерации проекта была использована программа STM32 CubeMX
Цель этого тестового проекта – создать USB устройство, которое реализует виртуальный COM порт при подключении в компьютеру и проверить его работу через программу – терминал.
Процесс создания прошивки очень подробно описан в моем видео ролике. Поэтому я не буду здесь описывать его еще раз. Вы можете посмотреть этот ролик здесь в статье или перейти на ютуб по ссылке под роликом:
Посмотреть подробный обучающий видеоролик о создании USB CDC устройства на STM32F072C8T6 (The video includes an English soundtrack. To select it, click the gear icon in the player)
Скачать файлы проекта можно по этой ссылке…
В моих конструкциях я использовал удобные самодельные маленькие разъемы, которые я сделал из стандартных Arduino – перемычек типа “мама-мама”.

Для фиксации ряда пинов использую маленький корпус, напечатанный на 3D принтере. 3D модель корпуса под 5-пиновый разъем (например для SWD разъема программирования STM32) можно скачать по этой ссылке…


