Схемы на stm32. Начало работы с STM32: советы и подводные камни для новичков

Как избежать типичных ошибок при освоении микроконтроллеров STM32. Какие сложности могут возникнуть при выборе платы и программатора. На что обратить внимание при разработке первых проектов. Какие инструменты лучше использовать начинающим.

Содержание

Выбор платформы и первые шаги с STM32

Многие разработчики начинают свой путь в мир микроконтроллеров с платформы AVR и Arduino. Однако рано или поздно возникает желание перейти на что-то более мощное, например, 32-битные микроконтроллеры ARM. Одним из популярных вариантов являются микроконтроллеры семейства STM32 от компании STMicroelectronics.

При переходе на новую платформу возникает множество вопросов:

  • Какую конкретно модель микроконтроллера выбрать?
  • Нужна ли отладочная плата или можно обойтись самодельной?
  • Какой программатор использовать?
  • Какую среду разработки выбрать?

Давайте рассмотрим основные моменты, с которыми сталкиваются новички при освоении STM32.

Выбор микроконтроллера STM32

Семейство STM32 включает множество серий микроконтроллеров с различными характеристиками. Для начала работы часто рекомендуют серию STM32F1, в частности популярный STM32F103C8T6.


Этот микроконтроллер обладает следующими преимуществами для новичков:

  • Низкая стоимость
  • Хорошая производительность (72 МГц)
  • Большое количество обучающих материалов
  • Наличие недорогих отладочных плат (например, Blue Pill)

Однако стоит учитывать, что STM32F1 — не самая современная серия. Для более серьезных проектов можно рассмотреть STM32F4 или STM32L4.

Отладочная плата: покупать или делать самому?

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

  • Сложность трассировки из-за малого шага выводов
  • Риск повреждения микроконтроллера при пайке
  • Отсутствие встроенного программатора/отладчика
  • Необходимость самостоятельно продумывать обвязку

Для начинающих рекомендуется все же приобрести готовую отладочную плату. Это сэкономит время и нервы на начальном этапе. Популярные варианты:

  • Blue Pill (STM32F103C8T6)
  • Nucleo boards
  • Discovery boards

Выбор программатора и отладчика

Для программирования и отладки микроконтроллеров STM32 чаще всего используются следующие интерфейсы:


  • ST-LINK/V2 (встроен во многие отладочные платы)
  • J-Link
  • Black Magic Probe
  • DAPLink

Начинающим рекомендуется использовать ST-LINK/V2, так как он официально поддерживается STMicroelectronics и совместим со всеми средами разработки. Если у вас есть отладочная плата Nucleo или Discovery, вы можете использовать встроенный ST-LINK.

Важно отметить, что в отличие от AVR, для STM32 нет единого стандартного разъема для программирования. Это может вызвать путаницу при подключении.

Среда разработки: IDE vs командная строка

Выбор среды разработки во многом зависит от личных предпочтений. Для STM32 доступны следующие популярные варианты:

  • STM32CubeIDE (бесплатная официальная IDE от STMicroelectronics)
  • Keil MDK (платная IDE, часто используется в промышленности)
  • PlatformIO (плагин для Visual Studio Code)
  • Командная строка + текстовый редактор (для опытных разработчиков)

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


Особенности программирования STM32

При переходе с AVR на STM32 следует учитывать ряд особенностей:

  • Необходимость настройки тактирования периферии
  • Более сложная система прерываний
  • Наличие DMA (прямой доступ к памяти)
  • Больше доступных интерфейсов и периферийных модулей

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

Типичные ошибки новичков при работе с STM32

При освоении STM32 часто встречаются следующие ошибки:

  1. Забывают включить тактирование периферии
  2. Неправильно настраивают PLL и системное тактирование
  3. Путают режимы работы GPIO (push-pull vs open-drain)
  4. Игнорируют проверку флагов готовности периферии
  5. Неправильно обрабатывают прерывания

Чтобы избежать этих ошибок, внимательно читайте документацию и используйте отладку.

Отладка проектов на STM32

Отладка — важнейший этап разработки. Для STM32 доступны следующие инструменты:

  • Аппаратный отладчик (через ST-LINK или J-Link)
  • Вывод отладочной информации через UART
  • Светодиодная индикация
  • Анализаторы логики

Использование аппаратного отладчика позволяет ставить точки останова, просматривать значения переменных и регистров в реальном времени. Это значительно упрощает поиск ошибок.


Оптимизация энергопотребления в проектах STM32

Одним из преимуществ микроконтроллеров STM32 является возможность тонкой настройки энергопотребления. Для создания энергоэффективных устройств следует обратить внимание на следующие аспекты:

  • Использование режимов пониженного энергопотребления (Sleep, Stop, Standby)
  • Отключение неиспользуемой периферии
  • Правильный выбор частоты тактирования
  • Использование событийно-ориентированного подхода вместо активного опроса

Для особо требовательных к энергопотреблению проектов стоит рассмотреть серию STM32L (Low Power), специально оптимизированную для работы от батарей.

Использование библиотек и HAL в проектах STM32

STMicroelectronics предоставляет несколько уровней абстракции для работы с периферией:

  • Прямая работа с регистрами
  • Standard Peripheral Library (устаревшая)
  • Hardware Abstraction Layer (HAL)
  • Low-Layer (LL) API

Для начинающих рекомендуется использовать HAL, так как она обеспечивает хороший баланс между удобством использования и производительностью. По мере роста опыта можно переходить на LL API или прямую работу с регистрами для максимальной оптимизации.


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

Советы по оптимизации кода для STM32

Хотя микроконтроллеры STM32 обладают высокой производительностью, оптимизация кода все еще может быть важна для некоторых приложений. Вот несколько советов:

  1. Используйте DMA для передачи данных, где это возможно
  2. Правильно выбирайте типы данных (например, используйте uint8_t вместо int, где достаточно)
  3. Включайте оптимизацию компилятора (-O2 или -O3)
  4. Используйте встроенные функции для работы с битами (__set_bit, __clear_bit и т.д.)
  5. Размещайте критичный по времени код в RAM вместо FLASH

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

Заключение

Освоение микроконтроллеров STM32 открывает широкие возможности для разработки сложных встраиваемых систем. Несмотря на более крутую кривую обучения по сравнению с Arduino, STM32 предоставляет значительно большую гибкость и производительность.


Ключевые моменты для успешного старта с STM32:

  • Начните с отладочной платы и официальной IDE
  • Тщательно изучайте документацию на выбранный микроконтроллер
  • Используйте HAL на начальных этапах
  • Освойте работу с отладчиком
  • Постепенно переходите к более низкоуровневому программированию

Помните, что практика — ключ к успеху. Начните с простых проектов и постепенно усложняйте их, осваивая новые возможности STM32.


Проекты на STM32 со схемами и скетчами

Главная→Рубрики Проекты на STM32 1 2 >>

Электронные проекты на основе плат STM32, основой которых является 32-битный процессор с архитектурой ARM Cortex M3. По своей эффективности платы STM32 значительно превосходят платы Arduino сравнимой с ними стоимости. Рассмотрено подключение к платам STM32 разнообразных датчиков, исполнительных механизмов и других периферийных устройств.
Доступны проекты как для начинающих радиолюбителей, так и для более опытных. Для каждого проекта приведена схема и подробное описание программы, а также видео, демонстрирующее его работу.

Опубликовано автором admin-new25 апреля, 2022

Наверняка многие из вас начинали свое знакомство с микроконтроллерной техникой с платы Arduino, которая проста в освоении и позволяет реализовать огромное число сравнительно несложных проектов. Но при создании сложных устройств вы неизбежно столкнетесь с ограничениями платы Arduino: небольшая вычислительная мощность, … Читать далее →

Рубрика: Проекты на STM32 | Метки: STM32, начинающим, светодиод | Комментарии (2)

Опубликовано автором admin-new24 апреля, 2022

Датчик DHT11 предназначен для измерения температуры и влажности как на отрытой местности, так и в закрытых помещениях. Диапазон измерений температуры у него составляет от 0°C до 50°C с точностью 1°C. Также он способен измерять влажность в диапазоне от 20% до … Читать далее →

Рубрика: Проекты на STM32 | Метки: DHT11, STM32, датчик влажности, датчик температуры, ЖК дисплей | Добавить комментарий

Опубликовано автором admin-new14 апреля, 2022

Протоколы связи являются составной частью многих современных электронных проектов. Везде, где требуется подключение различных периферийных устройств или соединение между собой нескольких микроконтроллеров, для передачи данных применяются протоколы связи. К настоящему времени разработано достаточно много протоколов связи и среди них достаточно … Читать далее →

Рубрика: Проекты на STM32 | Метки: arduino uno, RS-485, STM32, последовательная связь | Комментарии (4)

Опубликовано

12. 04.2022 автором admin-new13 апреля, 2022

Беспроводные технологии играют важную роль в жизни современного общества. К подобным технологиям можно отнести Bluetooth, WiFi, радиочастотные модули 433 МГц (433 MHz RF) и т.д. Каждая из этих технологий имеет свои преимущества и недостатки по скорости, дальности, стоимости и т.п. … Читать далее →

Рубрика: Проекты на STM32 | Метки: arduino uno, HC-SR04, STM32, беспроводная связь, ЖК дисплей, радиочастотный модуль, ультразвуковой датчик | Добавить комментарий

Опубликовано автором admin-new10 апреля, 2022

GSM модули в настоящее время находят широкое применение в разнообразных проектах тематики интернета вещей. При этом они гораздо менее зависимы от окружающих условий чем, к примеру, модули Wi-Fi или Zigbee, которые, к тому же, отличаются достаточно высокой стоимостью и малым … Читать далее →

Рубрика: Проекты на STM32 | Метки: GSM, STM32, ЖК дисплей | Добавить комментарий

Опубликовано автором admin-new9 апреля, 2022

Глобальная система навигации и определения положения (Global Positioning System, GPS) позволяет определить с высокой точностью широту и долготу любой точки земного шара. Также в сигналах от спутников GPS содержится и информация о всеобщем скоординированном времени (Universal Time Coordinated, UTC). В … Читать далее →

Рубрика: Проекты на STM32 | Метки: gps, STM32, ЖК дисплей | Добавить комментарий

Опубликовано автором admin-new8 апреля, 2022

Все мы знаем, что микроконтроллеры могут работать только с цифровыми значениями, но в реальной жизни нам приходится иметь дело и с аналоговыми сигналами. Поэтому для преобразования цифровых значений, обрабатываемых микроконтроллерами, в аналоговые сигналы, применяются устройства, называемые цифро-аналоговыми преобразователями (ЦАП, в … Читать далее →

Рубрика: Проекты на STM32 | Метки: MCP4725, STM32, ЖК дисплей, ЦАП | Добавить комментарий

Опубликовано автором admin-new8 апреля, 2022

Радиочастотная идентификация (Radio Frequency Identification, RFID) находит широкое применение в современном мире в супермаркетах, системах безопасности, системах контроля доступа, системах сбора данных и т.д. В данной статье мы рассмотрим подключение модуля чтения RFID меток EM-18 к плате STM32F103C8, известной также … Читать далее →

Рубрика: Проекты на STM32 | Метки: EM-18, STM32, ЖК дисплей, радиочастотная идентификация | Добавить комментарий

Опубликовано автором admin-new4 апреля, 2022

Интерфейс SPI наряду с интерфейсом I2C занимает одно из важнейших мест для обмена данными между компонентами электронных устройств. Ранее на нашем сайте мы рассматривали использование интерфейса SPI в плате Arduino – в данной статье мы демонстрировали возможность связи между двумя … Читать далее →

Рубрика: Проекты на STM32 | Метки: arduino uno, SPI, STM32, ЖК дисплей | Комментарии (2)

Опубликовано автором admin-new4 апреля, 2022

Интерфейс I2C в настоящее время является одним из самых популярных интерфейсов для связи между внутренними компонентами электронной аппаратуры. Ранее на нашем сайте мы рассматривали статью про использование интерфейса I2C в плате Arduino, в которой демонстрировали возможность связи между двумя платами … Читать далее →

Рубрика: Проекты на STM32 | Метки: arduino uno, I2C, STM32 | Добавить комментарий

Проекты на STM32 со схемами и скетчами

Главная→Рубрики Проекты на STM32 — Страницу 2 << 1 2

Электронные проекты на основе плат STM32, основой которых является 32-битный процессор с архитектурой ARM Cortex M3. По своей эффективности платы STM32 значительно превосходят платы Arduino сравнимой с ними стоимости. Рассмотрено подключение к платам STM32 разнообразных датчиков, исполнительных механизмов и других периферийных устройств.
Доступны проекты как для начинающих радиолюбителей, так и для более опытных. Для каждого проекта приведена схема и подробное описание программы, а также видео, демонстрирующее его работу.

Опубликовано автором admin-new2 апреля, 2022

Микроконтроллеры STM32 построены на основе архитектуры ARM Cortex M. В настоящее время они становятся все более популярными благодаря их высокой производительности и относительно невысокой стоимости. Ранее мы рассматривали программирование платы STM32F103C8, также известной под названием STM32 Blue Pill («синяя таблетка») … Читать далее →

Рубрика: Проекты на STM32 | Метки: STM32, начинающим, светодиод | Добавить комментарий

Опубликовано автором admin-new1 апреля, 2022

Прерывания – это механизм, при котором устройства ввода/вывода или некоторые команды могут приостанавливать «нормальную» работу процессора и переключаться на выполнение другой задачи, поскольку в данном случае она будет иметь наивысший приоритет. К примеру, если процессор мониторит поступление какого-либо события и … Читать далее →

Рубрика: Проекты на STM32 | Метки: STM32, ЖК дисплей, начинающим, прерывания | Добавить комментарий

Опубликовано автором admin-new30 марта, 2022

В современной электронике, а особенно в проектах робототехники, широкое применение находят серводвигатели (сервомоторы), которые отличаются небольшими размерами, энергоэффективностью и точностью. Также они обеспечивают большой крутящий момент и могут передвигать или поднимать различные грузы. В данной статье мы рассмотрим подключение серводвигателя … Читать далее →

Рубрика: Проекты на STM32 | Метки: STM32, ЖК дисплей, серводвигатель | Добавить комментарий

Опубликовано автором admin-new29 марта, 2022

Шаговый двигатель представляет собой бесщеточный двигатель постоянного тока (brushless DC motor), который может вращаться на маленькие углы, называемые шагами. Большинству шаговых двигателей требуется 200 шагов для совершения полного оборота на 360 градусов, что означает поворот двигателя на 1.8 градуса при … Читать далее →

Рубрика: Проекты на STM32 | Метки: 28BYJ-48, STM32, ULN2003, шаговый двигатель | Добавить комментарий

Опубликовано автором admin-new26 марта, 2022

В настоящее время Bluetooth является одной из самых популярных технологий беспроводной связи, применяющейся для передачи данных на короткие расстояния. Она находит широкое применение в современных смартфонах, планшетах, беспроводных наушниках и гарнитурах и т.п. Технология Bluetooth работает на частоте 2.4 ГГц … Читать далее →

Рубрика: Проекты на STM32 | Метки: Android, Bluetooth, HC-05, STM32, светодиод | Добавить комментарий

Опубликовано автором admin-new25 марта, 2022

В предыдущей статье на нашем сайте мы рассмотрели принципы работы АЦП в плате STM32. В этой же статье мы рассмотрим основы использования широтно-импульсной модуляции (ШИМ, в англ. PWM – Pulse Width Modulation) в плате STM32F103C8, которая также называется STM32 Blue … Читать далее →

Рубрика: Проекты на STM32 | Метки: STM32, ULN2003, драйвер мотора, ЖК дисплей, светодиод, ШИМ | Добавить комментарий

Опубликовано автором admin-new24 марта, 2022

В современных электронных устройствах широкое применение находят аналого-цифровые преобразователи (АЦП, в англ. ADC – Analog to Digital Converter). С помощью данных АЦП можно считывать значения напряжения с различных аналоговых датчиков: температуры, наклона, тока, изгиба и многих других. В данной статье … Читать далее →

Рубрика: Проекты на STM32 | Метки: STM32, АЦП, ЖК дисплей | Добавить комментарий

Опубликовано автором admin-new23 марта, 2022

Плата разработки STM32F103C8, также известная как STM32 Blue Pill («синяя таблетка»), отличается невысокой стоимостью и хорошей производительностью благодаря наличию в ее составе микропроцессора на основе архитектуры ARM Cortex M3. Также ее существенным достоинством является возможность ее программирования с помощью Arduino … Читать далее →

Рубрика: Проекты на STM32 | Метки: STM32, мигание светодиода, начинающим | Добавить комментарий

Опубликовано автором admin-new22 марта, 2022

Жидкокристаллический (ЖК) дисплей формат 16×2 является самым распространенным дисплеем, применяемым в электронных устройствах для отображения алфавитно-цифровой информации. Кроме целей непосредственного отображения информации ЖК дисплеи могут использоваться в качестве устройств для отладки работы проектов. В данной статье мы рассмотрим подключение ЖК … Читать далее →

Рубрика: Проекты на STM32 | Метки: STM32, ЖК дисплей | Добавить комментарий

Опубликовано автором admin-new23 марта, 2022

Для многих энтузиастов Arduino стала первой платой, с которой они начали свое знакомство с электроникой и микроконтроллерной техникой. Но по мере того как их навыки росли они стали замечать, что плата Arduino не очень хорошо подходит для промышленных задач и … Читать далее →

Рубрика: Проекты на STM32 | Метки: STM32, мигание светодиода, начинающим | Добавить комментарий

Начало работы с stm32 или не повторяйте моих ошибок / Хабр

Небольшой рассказ о граблях, встреченных на пути познания ARM на примере stm32f103c8t6 и stm32l151rct6.

Мое знакомство с микроконтроллерами началось с AVR. Ими я занимался довольно долго, пройдя путь от плат с процарапанными дорожками и ассемблера в AtmelStudio4 до нормального лута и самописных makefile’ов для работы в блокноте (в моем случае — KWrite) и командной строке.

Но пришло время потыкать палочкой и в их старших братьев — ARM. Выбор конкретного семейства был долгим и пассивным (потому что прямой надобности нет, вот и не спешил), но в конце концов закончился на stm32f1, как самом, пожалуй, распиаренном. Покупать программатор, отладочную плату вроде Discovery или blue pill? Что вы, я же мастер по AVR-кам! Любую плату можно сделать ЛУТом, да еще так, как тебе нужно, без лишнего обвеса. Поэтому покупаю голый stm32f103c8t6 и начинаю шаманить с трассировкой платы. Что же мне понадобится? Хотя бы два порта вывести на гребенки… упс, выводить порты целиком неудобно. Да и ладно, выведу по 8 ножек — от порта A младшие (0-7), от B — старшие (8-15). Еще, конечно, светодиоды и кнопки, как же без индикации и управления. Вот что меня удивляет в готовых отладочных платах так это отсутствие хотя бы 2-3 светодиодов и 1-2 кнопок, которые бы ни с чем не конфликтовали. Как они вообще себе представляют отладку? Под кнопки сами просятся PA8, PA9, они удобно расположены. Еще пригодятся USB, джамперы BOOT0, BOOT1 и разъем батарейки для часов. И разъемы для кварцев, чтоб совсем красиво (впоследствии ни разу не воспользовался разъемами для кварцев). Для питания контроллеру нужно не более 3.6 В, а с USB идет 5 В. Надо ставить стабилизатор. Много читал, как народ выбирает стабилизаторы с низким падением напряжения… зачем? Разница полтора вольта, да тут дубового 78l33 хватит. А теперь разъем JTAG. У Atmel разъем программирования был стандартный ISP10 или ISP6. Наверное JTAG тоже штука стандартная. Оказывается, да… но только для отдельного производителя или даже устройства. Смотрим разъем на st-link: красивый, 10-контактный. Смотрим на каком-то программаторе для AVR: упс, уже 20-контактный. Смотрим еще где-то: больше несовместимых разъемов богу несовместимых стандартов. Ну, раз так, будем изобретать свой. Если что, переходник между ними будет не сложнее переходника ISP-6 на ISP-10. Вроде бы все готово, можно делать плату. Как оказалось, шаг 0,5 мм вполне достижим на любительском уровне, даже почти маркером подрисовывать не пришлось.

Теперь чем ее прошивать. Раз есть USB, наверное, через него и умеет. Читаю даташит — ага, через USB не умеет, зато через UART1 умеет. Упс, как раз его-то я и забыл вывести. Мало того, он еще и с кнопкой конфликтует, с той что на PA9 висит. Ну да ладно, выведу на проводочках, а кнопка все равно еще одна есть. Немного шаманства и плата готова и даже определяется в stm32flash.

С железом вроде бы разобрался, пора переходить к коду. Почитав несколько статей в интернете нашел готовый архив под gcc-arm-none-eabi. Разбираться, как именно задавать последовательность сборки, буду потом. Пока что занимаюсь hello-world’ами на кнопках и светодиодах. Поскольку это мое первое знакомство с данным семейством, никаких оберток вроде HAL — только ручная работа с регистрами. Впрочем, это вполне естественный подход, как мне кажется, можно было и не упоминать. Немного напрягает все время дергать питание и BOOT0 на плате, ну да ладно, когда-нибудь сделаю JTAG-программатор. Как ни странно, на грабли с отключенным тактированием периферии не наступил. Вспомнил молодость, когда на TurboPascal’е писал обработку трехмерной графики. Здесь у меня есть дисплей на ili9341 от raspberry pi и контроллер на целых 72 МГц. Вот что получилось — до 200 точек на модель и 11 fps. Конечно же, все матрицы трансформаций считаются в числах с фиксированной точкой.


В какой-то момент захотелось сделать носимое устройство, чтобы долго работало от батарейки. Посмотрел я в даташит и огорчился: знаменитые ARM по потреблению в разы хуже тех же AVR-ок! Если у вторых (ткнул в первый попавшийся контроллер, которым оказался ATmega88p) потребление составляет 0,8 мкА с учетом часов, то у первых даже в самом экономичном режиме сна* — 25 мкА ± 1.4 мкА на RTC. Это никуда не годится. Впрочем, stm32f103 и не позиционируется как экономичная серия. Смотрю на сайте STmicroelectronics другие серии контроллеров и выбираю серию stm32l1: помимо потребления порядка 1 мкА, там есть еще емкостный датчик и контроллер ЖКИ. Правда, максимальная частота поменьше, всего 36 МГц (или 24 МГц если используется USB), но это я как-нибудь переживу. Решено: беру пару stm32l151rct6 аж с 32 кБ оперативки (еще там 256 кБ флеша, но слабо представляю чем его можно забить. Разве что совсем диким говнокодом или массивами данных).


  • ) не путать режимы сна (sleep, stop) с отключением (standby)

Параллельно делаю из запасной stm32f103 программатор st-link v2, просто потому что надоело возиться с BOOT0 и питанием, да и быстрее он. Впрочем, программирование по UART оставлю — мало ли что. Там тоже было немного шаманства, но ничего выдающегося. Разве что найти командную строку для openocd оказалось проблемой. Для будущих поколений оставлю ее:

openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c "init" -c "reset halt" -c "flash write_image erase "$(firmware).bin" 0x08000000" -c "reset run" -c "exit"

Для stm32l151 надо, само собой, поправить target на «target/stm32l1.cfg»

Чуть забегу вперед по хронологии, но чтоб не возвращаться. Господа, не экономьте на толщине текстолита! Или хотя бы добавляйте подпорки, или не используйте smd-компоненты. Так получилось, что на плате программатора я предусмотрел всего два крепежных отверстия в рандомных местах. А места оказались довольно далеко от разъема JTAG. И через какое-то время я заметил, что программатор работает нестабильно. То работает, то нет, то через UART приходится стереть «жертву», тогда подхватит. Оказалось, что резистор, идущий от вывода контроллера к разъему, сломался. У него просто отвалилась контактная площадка от корпуса. Резистор я перепаял. Потом перепаял остальные. Потом догадался, что даже той малой деформации платы, которая возникала при втыкании-выдирании шлейфа, хватало для несчастных компонентов. В результате воткнул подпорку прямо рядом с разъемом. Пока держит.

Как читатель уже догадался, программирование все также идет в текстовом редакторе, а компиляция и прошивка — в консоли. Естественно, покупная отладочная плата под l151 меня вдохновляла не больше, чем всякие IDE. Потирая следы от граблей, оставленных первой платой, развожу вторую (считая программатор — третью, но он все-таки не отладочная плата). Раз уж собрался отлаживать энергоэффективное устройство, надо заморочиться с питанием. Стабилизатор 78l33 менять не буду, но его выход я разорвал джампером, чтобы туда можно было ткнуться амперметром (надеюсь все-таки на микроамперметр, но там уж как пойдет). Гребенки пусть будут такие же, как на предыдущей плате — совместимость! Ну и пару светодиодов и кнопок, конечно. Грабли с UART1 призывно поблескивают, но я все же ставлю его разъем и не получаю по лбу. Конечно, JTAG у меня уже есть, но страховка не повредит. Так же, как и предыдущую (и плату программатора тоже) удалось развести по одной стороне, даже перемычек не слишком много.

А вот при запаивании контроллера возникла проблема. Я как-то наивно полагал, что на корпусе микросхем должен быть ключ, обозначающий первую ногу. Кто бы ожидал, что молодцы из ST сделают ДВА ключа, симметрично. Вот и какой стороной его запаивать теперь? Подумав, я решил, что это не ключи, а технологические углубления. Мало ли, для позиционирования чипа при изготовлении, например. Или прижать основание для заливки пластиком. Тогда надо ориентироваться по надписи. Логично же, что надпись должна быть читаема если расположить микросхему «стандартно», то есть когда первая нога в левом верхнем углу. Так и начал припаивать. То ли дефект ЛУТа, то ли кривые руки, но припаялась микросхема криво, благо вовремя заметил, прежде, чем запаял целиком. Не беда, есть же старый способ отпаивания многоножек с помощью лезвия бритвы: оно не смачивается припоем и достаточно тонкое чтобы не слишком погнуть. Оказалось, руки все-таки недостаточно прямые, поскольку ножки погнулись. Но не вверх, а вбок, хорошо хоть не сильно и их удалось кое-как выпрямить. Вторая попытка запаивания шла уже под микроскопом, но прежде я решил доправить ножки. И одна из них отломалась. Из чего их делают, что один раз согнуть-разогнуть нельзя? У выводных-то компонентов такой проблемы нет. Ну все, думаю, микросхему в брак, придется запаивать другую. Но вдруг это не критичная ножка? Ну там, вывод общего назначения, или одно из питаний. Пока что запаяю без нее, а там видно будет. На этот раз удалось запаять ровно, правда ножка попала на I2C, с которым я хотел поразвлекаться, но хоть не на жизненно важные разъемы вроде USB, JTAG, UART или BOOT. Подключаю — не работает, программаторы плату не видят. Какое-то время шаманю с пропаиванием ножек, но не помогает. Блуждающий по даташиту взгляд натыкается на картинку контроллера, расположенную где-то в подвале документа. Вот как можно было придумать нанести надпись БОКОМ?! То есть если повернуть контроллер так, чтобы надпись читалась, первая нога окажется в левом нижнем углу. Попутно выяснилось, что одно из «технологических углублений» таки является ключом. Правда, не поясняется, как его отличить от симметричного… Ну, хоть какая-то зацепка. Выпаиваю контроллер строительным феном, чтобы не доломать выводы, и запаиваю на этот раз боком. Отломанный вывод попадает аккурат на TX вывод UART1, то есть на разъем программирования и отладки. Это совсем нехорошо, но перед тем, как менять контроллер, надо хотя бы убедиться что с ориентацией угадал чтобы при перепаивании на живой не убить его неправильным подключением. Подключаю программатор — работает. Ура. Остались мелочи — впаять разъемы, диоды и прочую обвязку. В комментариях подсказали еще один способ — прозвонить земли: они обычно соединены внутри корпуса и расположены не полностью симметрично. Правда, учитывая шаг выводов, попасть по нужным выводам может быть непросто. Как бы то ни было, это самый надежный способ.

Работать с контроллером без UART1 не хочется, да и хуже чем сейчас уже не будет. А если и будет, так все равно менять, поэтому принимаю решение поиграть в хирурга и сделать контроллеру протез ноги из волосинки МГТФа. Как раз под рукой валяется хороший электропроводный клей, которым волосинка решительно приляпывается к площадке на корпусе микросхемы. Тот клей, который попал на соседние ножки, безжалостно удаляется скальпелем. А что вы хотите, попасть в полумиллиметровую площадку и не попасть по соседним торчащим ножкам? Проверяю — работает. Пока не отвалилось, а чтобы не отвалилось и потом, заливаю цианакрилатом.

Возможно, так бы я этой платой и пользовался, если бы ножка не отвалилась повторно. А она залита клеем. Впрочем, он довольно мягкий и режется скальпелем, поэтому успешно счищается. Но использовать тот же электропроводный клей второй раз почему-то не хочется. Попробую-ка я ножку припаять. Обычным жалом паяльника туда не подлезть, но в комплекте шло коническое (вообще-то, коническое изначально было единственным, но ввиду его очевидной неудобности, было заменено обычным, с клиновидной заточкой), которое туда вполне подлезает. Как ни странно, «операция трансплантация» прошла успешно и ножка заработала как ей положено (фотография ножки крупным планом на КДПВ).

Итак, железо готово, пора перейти к коду. Хорошо бы найти готовый пример под gcc и библиотеки CMSIS. Что для этого подойдет лучше, чем официальный сайт производителя? Как оказалось, STmicroelectronics не разделяют моего оптимизма. То, что навигация на сайте сделана через неприличное место — уже привычно, сейчас трудно найти сайт, сделанный людьми для людей. Но они не позволяют ничего с сайта скачать! Возможно, позволили бы после регистрации, но у меня и раньше не было желания регистрироваться где попало, а после такого отношения к разработчикам — и подавно. На кой ляд вам моя почта или что вы там требуете? Собирать персональные данные, спам слать? Идите лесом, а я в свободном доступе найду! Кстати, немного удивило что соответствующего пакета не оказалось в репозитории, но, возможно, ST придумали какой-то лицензионный геморрой. Посему шлю лучи поноса маркетологам, придумавшим такую политику, да и за неудобный сайт тоже.

Как бы то ни было, библиотека прекрасно нашлась на просторах интернета (ссылки давать не буду, мало ли что с сайтом случится). Альтернативный вариант — скачать среду разработки или CubeMX, где эти библиотеки вшиты. Правда, скачать их с официального сайта точно так же невозможно, так что ищем на сторонних и устанавливаем на виртуалку, просто на случай «если вдруг что».

С железом разобрались, с сорцами тоже. Пришло время разбираться наконец с контроллером. Первый сюрприз ждал при попытке воспользоваться сторонним кодом под Discovery. Там применен контроллер stm32l152, который на первый взгляд почти не отличается от stm32l151, установленного у меня. Помимо мелких отличий, оказалось, что в «мой» контроллер не установлен модуль ЖКИ. Немножко обидно, но я все равно не планировал им пользоваться. Хотя вот такое различие могли бы и более явно выделить, чем сносочкой в даташите. Кстати, в даташите рекомендуется в таком случае соединить вывод VLCD с питанием, у меня на фотографии соответствующий 0-омный резистор не запаян, но в реальности я его все же установил. Без него тоже работает, но не стоит перегружать внутренние соединения. Более интересным оказалось поведение часов реального времени. Они упорно не хотели работать, причем в интернете пишут просто «делай так, делай так, оно работает». А оно не работает. Кое-где, впрочем, упоминалось об «известных проблемах с RTC в данной серии». Как бы то ни было, часы все же завелись, правда, только на встроенном RC-генераторе. Попытки запстить часовой кварц приводили к бесконечному ожиданию бита готовности LSE. Я попытался проверить не отвалились ли ножки микросхемы от дорожек на плате и подергал ими в режиме обычных GPIO. Отвалился высокочастотный кварц. WTF?! В общем, вместе эти два кварца работать не желают, но хотя бы по отдельности худо-бедно функционируют.

И тут я догадался: суперклей, которым была залита половина контроллера (он ведь жидкий, его точечно не нанесешь, да и кто бы мог подумать…), дает утечку и кварцы своими наводками мешают друг другу. Ну, снаружи отскрести клей нетрудно, но ведь он затек даже под низ микросхемы. И если утечек по нему достаточно для кварцев, это ведь и на потреблении скажется. Ищу в гугле, чем люди удаляют цианакрилат. Предлагается теплая вода (что???) и диметилсульфоксид. В теплую воду я не верю, поэтому покупаю ДМСО. После более чем часового нахождения капли химиката на поверхности клея, разницы я не заметил. Зато заметили кварцы и стали работать более-менее нормально (интересно, почему? Димексид вытеснил влагу, впитанную клеем?). Впрочем, меня это не убедило, да и остатки клея все равно мозолят глаза… даром что находятся на нижней стороне платы и особо не видны. Кстати, теплая вода, которой я смывал димексид, на клей не повлияла (я не удивлен). Обнаружил, что существует такая штука, как удалитель клея, в таком же тюбике, как и сам клей, только фиолетовом. Ну хоть она-то должна сработать! Как оказалось, она может и работает, но по консистенции напоминает сметану и под микросхему просто не лезет. Ну и толку с тебя, удалитель?! Снаружи я и так почистить могу. Последний шанс: изредка упоминается ацетон. Немножко опасаюсь за пластиковые детали, но как раз их заменить несложно. Заливаю ацетон в стеклянную банку, кидаю туда плату и оставляю на ночь. Наутро выяснилось, что ацетон и правда работает, да еще как! От клея не осталось и следа. Мало того, растворился толкатель одной из кнопок. Что интересно, вторая уцелела, наверное, была сделана из более устойчивого пластика. Немного удивлен был, что и прочий пластик остался нетронутым, даже надписи уцелели. Ну и отлично, а кнопку можно и заменить.

Вот теперь удалось запустить и RTC от часового кварца, и режим сна потрогать, да и с другой периферией пообщаться. А еще, чтобы совсем фен-шуйно было, нанес подписи на плату. Но не маркером (вдруг снова купать в растворителях?) а процарапал скальпелем. На века!

Ну и для будущих поколений оставлю примеры кода для обоих контроллеров, вместе с библиотеками, makefile’ами и прочим. Останется только установить gcc-arm-none-eabi, openocd, stm32flash и прочую мелочь.
stm32f103
stm32l151

В комментариях несколько раз советовали не заниматься ЛУТом и заказать изготовление плат у профессионалов. Для прототипирования, как здесь — не вижу смысла. Другое дело, если нужны будут многослойный платы, или еще меньший шаг, или BGA-корпус, или еще что-то, что в домашних условиях сделать сложно. И, разумеется, при изготовлении финальной версии устройства и тиражировании. Нехорошо, если заказчик разберет корпус, спаянный из текстолита, и обнаружит криво отпиленню плату без маски и с перемычками из МГТФ.

Выводы:


  1. Делать отладочные платы под себя при желании можно, они не хуже покупных. А вот программатор-отладчик все же лучше купить, если он не слишком дорогой. Сделать его, конечно, можно, но схему-то вы менять не будете, а раз так — лучше покупного он не будет. Дешевле, скорее всего, тоже. Разве что если контроллер лишний остался или с доставкой проблемы.
  2. Не забывайте про резервный разъем программирования UART1, ну и заодно джамперы BOOT0, BOOT1. Помимо собственно программирования, по UART’у довольно удобно отлаживать программу.
  3. На корпусе LQFP64 два ключа, один из которых фальшивый. Ориентироваться придется на надпись чтобы смотрела ногами влево.
  4. Паять компоненты с малым шагом стоит только под микроскопом. Иначе сложно определить все ли пропаялось и нет ли «соплей». Ну либо на «профессиональном» оборудовании вроде специального фена, паяльной пасты и т.п. Тут уж не знаю, я пишу про любительскую технологию.
  5. Не экономьте на толщине текстолита. Он гнется и этого может хватить для повреждения smd резисторов и, наверное, конденсаторов. Выводным это не страшно, да и компоненты с гнутыми выводами (транзисторы, микросхемы), пожалуй, переживут.
  6. Делать разъемы для кварцев — пустая трата времени. Вы не будете их менять, поэтому просто запаяйте на плату.
  7. Выпаивать многоножку с помощью лезвия бритвы стоит только в самом крайнем случае, когда нет фена. Иначе слишком велик риск ее повредить
  8. Даже если у микросхемы отвалилась ножка, ее можно восстановить! Даже когда шаг 0,5 мм. Главное пользоваться пайкой, а не проводящим клеем.
  9. Никогда не заливайте микросхему цианакрилатным клеем (суперклеем)! Он не обладает должными электрическими, да и механическими, характеристиками.
  10. Для удаления суперклея из труднодоступных мест лучше всего подходит ацетон. Растворяет полностью. Главное убедиться что окружающие компоненты не пострадают. Из не-труднодоступных мест можно и механически удалить.

Руководство для начинающих по изготовлению платы STM32

Кредит: Ordercrazy под лицензией CC0 или Public Domain

Роланд Пелайо STM32 Учебное пособие Оставить комментарий 2 499 Просмотров

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

В предыдущем посте мы научили вас программировать PIC16F84A, который иногда называют «микроконтроллером для начинающих». Сегодня мы научим вас создавать плату микроконтроллера STM32, что немного сложнее. Распиновка STM32 требует одной из самых гибких доступных печатных плат, что делает ее идеальной для многих продуктов, таких как принтеры и роботы. Независимо от того, что вы планируете сделать в первую очередь, плата STM32 поможет вам воплотить это в жизнь.

Но как его создать? Вот важные шаги:

Создание проекта системы

Каждая новая печатная плата начинается с проекта системы. Зная, какие детали вам нужны и где их разместить, фактическое создание доски пойдет гораздо быстрее. Для хорошего проекта STM32 требуется всего один шаг: создание блок-схемы.

Smartdraw – это инструмент для построения диаграмм с огромным контекстно-зависимым набором элементов, которые вы можете использовать для создания схемы. Здесь вы можете создать по одному блоку для каждой из его основных функций и компонентов. На схеме также необходимо отображать соединение между каждым блоком, а также уровень напряжения для каждого соединения.

Платы STM32 также требуют определенных требований, например:

  • 4,7 мкФ и конденсатор 100 нФ рядом с двумя контактами VDD;
  • Развязывающие конденсаторы 1 мкФ и 10 нФ рядом с выводом VDDA; и
  • Максимальное напряжение 24 мА

Используйте отладку JTAG или Serial Wire Debug для вашего протокола, чтобы он не мешал компоновке.

Выбор инструмента проектирования

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

Например, Upverter — это программа с открытым исходным кодом, что делает ее бесплатной. И хотя его функции ограничены, у него есть очень поддерживающее сообщество, которое может помочь вам разработать вашу доску. Между тем Altium 365 – это программное обеспечение для проектирования премиум-класса с удобными интеграциями, такими как SOLIDWORKS и Inventor, которые помогают сократить время проектирования. SOLIDWORKS, например, — это инструмент маршрутизации с искусственным интеллектом, который автоматически соединяет элементы электрического проектирования, такие как контакты и контактные площадки. Подумайте, чего вы хотите от инструмента проектирования, и выберите программное обеспечение, которое лучше всего соответствует вашим потребностям.

Изготовление платы

Завершив проектирование STM32, вы можете собрать плату. Вам понадобятся четыре вещи: лазерный принтер, фотобумага, медная доска и 2-3 чайные ложки порошка хлорного железа.

Шаг 1 : Возьмите фотобумагу и напечатайте рисунок на ее глянцевой стороне. Затем возьмите медную плату и обрежьте ее в соответствии с размером платы, которую вы только что напечатали. Не забудьте после этого натереть одну сторону медной доски стальной ватой! Это удалит верхний оксид и фотостойкий слой, что улучшит прилипание бумаги.

Шаг 2 : Пригладьте бумагу к доске (глянцевой и протертой стороной вместе) и опустите ее в теплую воду на 10 минут. Это должно «напечатать» рисунок на меди.

Шаг 3 : Это опасная часть — травление пластины. Специалисты советуют осторожно опустить медную пластину в водный раствор с растворенным порошком хлорного железа (очень токсичен). Хлорид железа удаляет внешнюю медь, оставляя только проводящую. Используйте плоскогубцы, чтобы вынуть его из раствора.

Помните: пожалуйста, не выливайте раствор в раковину. Утилизируйте его должным образом, предварительно разбавив раствор тонной стиральной соды. Dave’s Homestead научит вас, как превратить пищевую соду в соду для стирки менее чем за час.

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

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

Назад Знакомство с микроконтроллером 8051 с использованием C

Далее Использование датчика отпечатков пальцев

Проверьте также

Arduino прост в использовании, но это происходит за счет множества функций, самые яркие из которых…

Схема однократного сброса для STM32, часть 1

Сделать сложное простым — это (как ни парадоксально!) сложно

Гондолиндрим с автором ishtob

Первая версия опубликована 12 августа 2019 г.

Последняя редакция от 2 сентября 2021 г.


Семейство микроконтроллеров STM32 предлагает широкий выбор вариантов загрузки. Большинство устройств STM32 прошиваются на заводе с очень широким и полным загрузчиком; он допускает широкий спектр опций, когда речь идет о параметрах загрузки, поведении загрузки, внутрисистемном программировании через I2C, SPI, последовательной связи и очень хороших функциях отладки.

Одним из наиболее интересных аспектов работы с этими устройствами является то, как STM справился с процессом выбора загрузки, то есть какая часть памяти используется для запуска указателя стека. В устройствах STM32F0xx существует четыре основных способа загрузки MCU: основная флэш-память, основная системная память, встроенная память SRAM и опция «пустая проверка», доступная только для устройств STM32F04x и STM32F09x.

Эта статья написана для микроконтроллера STM32F072, который я использую в основном в своих платах. Во второй части будет обсуждаться адаптация для других семейств микроконтроллеров STM32; однако все они заменят принципы, расчеты и моделирование в этой статье.

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

1 Введение

Embedded Engineering — это довольно сложные махинации. Это включало доминирование технологий и процедур, настолько сложных, что для их полного освоения требуется высшее образование, а затем сделать те же самые технологии и процедуры доступными и доступными для широкой публики, которая совершенно ничего не знает о технологиях. Клиенты обычно хотят очень простого решения очень сложной проблемы, и иногда лучший продукт не всегда выигрывает, если он не удобен для пользователя — продукты Apple являются для меня главным примером, поскольку они намного менее эффективны, чем конкуренты в мире. тот же ценовой диапазон, но на несколько световых лет впереди с точки зрения пользовательского опыта и удобства использования.

Одной из таких проблем является обработка события сброса в MCU. Микроконтроллер обычно имеет несколько вариантов памяти, все из которых можно вызывать, управлять, записывать и стирать во время выполнения, и все они содержат свое конкретное использование и место. С точки зрения конечного пользователя, мы хотим, чтобы он просто работал , но это не так в исследованиях и разработках. НИОКР — очень нелинейный процесс, требующий полного владения системой, над которой ведется работа, что опять-таки совершенно несовместимо с пользовательским опытом из-за общей неосведомленности конечного пользователя.

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

1.1 А в чем именно проблема?

Конечно, никто не разрабатывает решение в поисках проблемы. Итак, прежде всего, прежде чем заняться аппаратной и микропрограммной спецификой, нам нужно сформулировать «в чем именно заключается проблема?» и работайте оттуда.

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

В микроконтроллерах STM32 пользователь в основном будет использовать две загрузочные области. Первый это основная системная память , которая начинается с адреса 0x1FFF в устройствах STM32F07x (см. [1], раздел 6.3.14 для адресов других устройств в семействе). Основная системная память содержит программу загрузчика, которая прошита STM на заводе. Одной из основных причин принятия устройств STM32F072/071 является возможность USB DFU их загрузчика, то есть возможность обновления флэш-памяти программ с периферийного устройства USB. Устройствам без этой возможности требуется выделенная связь, называемая внутрисистемным программированием или последовательной отладкой для STM (сокращенно SWD), для обновления их флэш-памяти. Этот вариант загрузки используется, когда пользователь хочет перепрошить свою клавиатуру, что не часто, но все же требуется очень редко.

Второй загрузочный регион, который понадобится конечному пользователю, — это основная флэш-память , расположенная по адресу 0x08000000, где должна быть прошита операционная прошивка, такая как QMK. Сброс MCU в это место — это то, что вы ожидаете от слова reset . Он останавливает выполнение и перезапускает его с самого начала программы, что может понадобиться во многих случаях, например, если прошивка клавиатуры остановилась из-за ошибки, или если клавиатура просто показывает неустойчивое поведение, или после перепрошивки клавиатуры.

Загрузка из SRAM или пустая проверка — это прежде всего варианты разработки, которые конечный пользователь будет использовать очень редко; следовательно, мы хотим ограничить параметры загрузки системной памятью и флэш-памятью. Тогда возникает проблема: как разработать удобный для пользователя способ сделать доступным выбор флэш-памяти и системной памяти в конечном продукте, который требует минимальных знаний о тонкостях системы и при этом может быть достаточно надежным?

1.

2 Как работает выбор загрузки на STM32F0xx

Мы выбираем область загрузки в устройствах STM32F0xx с помощью внешних контактов и определенных регистров. В этих устройствах есть два внешних контакта, nRST и BOOT0 , и два регистра памяти nBOOT1 и nBOOT0 , которые устанавливаются программно. nRST — это вывод аппаратной перезагрузки: когда на этом выводе устанавливается низкий уровень, все регистры микроконтроллера, кроме некоторых, сбрасываются (у него низкая логика, отсюда и «n» в «nRST»). Когда он возвращается к нормальному высокому уровню, MCU запускается с адреса памяти 0x00000000, и программа загрузчика вступает во владение. На четвертом нарастающем фронте системных часов BOOT0 , nBOOT0 и nBOOT1 значения выбираются и определяется вариант загрузки в соответствии с таблицей на рисунке 1.

Рисунок 1. Таблица параметров загрузки для устройств STM32F0xx. Источник: [2].

Прежде всего, мы можем игнорировать три нижних параметра, поскольку они доступны только для устройств STM32F04x и STM32F09x. Затем для трех верхних вариантов мы можем игнорировать BOOT_SEL , который равен 1 для всех этих параметров, и nBOOT0 , который помечен как 9.0019 x означает, что его значение не имеет значения для этих опций. Что касается nBOOT1 , мы должны помнить, что на заводе он установлен как ноль, а это означает, что если мы просто не возимся с ним, мы можем сделать оба варианта, которые мы хотели — загрузиться из системной памяти или загрузиться с флэш-памяти — за счет невозможности запуска из SRAM, что очень и очень редко встречается в случае с конечным продуктом, так что в любом случае это не имеет большого значения.

В итоге мы можем сбросить во flash или зайти в DFU USB, установив только значение пина BOOT0 : если он высокий, MCU переходит в DFU, а если низкий, он сбрасывается во флэш-память.

1.3 Схема ванильного сброса

Наименее сложная схема сброса, которую мы можем использовать, на самом деле очень проста. От пользователя требуется только два взаимодействия: установка BOOT0 на низкий или высокий логический уровень и нажатие кнопки для запуска процесса аппаратного сброса через контакт nRST. В ссылке [2] на странице 30 показан очень простой, но эффективный способ добиться этого в эталонном проекте. Эта ванильная схема изображена на рисунке 2.

Рисунок 2. Схема ванильного сброса , рекомендованная ST в [2].

Эта схема очень проста и требует всего пару компонентов. Вытягивание nRST осуществляется простой кнопкой и конденсатором, чтобы избежать странных переходных процессов; выбор BOOT0 осуществляется с помощью селекторного переключателя. В некоторых нестандартных клавиатурах, таких как Стрелец, используется переключатель SPDT:

. Рисунок 3. Реализация схемы ванильного сброса в клавиатуре Sagittarius с использованием переключателя SPDT и кнопки.

На этих платах для прошивки MCU пользователь переводит SPDT в положение 1 и нажимает кнопку, переводя MCU в режим DFU. После прошивки MCU пользователь возвращает SPDT в положение 0 и снова нажимает кнопку.

На платах BluePill это делается с помощью простого переключателя-перемычки.

Рисунок 4. Реализация схемы ванильного сброса в панелях Blue Pill с использованием перемычки и кнопки.

Стандартную схему на рис. 1 можно немного изменить, чтобы сделать ее более надежной, добавив резистор 100 Ом последовательно с кнопкой nRST, чтобы избежать быстрых изменений напряжения на его конденсаторе, и добавив небольшой конденсатор 100 Ом на BOOT0, чтобы избежать любого быстрые переходные процессы, так как это вход типа CMOS.

Рисунок 5. Небольшая модификация оригинальной схемы сброса, рекомендованной ST.

1.4 Проблемы с ванильной схемой

У оригинальной схемы на рисунках 1 и 5 есть две проблемы. Во-первых, она требует от пользователя слишком много операций. Поверните SPDT на высокий уровень, нажмите кнопку, замигайте, поверните SPDT обратно на низкий уровень, снова нажмите кнопку. Это может сбить с толку некоторых людей и, в конечном итоге, может затруднить перепрошивку для людей, не разбирающихся в технологиях.

Второй — это двойного действия . Поскольку аппаратный сброс упирается в печатную плату, а для доступа к печатной плате необходимо вскрыть корпус (отвинтить, снять прокладки…), что занимает много времени, некоторые производители в сообществе любят, чтобы их клавиатурные пластины имели маленькое отверстие. так что к кнопке можно получить доступ с помощью небольшого инструмента, такого как карандаш, что позволяет пользователю легко сбросить микроконтроллер. Эта ванильная схема не допускает этого, потому что она двойного действия.

2 Новая схема сброса

В середине разработки SharkPCB пользователь по имени ishtob благословил меня частью своих знаний и поделился схемой сброса, над которой он работал. Вариант этой схемы изображен на рисунке 6.

Рисунок 6. Оригинальная схема сброса ishtob для STM32.

Схема довольно хитрая; идея состоит в том, что пользователю нужно будет взаимодействовать с печатной платой только один раз, чтобы заставить ее работать. При нажатии кнопки транзистор немедленно заземлит nRST; сброс и конденсатор с помощью BOOT0 сохранят напряжение. К тому времени, когда пользователь отпускает кнопку, BOOT0 заряжается, а nRST находится на низком уровне. Затем MCU переходит в режим загрузчика.

В отношении этой схемы есть два предостережения. Во-первых, диод абсолютно необходим; без него заряженное напряжение на конденсаторе BOOT0 может поддерживать проводимость транзистора, и MCU не будет сбрасываться до тех пор, пока BOOT0 не потеряет свое напряжение из-за распада резистора. Во-вторых, используемый транзистор должен иметь базовый резистор, иначе база и эмиттер будут закорочены — биполярный транзистор, по сути, представляет собой два диода, включенных друг к другу — и схема никогда не будет работать; использование транзистора с предварительным смещением (также известного как цифровой транзистор), такого как DTC123JK, помогает снизить количество компонентов благодаря встроенным резисторам.

Можно отметить, что эта схема выполняет только половину работы — она может перевести MCU в режим DFU, но не может сбросить программу. Ну, как выясняется, сброс MCU не нужен как таковой . Видите ли, QMK имеет возможности программного сброса, поэтому после прошивки MCU он автоматически сбрасывается. Пользователь также может сбросить MCU с помощью комбинации клавиш, используя функции Boot Magic QMK.

Схема творит чудеса. Он довольно прост, выполняет свою работу и требует нескольких компонентов; версии Alpha для SharkPCB и ArcticPCB используют его. Тем не менее, не рекомендуется полагаться исключительно на сброс программного обеспечения, и, как выясняется, это может быть довольно катастрофическим, поскольку блокировка аппаратного сброса может привести к блокировке MCU, переводя его в состояние с ошибкой, когда сброс программного обеспечения не отвечает.

2.1 Усовершенствование схемы иштоба

Чтобы добавить в схему возможность сброса и DFU, мне пришлось обратить свой взор на ветку BOOT0. Ветвь nRST была в значительной степени выяснена, поэтому мне нужно было изобрести способ модулировать, будет ли BOOT0 низким или высоким в тот момент, когда пользователь отпускает кнопку, то есть когда nRST возвращается к единице, а BOOT0 PIN-код опробован и выбран вариант загрузки.

То, что я сделал, было просто, но сложно. Добавление резистора между диодом и ветвью BOOT0 позволит RC-цепи BOOT0 действовать как RC-цепь с синхронизированной зарядкой, напряжение которой увеличивается с течением времени, пока кнопка удерживается нажатой.

Рисунок 6. Улучшение оригинальной схемы сброса ishtob.

Следовательно, идея здесь в том, что вариант загрузки MCU будет определяться тем, сколько времени пользователь держит кнопку нажатой. Если в течение короткого промежутка времени цепь BOOT0 RC не успеет зарядиться достаточно, чтобы считаться высокой, и MCU просто перезагрузится. Если кнопка удерживается достаточно долго, то BOOT0 зарядит достаточное напряжение, чтобы считаться высоким, и MCU войдет в режим DFU.

Форма и скорость заряда/распада вывода BOOT0 определяются компонентами R1, R2 и C1. Чем больше отношение R2 к R1, тем быстрее заряжается цепь и тем больше будет установившееся напряжение. Чем выше емкость, тем медленнее заряжается напряжение. Затем задача состоит в том, чтобы точно настроить значения так, чтобы необходимое время было удобным. Например, если заряд слишком быстрый, пользователь не сможет нажать и отпустить схему достаточно быстро, чтобы сбросить ее, и микроконтроллер всегда будет загружаться. Если заряд идет слишком медленно, то пользователю придется держать кнопку нажатой слишком долго.

Чтобы определить точное время, сначала нам нужно знать пороги логарифмического уровня вывода BOOT0. В даташите MCU [3]_ можно увидеть следующую таблицу:

Рис. 7. Таблица технических данных с минимальными и максимальными пороговыми значениями логического уровня напряжения.

Таблица показывает, что при питающем напряжении 3,3b BOOT0 считается низким для напряжений ниже 0,3 x 3,3 — 0,3 = 0,69 В и высоким для напряжений выше 0,2 x 3,3 + 0,95 = 1,61 В. Схема тумана 6 была смоделирована с помощью LTSpice XVII; результаты моделирования подробно описаны ниже.

Рисунок 8. Моделирование времени схемы на рисунке 6.

Моделирование показывает, что пока кнопка удерживается нажатой, напряжение BOOT0 пересекает максимальный порог низкого логического уровня примерно через 1 секунду и минимальный порог высокого логического уровня примерно через 1 секунду. 3,5 секунды. Другими словами, если кнопку удерживать нажатой менее секунды, MCU перезагрузится, а если удерживать нажатой более 3,5 секунд, MCU перейдет в режим DFU. Неизвестно, что происходит между 1 и 3,5 с, поскольку интерпретация логического уровня в этой зоне напряжения неопределенна.

2.2 Учет допусков компонентов

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

Определим, что резисторы имеют допуск 5%, а конденсаторы имеют допуск 20%. Прежде всего, поскольку ветвь nRST схемы просто тянет nRST на землю и очень быстро, здесь не так много анализа допусков компонентов. Настоящая проблема заключается в цепи RC-зарядки BOOT0.

Рассмотрим три случая сравнения:

  • (1) Номинальный корпус. Все компоненты имеют свои номинальные значения;
  • (2) «Медленный» кейс. C1 и R1 имеют максимально возможное значение 120 мкФ и 34,65 кОм, а R2 имеет минимальное значение 95 кОм; следовательно, этот вариант заряжается дольше всего;
  • (3) «Быстрый» кейс. В значительной степени противоположно медленному случаю: C1 и R1 имеют самые низкие значения 80 мкФ и 31,35 кОм, а R1 имеет самое высокое значение 105 кОм, что является самым быстрым из возможных вариантов зарядки.
Рис. 9. Временная симуляция схемы на рис. 6 с учетом допусков компонентов в «медленном» и «быстром» случаях.

На рис. 9 показано моделирование трех случаев. Моделирование показывает, что самое быстрое время, в течение которого схема пересекает максимальное пороговое значение низкого логического уровня, составляет примерно 0,75 с, а самое продолжительное время, которое потребуется схеме для пересечения минимального напряжения высокого логического уровня, составляет примерно 4,5 секунды. Это означает, что при использовании схемы на рисунке 7`, если пользователь нажимает кнопку не более 0,75 секунды, MCU гарантированно сбрасывается, а если он или она нажимает кнопку дольше 4,5 секунд, MCU гарантированно отключается. .

Однако эти времена мне не по душе. Как видно на рисунке 11, разброс по времени между кривыми слишком велик. Чтобы решить эту проблему, я изменил допуск резисторов на 1% и допуск конденсатора на 5%.

Рисунок 10. Усовершенствованная схема сброса с более жесткими допусками.

На рис. 10 показано моделирование той же схемы с более жесткими допусками, что намного лучше: теперь необходимое время для гарантированных низких и высоких уровней составляет 0,9. 4 секунды (что можно считать 1 с для времени реакции человека) и 3,8 секунды.

Рисунок 11. Моделирование времени схемы на рисунке 10, которая имеет более жесткие допуски компонентов.

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

3 Решение проблемы с выпиской

3.1 Описание проблемы с разрядкой

Схема на рисунке 7, как в номинальном «более свободном», так и в «более жестком» варианте, все еще имеет проблему: разрядка цепи BOOT0. Зарядка цепи, безусловно, служит нашей цели, но что происходит после того, как микроконтроллер сбросил или перешел в режим DFU? Конечно, цепь BOOT0 разряжается — энергия, заряженная в конденсаторе C1, уходит на землю через резистор R2. Однако скорость разряда этой схемы слишком низкая.

На рис. 12 показано моделирование схемы сброса во время и после нажатия кнопки. Это моделирование показывает, что после отпускания кнопки BOOT0 требуется 10 секунд, чтобы вернуться к низкому порогу логического уровня. Представьте себе следующую ситуацию: пользователь держит кнопку и переводит микроконтроллер в режим DFU, только чтобы понять, что это не было намерением, он действительно хотел только сбросить схему. Что ж, теперь они дают кнопку быстрого нажатия и, сюрприз: MCU все еще переходит в DFU, когда пользователь не держал кнопку. Поскольку контакт BOOT0 был заряжен, теперь они должны подождать 20 секунд, чтобы снова нажать.

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

Рис. 12. Моделирование схемы сброса на рис. 7 во время и после нажатия кнопки.

3.2 Использование MUN533

Для быстрой разрядки вывода BOOT0 используется дополнительный PNP-транзистор, образующий схему на рис. 13. Использование интегральной схемы MUN5335DW1T1G позволяет интегрировать как предварительно смещенный NPN-транзистор для вывода nRST, так транзистор PNP для разряда BOOT0 в том же корпусе SOT-23-6, с сохранением количества компонентов, как и в старой схеме без разряда.

Идея заключается в том, что когда кнопка отпущена, PNP-транзистор будет проводить и немедленно обнулит BOOT0, тем самым разряжая вывод BOOT0 и позволяя повторно активировать схему.

Рис. 13. Еще одно усовершенствование по сравнению со схемой сброса, на этот раз с разрядным транзистором для обеспечения разрядки при пониженном напряжении.

На рис. 13 показаны напряжения BOOT0 и NRST при нажатии и отпускании кнопки. Однако внимательный читатель сможет найти проблему в этой схеме: добавленный PNP-транзистор делает то, что должен; вывод BOOT0 с компонентом MUN действительно разряжается быстрее, чем без него. Однако добавление этого PNP-транзистора также связано с добавлением двух транзисторов, которые его смещают, оба являются внутренними по отношению к устройству MUN.

Эти транзисторы имеют два вредных эффекта.

  • Во-первых, резистор 47 кОм и резистор 2,3 кОм действуют параллельно с резистором 33 кОм, создавая гораздо более низкое параллельное сопротивление и влияя на схему заряда вывода BOOT0 таким образом, что он заряжается намного быстрее, чем в номинальном случае, что делает пользователь не может отпустить кнопку до того, как BOOT0 будет заряжен, что фактически лишает схему возможности сброса MCU;
  • Во-вторых, внутренние PNP-резисторы также создают путь, который обходит диод D1, который должен был препятствовать BOOT0 поддерживать заряд базы NPN-транзистора. С этим новым путем напряжение и база NPN сохраняются, в результате чего напряжение NRST не растет сразу, а требуется еще около секунды, чтобы снова подняться.
Рис. 14. Моделирование времени схемы на рис. 13 во время 5-секундного нажатия и отпускания кнопки, сравнение сигналов NRST и BOOT0 для этого случая и номинальной схемы на рис. 7

3.3 Использование UMF5N

Очевидным решением этой проблемы было бы использование PNP-транзистора без встроенных резисторов смещения. UMF5N компании ROHM Semiconductors представляет собой устройство, в котором размещены NPN с предварительным смещением и PNP без смещения, то есть NPN с внутренними транзисторами, а PNP без них.

Рис. 15. PNP-разрядная схема рис. 13 с использованием UMF5N, который содержит несмещенный PNP-транзистор.

На рис. 15 показано временное моделирование схемы. Поскольку UMF5N не имеет смещающих резисторов и, следовательно, не образует путь тока в обход диода D1, профиль зарядки BOOT0 остается таким же, как и в номинальном случае. Транзистор PNP выполняет работу по разрядке схемы намного быстрее, чем в номинальном случае, а напряжение NRST возрастает так же быстро, как и в номинальном случае.

Рисунок 16. Моделирование времени схемы на рисунке 15 с использованием устройства UMF5N, сравнивающее напряжение BOOT0 с номинальным случаем на рисунке 7.

3.4 Использование JFET

Я все еще не был вполне доволен тем, как устройство UMF5N решает проблему. Как видно из моделирования на рисунке 16, напряжение BOOT0 сильно падает в первые секунды после отпускания кнопки, но через некоторое время все еще выглядит так, как будто оно держит некоторое напряжение (примерно 0,3 В). Это связано с схемными характеристиками биполярного транзистора. Проще говоря, биполярный транзистор — это, по сути, два диода, построенных встречно-параллельно; это означает, что биполярный транзистор имеет экспоненциальную характеристику, так что чем ниже базовое напряжение, тем экспоненциально уменьшается ток коллектора. Через некоторое время, когда цепь BOOT0 уже разряжена, транзистор PNP не может проводить ток достаточно быстро, чтобы полностью разрядить BOOT0 до нуля вольт.

Решение, которое я нашел, заключалось в использовании транзистора JFET, который, как известно, является беспрецедентным аналоговым переключателем. Схема с JFET в качестве аналогового разрядного ключа показана на рисунке 17.

Рис. 17. Схема схемы разряд-возврат с использованием полевого транзистора J270 вместо биполярного транзистора для разряда BOOT0. Рис. 18. Схема схемы разряд-возврат с использованием полевого транзистора J270 вместо биполярного транзистора для разряда BOOT0.

Как показывает моделирование, JFET отлично справляется со своей задачей: он мгновенно заземляет BOOT0, немедленно разряжая его. Проблема в том, что… он слишком хорошо справляется со своей задачей. На рис. 19 показана увеличенная версия графика на рис. 18. График показывает, что JFET разряжает BOOT0 так быстро, что вывод достигает своего нижнего порогового значения даже до того, как nRST достигает своего высокого значения, что означает, что когда MCU производит выборку BOOT0 — после nRST достиг высокого логического уровня — BOOT0 уже будет в низком состоянии. Это означает, что схема никогда не перейдет в режим DFU, а только сбросится во flash!

Рисунок 19. Увеличенный фрагмент графика на рисунке 18, показывающий время нарастания и спада BOOT0 и nRST и их пороговые значения во время моделирования схемы с разряженным JFET на рисунке 17.

3.5 Сброс JFET с задержкой разряда

Чтобы отсрочить время разряда JFET, все, что необходимо, это добавить резистор к JFET, как показано на рисунке 20. Моделирование времени этой схемы до нажатия, удерживания и отпускания кнопки показано на рисунке 21.

Рис. 20. Схема схемы сброса с использованием механизма JFET с задержкой разряда. Рисунок 21. Моделирование времени схемы механизма JFET с задержкой разряда на рисунке 20.

Эта схема проста, но гениальна. То, что здесь происходит, довольно сложно, но так просто. JFET действует как переключатель, который коммутирует зарядку и разрядку RC-цепи BOOT0, как показано на рис. 22.

Рис. 22. Упрощенная схема схемы сброса с использованием механизма полевого транзистора с задержкой разряда, показывающая полевой транзистор в виде переключателя разрядного резистора.

Когда нажата кнопка и цепь BOOT0 заряжается, полевой транзистор JFET не проводит ток, и резистор 1 МОм используется для медленной зарядки цепи, соблюдая расчетное время пересечения, которое мы видели ранее; на самом деле, JFET проводит настолько небольшой ток, что резистор 10 кОм практически отсутствует. Когда кнопка отпущена, полевой транзистор JFET начинает проводить ток, а резистор 10 кОм замыкается на землю, образуя параллельное сопротивление с сопротивлением 1 МОм. Поскольку первое намного меньше второго, результирующее параллельное сопротивление очень близко к 10 кОм.

Итак, в конце JFET действует как переключатель, который коммутирует резисторы; при нажатии кнопки цепь заряжается с большим сопротивлением 1 МОм и, следовательно, заряжается медленно. При отпускании кнопки схема «меняет» сопротивление RC до 10 кОм, что приводит к быстрой разрядке.

Значение 10 кОм выбрано не случайно. Было выбрано, чтобы оно было намного меньше 1 МОм, что дает эффект коммутации заряда/разряда да, но оно также было выбрано таким образом, чтобы разряд JFET задерживался таким образом, чтобы вывод nRST успел достичь высокого логического уровня до BOOT0. полностью разряжен. На рис. 23 показан временной график временного моделирования схемы JFET с задержкой разряда с резистором 10 кОм.

Рис. 23. Упрощение схемы схемы сброса с использованием механизма полевого транзистора с задержкой разряда, показывающего полевой транзистор в виде переключателя разрядного резистора.

Как видно из графика, отложенный разряд позволяет схеме иметь примерно 25-миллисекундное время между достижением nRST высокого логического уровня и разрядкой BOOT0 до высокого логического порога, что более чем достаточно. Помните, что, согласно техническому описанию, вывод BOOT0 замеряется при четвертом нарастании тактового сигнала MCU, когда nRST имеет высокий уровень; поскольку MCU работает на частоте 72 мегагерца, время в 25 миллисекунд вполне разумно.

Наконец, что касается значения R4, почти любое значение между 2 кОм и 10 кОм даст правдоподобный результат. На следующем графике показано моделирование времени спада BOOT0 в цепи с несколькими значениями R4 в диапазоне от 0 до 10 кОм с шагом 1 кОм. Естественно, чем больше значение R4, тем медленнее разрядка и тем больше времени у MCU для выборки BOOT0 в высокий момент времени.

Рис. 24. Параметрические графики временной симуляции схемы замедленного разряда JFET на рис. 21 с несколькими значениями разрядного резистора.

На рис. 25 показан параметрический график доступного времени, в течение которого MCU должен отбирать BOOT0 как высокий уровень, то есть разница во времени между мгновенным повышением напряжения nRST до порога высокого логического уровня и моментом времени, когда напряжение BOOT0 падает до своего высокий логический порог, как функция сопротивления R4. Как мы видели ранее, при 0 кОм доступное время отрицательно, то есть BOOT0 падает ниже высокого логического уровня до того, как nRST достигает своего высокого логического уровня. Это уравновешивается примерно 1 кОм (точнее, 1,021 кОм), когда доступное время равно нулю, то есть BOOT0 и nRST одновременно достигают своих пороговых значений высокого уровня. При 2 кОм доступное время составляет 2,8559.миллисекунд — достаточно само по себе. Причина, по которой я выбрал 10 кОм, заключается в том, что это дает очень хороший запас для работы с допусками компонентов и является хорошим значением для более жестких допусков.

Рис. 25. Параметрический график, показывающий доступное время, которое MCU должен взять на выборку высокого логического уровня BOOT0 после того, как nRST установил высокий уровень, в зависимости от разрядного резистора.

5 МОП-транзистор версии

Есть две небольшие проблемы с обсуждаемыми здесь цепями сброса. Во-первых, некоторые люди могут счесть использование JFET немного сложным, потому что это странная часть (хотя его использование в качестве переключателя, управляемого напряжением, надежно). Во-вторых, и это наиболее важно, как NPN-транзистор с предварительным смещением, так и используемый JFET являются расширенными частями в службе сборки JLCPCB. Давайте сделаем краткое объяснение, почему это может быть проблемой.

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

  • Основные детали — это компоненты, которые очень часто используются конструкторами, поэтому JLCPCB имеет линейку подъемно-транспортных машин, в которых эти детали предварительно загружены и готовы к использованию. Использование этих деталей довольно просто и недорого, и кроме стоимости детали и платы за пайку не взимается никакой платы;
  • Расширенные детали — это детали, которые, хотя и фигурируют в списке деталей, предварительно не загружены в машины, а это означает, что сотрудник JLC должен загрузить их в машины; следовательно, за расширенные детали JLC взимает комиссию в размере 3 долларов США сверх стоимости деталей и платы за пайку (это за уникальные расширенные детали, поэтому, если у вас есть, скажем, два расширенных компонента на одной и той же печатной плате, которые имеют один и тот же номер детали, плата в размере 3 долларов США взимается только один раз).

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

5.1 Замена BJT

Заменить биполярный транзистор в качестве переключателя несложно; можно использовать полевой МОП-транзистор 2N7002 с парой резисторов. Резистор на 10 кОм можно не использовать, но рекомендуется оставить его, так как дополнительные затраты незначительны. Преимущество здесь, конечно, в том, что 2N7002 является базовой деталью и стоит несколько центов за штуку.

Рис. 26. МОП-транзистор , эквивалентный используемому биполярному транзистору с предварительным смещением.

При использовании этого полевого МОП-транзистора схема «улучшенного сброса» будет такой, как показано на рис. 27.

Рис. 27. Схема «Улучшенный сброс» с использованием полевого МОП-транзистора, эквивалентного биполярному транзистору с предварительным смещением.

5.2 Замена JFET

Теперь к большому вопросу: замена JFET. Как упоминалось ранее, большое преимущество использования P-канального JFET заключается в том, что он действует почти как идеальный переключатель при работе с логикой активного низкого уровня, то есть проводит, когда его вход затвора равен нулю, что немного сложно воспроизвести. . Даже PNP или P-канальный MOS не будут работать одинаково, так как оба требуют некоторого соединения от моста к эмиттеру (в случае BJT) или затвора и истока (в случае MOS), что неизбежно приведет к дисбалансу. схема очень похожа на MUN533 и UMF5N. Единственный способ воспроизвести это поведение — использовать 9схема драйвера 0089 , то есть вспомогательная схема, предназначенная для управления PMOS или PNP-транзистором; в своих простейших формах эта схема драйвера обычно проявляется как инвертирующий усилитель (с общим истоком или общим эмиттером) с некоторой схемой защиты.

Как можно догадаться, это не идеально. У нас уже есть хороший набор компонентов в схеме, и добавление большего количества было бы не идеальным. Однако нам повезло: можно определить, что полевой МОП-транзистор, используемый для управления nRST, уже является инвертирующим усилителем; чтобы дать схемам BOOT0 и nRST некоторую изоляцию, мы используем высокоомный резистор, который, в свою очередь, завершается схемой сброса «улучшенный двойной MOSFET с задержкой разряда» (это полный рот), изображенной на рисунке 28. Как всегда, синие компоненты не обязательны, но рекомендуются.

Рис. 28. Схема сброса «Двойной полевой МОП-транзистор с улучшенной задержкой разряда».

Теперь вопрос: насколько хорошо MOSFET приближается к аналоговому переключателю JFET? На рис. 29 показано временное моделирование обеих цепей с переменными значениями разрядного резистора (R4 на обоих рисунках 28 и 20). Значения находятся в диапазоне от \(1\text{k}\Omega\) до \(100\text{k}\Omega\) с 21 логарифмическим интервалом.

Рис. 29. Сравнение временного моделирования между схемами сброса с двойной задержкой MOSFET и JFET с задержкой.

Как видно из рисунка, характеристики моделирования обеих схем настолько близки, что их почти невозможно различить; это приводит к тому, что мы сохраняем то же значение разрядного резистора, \(10\text{k}\Omega\).

6 Заключение

В статье представлены разработка и моделирование различных возможных схем сброса, четыре из которых являются жизнеспособными, что означает, что они могут надежно управлять микроконтроллером как для сброса, так и для режима DFU. На вкладках ниже показаны эти схемы сброса в сравнении друг с другом.

Ванильный сброс

Улучшенный сброс (MOS)

Улучшенный сброс (BJT)

Сброс с отложенным разрядом

6.1 Какую схему следует использовать?

Во-первых, цена и доступность 27000 — отличная причина просто принять эти варианты. Они дешевле, проще в реализации, а полевые МОП-транзисторы 2N7002 доступны сотнями тысяч у многих производителей; Единственным недостатком является нехватка места, потому что там, где у DTC123JKAT146 были встроенные резисторы, 2N7002 для работы нужны внешние резисторы. Поскольку эти резисторы не проводят ток питания, вы можете безопасно использовать небольшие корпуса, такие как резисторы 0402.

При этом возникают четыре возможности: «ванильный» сброс, «улучшенный сброс» (как версия MOSFET на рис. 27, так и версия BJT на рис. 10) и «двойной MOSFET» на рис. 28. Столкнувшись с этими многочисленными возможности можно было бы спросить, что является лучшим или что они должны использовать. Хотя я не знаю, есть ли схема «лучше» или «хуже», у каждой из них есть свои преимущества и недостатки:

  • Схема «ванильный сброс» на сегодняшний день самая простая. Он наиболее надежен и прост в реализации и требует нескольких простых компонентов. Однако тот факт, что для прошивки и сброса требуется довольно сложная процедура, делает его неидеальным для удобства использования пользователем; еще раз, тот факт, что это не одно действие и требует нескольких шагов для работы, может быть проблемой при устранении неполадок и эксплуатации для обычных неопытных пользователей;
  • Схема «улучшенного сброса» — это начальная реализация механизма зарядки BOOT0, где короткое нажатие кнопки — это сброс, а долгое нажатие переводит MCU в режим DFU. Он довольно сложен и требует наличия прецизионных резисторов с допуском 1% и конденсатора с допуском 5% в цепи BOOT0, чтобы быть надежным, но обеспечивает однократное действие, предложенное в этой статье, с дешевыми и достаточно простыми компонентами. Проблема здесь в том, что каждая активация этой схемы должна происходить примерно через 30 секунд из-за того, что схеме BOOT0 требуется время для разрядки. Есть два варианта этой схемы:
    • Версия MOSFET (рис. 27) является предпочтительным выбором из-за цены и доступности MOSFET по сравнению с дорогим и более ограниченным биполярным транзистором с предварительным смещением; это особенно верно, если вы используете службу прототипирования JLCPCB, где 2N7000 является базовой частью, а все BJT с предварительным смещением являются расширенными частями (следовательно, более дорогими в использовании)
    • Версия BJT может быть немного дорогой и менее доступной, но имеет огромное преимущество, когда дело доходит до разнообразия. Существует множество различных транзисторов BJT с предварительным смещением в различных корпусах; он не только объединяет резисторы смещения (которые вы должны добавить отдельно в схему MOSFET), компонент 27000 доступен только в корпусе SOT-23, тогда как предварительно смещенные биполярные транзисторы можно найти в крошечных корпусах;
    • Обе версии полностью взаимозаменяемы по производительности, так что используйте их на свое усмотрение; сам (Gondolindrim) я очень одобряю версию BJT, так как я паял свои прототипы дома, а это означает, что мне не нужно припаивать дополнительные резисторы.
  • Схема «двойной полевой МОП-транзистор» на рис. 28 является наиболее удобной для пользователя, поскольку она реализует разряд, необходимый для надежной повторной работы механизма заряда и разряда BOOT0 — тот факт, что выполняется отложенный разряд, означает, что схема сразу же разряжается после отпускания кнопки, что означает, что пользователь может быстро нажимать кнопку, и схема будет работать каждый раз без проблем, обеспечивая обещание «действительно одиночного» действия. Эта схема заменяет схему JFET на рис. 20; честно, не используйте их. JFET — это очень специфические компоненты, используемые в небольшом количестве конструкций, где они абсолютно необходимы; их трудно найти, и они довольно дороги. Просто не надо.
    • Большое предупреждение заключается в том, что хотя схема «улучшенного сброса» имеет два взаимозаменяемых варианта (BJT и MOSFET), здесь это не так. Дело в том, что MOSFET является гораздо лучшим электронным переключателем, чем BJT, потому что BJT медленный и для работы ему нужен базовый ток; это означает, что если используется BJT, будь то в частях схемы BOOT0 или nRST, таймины сбиваются, и это не работает.

Использование каждой схемы, конечно же, остается на усмотрение разработчика; мой личный опыт и мнение таковы, что ванильная схема подходит для прототипирования или если печатная плата, которую вы разрабатываете, является личным проектом и не предназначена для массового производства и продажи. Если целью является удобство использования и массовая продажа, я определенно рекомендую использовать схему замедленного разряда JFET. За дополнительные 20 центов вы получаете надежную схему однократного действия, которая каждый раз работает как положено, в отличие от «улучшенной перезагрузки», которая, хотя и является однократной, может быть использована неправильно, если пользователь недостаточно терпелив, чтобы подождать 30 секунд для каждое действие или просто не знает о его функционировании. Я считаю, что продукт не должен разрабатываться, предполагая, что пользователь знает его внутреннюю работу, поэтому я рекомендую схему замедленного разряда.

6.2 Компоненты с жесткими допусками

Другой возможный вопрос, который может возникнуть: действительно ли необходимы компоненты с более жесткими допусками в цепи заряда BOOT0 ? Верный ответ — нет. Временная диаграмма на рис. 9 показывает, что вполне возможно выполнить сброс и DFU микроконтроллера без специальных компонентов с жестким допуском. Единственное отличие реального от схемы, в которой используются компоненты с общими допусками, и схемы, в которой используются компоненты с более жесткими допусками, — это просто необходимое гарантированное время. Например, при нормальных допусках MCU гарантированно сбрасывается, если кнопка отпускается менее чем через 0,7 секунды после нажатия, а DFU гарантирует, что кнопка удерживается не менее 4,6 секунды.

Использование более жестких допусков компонентов дает вам два преимущества.

Во-первых, время сброса тома и DFU немного более разумно — сбросить отпускание менее чем за секунду нажатия и удерживать DFU не менее 3,8 секунды. Проклятие характеристики экспоненциального роста схемы зарядки означает, что если вы попытаетесь увеличить время сброса, например, до секунды, время DFU также будет на намного больше на ; если вы попытаетесь сократить время DFU, время сброса будет равно 9. 0089 намного короче . Это означает, что с обычными допусками очень сложно настроить время сброса и DFU, потому что попытка настроить одно будет экспоненциально (буквально) влиять на другое. Однако при более жестких допусках изменение по-прежнему экспоненциальное; но поскольку неопределенность параметра намного меньше, эффект не так велик.

Чтобы проиллюстрировать это преимущество, представьте себе обычную последовательную RC-цепь с источником постоянного напряжения \(V_S\). Тогда время заряда напряжения конденсатора равно 9{-\влево(\dfrac{t}{RC}\вправо)} \]

Следовательно, время \(T\), которое требуется конденсатору для достижения напряжения \(V\), равно

\[ T = — RC\ln\left(1 — \dfrac{V}{V_S}\right) \]

Теперь представьте, что \(R\) и \(C\) изменяются с неопределенностями \(\Delta R\) и \(\Delta C\), то есть

\[ R = R_0 \pm \Delta R,\ C = C_0 \pm \Delta C \]

Назовите \(T_0\) номинальное время достижения напряжения \(V\), то есть конденсатор достиг бы этого напряжения, если бы компоненты были идеальными: 92} \]

Внимательный читатель может определить это как эллиптический параболоид в переменных \(\Delta T\), \(\Delta R\) и \(\Delta C\). Это означает, что временная неопределенность \(\Delta T\) увеличивается на параболически на с погрешностями резистора и конденсатора, что показывает, что временная неопределенность очень, очень чувствительна к этим величинам.

Заинтересованный читатель может также вычислить частные производные чувствительности \(\Delta T\) по \(\Delta R\) и \(\Delta C\), что докажет параболический рост чувствительности.

Если читатель все еще не верит, давайте рассчитаем чувствительность времени в терминах этой последней формулы. Если мы используем общие допуски, то есть

\[ \dfrac{\Delta R}{R} = 0,05, \ \dfrac{\Delta C}{C} = 0,2 \]

Тогда нормированная временная неопределенность равна 20,62%. Если используются более жесткие допуски, то есть

\[ \dfrac{\Delta R}{R} = 0,01, \ \dfrac{\Delta C}{C} = 0,05 \]

Тогда погрешность времени равна 5,10%.

Эти расчеты объясняют второе преимущество, которое дает вам эта схема; это преимущество глубже и менее заметно, но гораздо важнее: надежность. Предположим, вы используете схему с обычными допусками в производственном цикле из 1000 единиц. Поскольку каждая печатная плата имеет разные значения емкости и сопротивления, каждая печатная плата имеет разную кривую зарядки по времени; что я могу гарантировать, так это то, что эта кривая всегда находится между желтой кривой «быстрого случая» и розовой кривой «медленного случая» на рисунке 9., и что время зарядки между печатными платами будет варьироваться в пределах 20,62%. Это означает, что фактическое время резервирования и DFU может сильно различаться между печатными платами. С другой стороны, если вы используете более жесткие допуски, кривая зарядки будет ограничена между быстрой и медленной кривыми на рисунке 10, которые расположены гораздо ближе друг к другу; следовательно, фактические тайминги каждой печатной платы будут немного различаться (в пределах 5,1%, что гораздо более допустимо), в отличие от больших вариаций, которые вы получили бы, если бы использовали более распространенные допуски. Тот факт, что схема более предсказуема и менее изменчива, следовательно, более надежный — означает, что поведение схемы будет более однородным для всех производственных единиц, то есть, в то время как компоненты с нормальным допуском будут давать каждой единице очень разное время, более жесткий допуск гарантирует, что все блоки печатной платы будут находиться под нагрузкой. очень строгая маржа. Это, в свою очередь, гарантирует, что ваш продукт намного ближе к спецификациям.

Мое мнение и опыт по этому вопросу таковы: используйте посадочные места компонентов, чтобы компоненты с общим допуском и компоненты с более жесткими допусками имели одни и те же посадочные места; например, используйте резистор 1206 и посадочное место конденсатора 0805, так как есть резисторы 1206 как 5%, так и 1%, как и конденсаторы 0805 20% и 5%. Таким образом, вы можете снизить стоимость прототипа, используя более распространенные допуски, а в окончательном, более отшлифованном продукте вы используете компоненты с более жесткими допусками, потому что в больших масштабах цена за печатную плату будет незначительно увеличена, в то время как схема будет намного дороже. более надежным и удобным для пользователя.

Каталожные номера

[1] STM32F0x1/STM32F0x2/STM32F0x8 Справочное руководство по расширенным 32-разрядным микроконтроллерам серии ARM . Доступно по этой ссылке. Последнее посещение 22 июня 2020 г.

[2] Начало работы с аппаратной разработкой STM32F0x1/x2/x8 . Доступно по этой ссылке. Последнее посещение 22 июня 2020 г.

[3] Техническое описание микроконтроллеров STM32F072xB / STM32F072x8 . Доступно по этой ссылке. Последний доступ 22 июня 2020 г.

ST-Link V2 Внутрисхемный программатор и отладчик ST-Link Mini STM для STM8 и STM32 — с крышкой

Описание:

Mini ST-Link V2 — недорогое решение для внутрисхемной отладки и программирования STM8 и STM32 Серия микроконтроллеров STM32. Это устройство обязательно пригодится, когда вы столкнетесь с очень популярным микроконтроллером STM.

Он поставляется в виде одного USB-накопителя, защищенного алюминиевым корпусом с крышкой и оснащенного 4-контактной перемычкой типа «мама-мама». Его загрузчик DFU обеспечивает необходимое обновление прошивки для поддержки большего количества устройств в будущем; просто отключите / снова подключите USB, чтобы запустить процесс DFU. Он даже имеет выход с двойным напряжением (3,3 В/5 В) для легкой отладки/программирования. Определенный must-have для всех энтузиастов программирования!

 

Особенности:

  • Программирование поддерживает FLASH ROM, EEPROM, AFR и т. д.
  • Отладка на полной скорости, пошаговая, точки останова, просмотр переменных и регистров и т. д.
  • Интерфейс USB для прямого подключения к ПК
  • Полноскоростной USB 2.0-совместимый
  • Обновляемая прошивка
  • Автоматическое обновление прошивки с официального ПО ST-Link
  • Встроенный самовосстанавливающийся предохранитель 500 мА для защиты от короткого замыкания
  • Двойной выход напряжения (3,3 В/5 В)
  • Красный и синий светодиодный индикатор, мигает во время связи с ПК
  • 4-жильный соединительный кабель «гнездо-гнездо», 20 см

 

Поддерживаемое программное обеспечение:

  • Утилита ST-LINK v2. 0 (или выше)
  • Версия STDV 4.2.1 (или выше)
  • STVP версии 3.2.3 (или выше)
  • IAR EWARM, версия v6.20 (или выше)
  • IAR EWSTM8, версия v1.30 (или выше)
  • KEIL RVMDK, версия v4.21 (или более поздняя версия)

 

Поддерживаемые устройства:

  • Все устройства STM8 с интерфейсом SWIM
  • Все устройства STM32 с интерфейсом SWD

 

Технические характеристики:

  • SWD Диапазон напряжения: 1,65–3,6 В
  • Диапазон напряжения для плавания: 1,65–5,5 В
  • Поддержка SWV: нет
  • Интерфейсы отладки: 2
  • Светодиодный индикатор: Двухцветный светодиод (красный и синий)
  • Предохранитель: самовосстанавливающийся предохранитель 500 мА

 

Комплектация:

  • 1 x ST-Link V2 ST-Link Mini
  • 1x 4-контактная перемычка типа «мама-мама»

Австралийские заказы

Мы отправляем по всей Австралии на все адреса, включая абонентский ящик, почтовый ящик и т. д. Ниже перечислены следующие доступные варианты доставки:

  • Стандартная доставка — бесплатно до 35 австралийских долларов) — отправляется стандартной почтой с печатью Почты Австралии, этот вариант доставки не предусматривает отслеживание и поддержку, кроме сообщений от Phipps Electronics, подтверждающих, что посылка была отправлена ​​Почтой Австралии.
  • Доставка посылок (более высокая стоимость / более крупные заказы на сумму более 35 австралийских долларов или почтовые расходы оплачиваются при оформлении заказа) — отправляется через службу посылок Почты Австралии или курьерскую службу, этот вариант доставки имеет полное отслеживание.
  • Экспресс-почта — отправляется экспресс-почтой Австралии, этот вариант доставки имеет полное отслеживание.

В приведенной ниже таблице приведены расчетные сроки доставки австралийских заказов. Эти оценки основаны на недавних показателях доставки почты Австралии и не учитывают какие-либо текущие сбои, которые могут повлиять на время доставки.

Государство Штампованные почтовые отправления Почтовые посылки Экспресс-почта
Новый Южный Уэльс До 4 рабочих дней 2–4 рабочих дня 1–2 рабочих дня
ВИК 3–6 рабочих дней 3–5 рабочих дней 2–3 рабочих дня
QLD 3–6 рабочих дней 3–5 рабочих дней 2-3 рабочих дня
SA 4–7 рабочих дней 4–6 рабочих дней 2–3 рабочих дня
WA 6–12 рабочих дней 6–8 рабочих дней 2–3 рабочих дня
TAS 5-7 рабочих дней 5-6 рабочих дней 2-3 рабочих дня
ACT 3–6 рабочих дней 2–4 рабочих дня 1-2 рабочих дня
NT 7–12 рабочих дней 7–10 рабочих дней 3–4 рабочих дня

 

Заказы в Новой Зеландии

Мы отправляем в Новую Зеландию на все адреса, включая абонентские ящики. Посылки, отправленные в Новую Зеландию, отправляются почтой Австралии с двумя доступными вариантами доставки.

  • Стандартная посылка
  • Экспресс-посылка

В таблице ниже приведены расчетные сроки доставки заказов в Новую Зеландию. Эти оценки основаны на недавних показателях доставки почты Австралии и не учитывают какие-либо текущие сбои, которые могут повлиять на время доставки.

Страна Стандартная посылка Экспресс-посылка
Новая Зеландия 7–12 рабочих дней 5–8 рабочих дней

 

Международные заказы

Мы отправляем заказы в большинство стран мира, могут быть ограничения на адреса, на которые они могут быть доставлены, в зависимости от каждой отдельной страны. Заказы отправляются Почтой Австралии. В тех редких случаях, когда Почта Австралии не может доставить товар в выбранную страну, мы попытаемся отправить его другой службой доставки.

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

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