Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кармин Новиелло - Освоение STM32.pdf
Скачиваний:
2743
Добавлен:
23.09.2021
Размер:
47.68 Mб
Скачать

Начало работы над новым проектом

751

Прочитайте внимательно

Как было сказано ранее, для интерфейса SWD требуется всего два вывода. Они называются SWDIO и SWDCLK. Вы можете легко идентифицировать их с помощью CubeMX (подробнее об этом позже) или загрузив нужное техническое описание на ваш микроконтроллер. Однако настоятельно рекомендуется использовать также вывод NRST для отладки. Это необходимо, поскольку микроконтроллеры STM32 позволяют изменять функциональность выводов SWD как по желанию в проекте, так и из-за недопустимого состояния микропрограммы после возникновения условия сбоя (например, недопустимый доступ к памяти повредил периферийную память). Без трассирования сигнала NRST на порт отладки невозможно подключиться к целевому микроконтроллеру «при сбросе», который сбрасывает микроконтроллер всего за несколько циклов ЦПУ до того, как микроконтроллер будет помещен в режим отладки. Это действительно поможет вам в некоторых критических ситуациях. Поэтому, чтобы продолжить, всегда разводите на «разъеме отладки» вашей платы, по крайней мере, выводы SWDIO, SWDCLK и NRST, а также VDD и GND.

27.1.7. Режим начальной загрузки

В зависимости от конкретной модели микроконтроллера, которую вы собираетесь использовать в своем проекте, микроконтроллеры STM32 могут загружать микропрограмму из разных источников: внутренняя или внешняя Flash-память, внутреннее или внешнее SDRAM, USART и USB являются наиболее распространенными источниками для запуска выполнения микропрограммы. Это в действительности захватывающая возможность данной платформы, описанная в Главе 22.

Это возможно благодаря тому, что в системной памяти (System memory) предварительно запрограммированы несколько загрузчиков (подобласть области кода, начинающаяся с 0x1FFF F000) во время производства микроконтроллера. Каждый загрузчик можно выбрать, сконфигурировав один или два вывода, называющиеся BOOT0 и BOOT113.

Поведение по умолчанию, то есть обычная загрузка с внутренней Flash-памяти, достигается как минимум путем заземления вывода BOOT0 и оставления плавающим вывода BOOT1 (если он есть). Как только микропрограмма начнет выполнение, вы можете повторно использовать выводы BOOT в качестве I/O общего назначения.

27.1.8. Обратите внимание на совместимость с выводами…

Большинство микроконтроллеров STM32 спроектированы так, чтобы быть совместимыми с выводами других микроконтроллеров той же серии и между разными сериями. Это позволяет вам «просто» перейти на менее/более производительную модель в случае, если вам нужно адаптировать свой проект по бюджетным причинам или если вы ищете более мощный микроконтроллер.

Однако совместимость выводов – это возможность, которую необходимо запланировать в процессе выбора микроконтроллера, даже для микроконтроллеров, принадлежащих к одной и той же серии STM32. Рассмотрим следующий пример14. Предположим, вы

13Фактическая реализация данных выводов зависит от конкретной серии STM32. Например, STM32F030 предоставляет только вывод BOOT0 и заменяет вывод BOOT1 определенным битом внутри области памяти

байтов конфигурации (Option Bytes).

14Этот пример основан на реальной и грустной истории, произошедшей с автором книги :-)

Начало работы над новым проектом

752

решили использовать микроконтроллер STM32 из каталога STM32F030, и предположим, что вы выбрали микроконтроллер STM32F030R8, который установлен в STM32F030 Nucleo. Когда проектирование платы завершено и gerber-файлы отправлены на фабрику печатных плат, вы начинаете разработку микропрограммы (это часто случается, особенно если вам нужно завершить проект за день до того, как вы начинаете его разработку). Через некоторое время вы обнаруживаете, что 8 КБ SRAM, предоставляемых этим микроконтроллером, недостаточно для вашего проекта. Поэтому вы решаете перейти на модель STM32F030RC, которая предоставляет 32 КБ SRAM и 256 КБ внутренней Flash-памяти. Однако после нескольких часов попыток понять, почему вы не можете загрузить на него микропрограмму, вы обнаружите, что для этой модели требуются два дополнительных источника питания (PF4, PF5, PF6 и PF7), как вы можете видеть на

рисунке 7.

Рисунок 7. Микроконтроллер STM32F030RC требует два дополнительных источников питания в

сравнении с STM32F030R8

Так как избежать подобных ошибок? Лучший вариант – спланировать наихудший случай. В этом конкретном случае вы можете сделать такую разводку своей платы, которая соединяет эти выводы (PF4, PF5, PF6 и PF7) с источниками питания, несмотря на то что вы собираетесь использовать модель STM32F030R8 (поскольку данные выводы являются выводами I/O общего назначения, то это нормально – подключить их к VDD и VSS параллельно с развязывающими конденсаторами).

27.1.9. …и на выбор подходящей периферии

Большинство микроконтроллеров STM32 имеют несколько периферийных устройств определенного типа (SPI1, SPI2 и т. д.). Это хорошо для сложных проектов с несколькими модулями, но следует проявлять особую осторожность при выборе периферийных устройств даже для простых проектов. И это не только проблема, связанная с выделением I/O. Например, предположим, что вы основываете свой проект на микроконтроллере STM32F030, и предположим, что вашему проекту нужны UART и интерфейс SPI. Вы решили использовать периферийные устройства UART1 и SPI2. Во время разработки микропрограммы, по соображениям производительности, вы решаете использовать их оба в режиме DMA. Однако, посмотрев на таблицу 1 в Главе 9, вы увидите, что нельзя одновременно использовать SPI2_TX и USART1_RX в режиме DMA (они используют один и

Начало работы над новым проектом

753

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

Если вы проектируете устройство, которое будет переходить в более глубокие спящие режимы, такие как режим ожидания, и вы хотите, чтобы ваше устройство было пробуждено пользователем (возможно, нажатием специальной кнопки), то помните, что обычно всего два I/O могут быть использованы для этой задачи (они называются выводами пробуждения (wake up pins)). Так что избегайте назначения этих выводов для других целей.

27.1.10. Роль CubeMX на этапе проектирования платы

Довольно часто я говорю с людьми о CubeMX. Многие из них неправильно понимают, что такое CubeMX. Некоторые считают его совершенно бесполезным инструментом. Другие ограничивают его использование стадией разработки программного обеспече-

ния. Нет ничего хуже этого.

CubeMX, вероятно, более полезен в процессе проектирования оборудования (как при составлении схем, так и при разводке платы), чем на этапе разработки микропрограммы. Как только вы познакомитесь с CubeHAL, вы перестанете использовать CubeMX в качестве инструмента для генерации проекта для IDE15. Но CubeMX важен на этапе проектирования, если вы не собираетесь повторно использовать предыдущие проекты или всегда основывать свои проекты всего на нескольких типах микроконтроллеров

STM32.

Самая важная часть CubeMX при проектировании платы – это представление Chip. Благодаря этому представлению вы можете мысленно «просмотреть» разводку микроконтроллерной части и, в конечном итоге, принять различные стратегии разводки.

CubeMX – это инструмент, который можно использовать итеративно. Позвольте мне лучше пояснить эту концепцию на примере. Предположим, что вам нужно спроектировать плату на базе микроконтроллера STM32F030C8Tx. Это микроконтроллер LQFP-48 из линейки F0. Предположим также, что вам нужно использовать:

Два интерфейса SPI (SPI1 и SPI2).

Интерфейс I²C (I2C1).

Внешний низкочастотный источник тактового сигнала (LSE).

Пять GPIO.

Интерфейс UART (UART2).

После того, как вы начали новый проект с этим микроконтроллером, CubeMX покажет вам изображение микроконтроллера в представлении Chip, как показано на рисунке 8.

15 Честно говоря, то, что генерирует CubeMX, не очень хорошо с точки зрения организации проекта.

Начало работы над новым проектом

754

Рисунок 8: CubeMX показывает графическое изображение микроконтроллера при запуске нового проекта

Оно сразу дает вам понимание трех фактов:

Вы можете быстро определить, что вашей плате потребуется 6 развязывающих конденсаторов, 5 – для источников питания (4x100 нФ + 1x4,7 мФ) и 1x100 нФ для вывода NRST.

PIN7 – это вывод NRST, и он должен быть развязан.

PIN44 – это вывод BOOT0, и он должен быть подтянут к земле.

Прочитайте внимательно

Никогда не забывайте подтягивать к земле вывод BOOT0 с помощью подтягивающего резистора (это уменьшит утечку мощности). Очень распространенная ошибка новичков в данной платформе – оставлять этот вывод неподключенным или, что еще хуже, подключать его к источнику напряжения. Разработчики оборудования STM32 делятся на две группы: те, кто забыл привязать BOOT0 к земле, и те, кто забудет это сделать.

Следующий шаг включает в себя включение всех необходимых периферийных устройств, LSE и интерфейса SWD, оставляя пока что 5 GPIO. Получаем в CubeMX изображение, как показано на рисунке 9:

Рисунок 9: Как CubeMX показывает микроконтроллер при включении новых периферийных устройств