Меню

Ток потребления микроконтроллера stm32

STM32 — энергосбережение и WatchDog

В статье описано использование различных режимов энергосбережения и сторожевых таймеров в микроконтроллере stm32 с библиотекой HAL.

Действия будут производится на плате Discovery F3, на ней есть разъём для подключения амперметра…

Схема питания микроконтроллера stm32F3 выглядит следующим образом…

VDDA domain

HSI, LSI, PLL, АЦП, ЦАП, температурный датчик, OPAMP, COMP и Reset block. Питается от входов Vssa и Vdda .

На некоторых МК есть вход Vref , это опорное напряжение для АЦП.

VDD domain

Напряжение подаваемое на входы Vdd и Vss питает различную периферию (GPIO, UART и т.д.), логику WakeUp, независимый WatchDog (IWDG), и проходя через встроенный регулятор напряжения (который понижает напряжение до 1.8V) запитывает ядро.

RTC domain

RTC, внешний кварц для часов (32.768кГц), LSE и Backup-регистры.

В обычном режиме RTC domain питается от Vdd , если же напряжение пропадает (за этим следит «детектор низкого напряжения»), то происходит переключение на резервный источник — Vbat.

Если батарейка не подключена, то рекомендуется соединять Vbat с Vdd .

На некоторых stm32 есть специальный вход — NPOR , подача сигнала на этот вход переведёт RTC domain на резервный источник. У меня такого нет, поэтому сказать нечего.

У stm32 есть супервизор подачи питания обеспечивающий стабильный запуск и работу микроконтроллера. Супервизор реализован в виде двух систем:

POR (Power On Reset – система сброса при подаче питания) — микроконтроллер будет находиться в режиме сброса пока напряжение питания на VDD не достигнет 2v. POR контролирует только напряжение питания VDD. Во время запуска микроконтроллера VDDA должен запитываться первым и быть больше или равным VDD.

PDR (Power Down Reset – система сброса при снижении питания) — при снижении напряжения питания ниже порога, микроконтроллер будет переведён в состояние сброса. PDR контролирует напряжение питания VDD и VDDA. Контроль за напряжением VDDA можно отключать через Option bytes. Так же PDR отвечает за переключение на Vbat.

Ещё есть PVD (Programmable Voltage Detector) — см. ниже.

Режимы пониженного энергопотребления

Есть три режима:

• Sleep mode — спящий режим.
• Stop mode — режим остановки.
• Standby mode — режим ожидания.

Sleep mode — в этом режиме тактирование ядра остановлено, все цепи ввода-вывода микроконтроллера сохраняют своё состояние.

Вход в режим осуществляется командой…

Первый аргумент — PWR_LOWPOWERREGULATOR_ON — не используется на stm32F1 и stm32F3, присутствует для совместимости кода с другими МК.

Для второго аргумента есть два варианта:

PWR_SLEEPENTRY_ WFI — (Wait for Interrupt) — выход из режима произойдёт при возникновении прерывания.

PWR_SLEEPENTRY_ WFE — (Wait for Event) — выход из режима произойдёт при возникновении события.

Режим Sleep удобно использовать в программе, которая ничего не делает кроме обработки прерываний. То есть, обработали какое-то прерывание и усыпили камень, возникло очередное прерывание — камень проснулся, обработал его, и опять уснул.

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

Настраиваем таймер №1 на переполнение каждые 5 сек…

И включаем прерывание…

Про HAL_ResumeTick() см. ниже.

В бесконечном цикле усыпляем:

Перед тем как войти в режим Sleep нужно вызвать функцию HAL_SuspendTick(), которая отключит прерывания от SysTick. Это таймер, отвечающий за функции задержки, типа HAL_Delay(). При выходе из режима включаем эти прерывания функцией HAL_ResumeTick() (см. выше).

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

Ещё есть дополнительное условие входа в спящий режим: если установить бит SLEEPONEXIT, то программа будет входить в этот режим только после того, как закончится обработка последнего прерывания. Если очистить бит, то вход произойдёт сразу же после вызова HAL_PWR_EnterSLEEPMode().

После выхода из режима Sleep выполнение программы продолжается с того места где она была остановлена.

Stop mode — режим глубокой спячки ядра. Останавливаются все генераторы тактовой частоты в 1.8V domain , а так же HSI и HSE. Все цепи ввода-вывода сохраняют своё состояние.

Вход в это режим осуществляется функцией…

У первого аргумента есть два варианта:

PWR_LOWPOWERREGULATOR_ON — регулятор напряжения работает в режиме пониженного энергопотребления, но возникает дополнительная задержка при выходе из режима.

PWR_MAINREGULATOR_ON — регулятор напряжения работает в обычном режиме. Потребление энергии увеличивается, но время выхода из режима сокращается.

У второго аргумента тот же функционал, что и у спящего режима.

Выход из режима остановки возможен только с помощью прерывания или события на любой линии EXTI (таймер здесь уже не поможет ибо генераторы отключены) . Прерывания и события на этой линии могут вызываться с помощью WakeUp, будильника (работает LSI RC или LSE) , USART, I2C, ну и само собой внешнего прерывания.

При выходе из режима остановки используется HSI RC генератор, поэтому нужно заново сконфигурировать тактирование с помощью функции SystemClock_Config() .


Программа будет оживать каждые пять секунд.

В бесконечном цикле мигнём светиком, выведем значение счётчика и остановим программу:

У F103 нету WakeUp’а, поэтому можно воспользоваться будильником.

Когда МК находится в режиме остановки, то прошиваться он не будет. Нужно зажать кнопочку Reset и отпустить её за мгновение до появления надписи Waiting for debugger connection.


Atolic TrueStudio

Standby mode

Это самый экономичный режим. Отключается почти что всё, кроме RTC и IWDG (независимый WatchDog. См. ниже) . Информация в регистрах теряется, а цепи ввода-вывода отключаются. Состояние МК почти такое же как и без питания.

Вход в режим осуществляется функцией…

Выходить из режима можно тремя способами: WakeUp, будильник и IWDG. Сам по себе выход похож на то, как если бы был нажат Reset, то есть МК начинает работу с самого начала.

Для проверки можно использовать код от предыдущего режима изменив функцию входа…

Здесь есть один нюанс. Дело в том, что после срабатывания WakeUp’а микроконтроллер сразу же ресетится, а флаг WakeUp’а остаётся в регистрах взведённым. Соответственно после инициализации и очередного входа в режим, МК видит этот флаг и тут же опять ресетится, и так по кругу.

Побороть это очень просто, надо сбрасывать флаг до бесконечного цикла:

При использовании будильника нужно так же сбрасывать этот флаг.

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

IWDG выводит МК из Standby просто обресетивая его. Описание ниже.

Помимо режимов энергосбережения можно использовать другие методы снижения энергопотребления: уменьшить тактовую частоту, использовать внутренний генератор (HSI RC), понижать частоту перед переходом в спящий режим, отключать различные шины (см. файл stm32f3xx_hal_rcc.h) и т.д.

PVD (Programmable Voltage Detector) — мониторинг напряжения питания (VDD) микроконтроллера.

В программе задаётся определённый уровень напряжения…

PWR_PVDLEVEL_0 — 2.2V
PWR_PVDLEVEL_1 — 2.3V
PWR_PVDLEVEL_2 — 2.4V
PWR_PVDLEVEL_3 — 2.5V
PWR_PVDLEVEL_4 — 2.6V
PWR_PVDLEVEL_5 — 2.7V
PWR_PVDLEVEL_6 — 2.8V
PWR_PVDLEVEL_7 — 2.9V

… и если напряжение поднимется выше или опустится ниже этого уровня, то сработает прерывание.

Далее поясню всё на примере.

В соседней вкладке создаём инициализацию прерывания…

В коде появится функция.

В программе объявляем глобальный флажок:

Создаём две функции — инициализация PVD и колбек:

Чтоб сконфигурировать PVD нужно передать структуру (sConfigPVD) с двумя элементами: первый — пороговое значение, а второй определяет признак, по которому будет вызываться прерывание или событие. В данном случае прерывание будет вызываться и при падении напряжения ниже порога и при превышении. Можно сделать чтоб только при понижении или наоборот.

Инициализируем PVD, а в бесконечном цикле проверяем флажок и мигаем светиком:

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

Если нет необходимости оперативно реагировать на изменение напряжения, то можно просто (без прерываний) проверять этот флаг где-то в программе и делать какие-то действия. При инициализации укажите режим — PWR_PVD_MODE_NORMAL .

Теперь прошейте плату и уменьшайте напряжение (нужно раздобыть какой-нибудь регулятор напряжения), как только напряжение станет ниже 2.8v, то сработает прерывание и флаг PVDO будет равен единице. При повышении напряжения прерывание сработает снова, а PVDO обнулится.

Читайте также:  Больно прижигать эрозию шейки матки током ответы

Прерывание сработает только в момент перехода через порог. Если указать порог 2.4v и просто подать на плату 3v, то ничего не произойдёт.

Во избежание ложных срабатываний (если напряжение будет «дрожать» около порогового значения), у PVD предусмотрен гистерезис

PVD может пробуждать МК из режима Sleep, а в режиме Standby он не работает.

WatchDog

WatchDog — сторожевой таймер — предназначен для предотвращения зависания микроконтроллера. По сути это просто счётчик, который запускается во время старта, а в бесконечном цикле постоянно сбрасывается. Если по каким-то причинам бесконечный цикл зависнет и счётчик не будет сброшен, то он досчитав до конца сделает микроконтроллеру Reset.

У stm32 есть два WatchDog’а, один независимый — IWDG, тактируется от HSI RC и работает в любых режимах, а второй WWDG, тактируется той же частотой что и шина APB1. Соответственно в режимах глубокой спячки не функционирует.

Счётчики обоих WatchDog’ов считают «вниз» от установленного значения.

Настройте IWDG следующим образом…


Предделитель частоты устанавливаем — 64, а счётчик будет считать от 3125.

IWDG тактируется от LSI RC (40кГц), соответственно он досчитает до нуля через пять секунд. 40кГц / 64 = 625 тиков в секунду, 3125 / 625 = 5 сек. Если мы не сбросим счётчик в течении пяти секунд, то он обресетит МК.

Для проверки соорудим вот такой код:

Поскольку сброс WatchDog’а закомментирован, то МК ресетится каждые 5 сек.

Теперь раскомментируйте HAL_IWDG_Refresh(&hiwdg) и МК будет работать нормально. Reset произойдёт только если программа зависнет.

Пять секунд конечно много, это значение должно быть чуть больше времени работы цикла + прерывания, если они есть. Однако можно устанавливать большую задержку (до 26 сек) и вгонять МК в режим Standby . То есть использовать IWDG как WakeUp.

IWDG window value — любопытная штука, называется «окно» WatchDog’а. Здесь устанавливается значение раньше которого нельзя сбрасывать счётчик. Если сбросить раньше, то произойдёт Reset.

Например, если указать 2000 (окно от 3125 до 2000)

… то WatchDog будет постоянно ресетить МК.

Это происходит из-за того, что WatchDog сбрасывается раньше чем успевает досчитать от 3125 до 2000. Если указать 2600, то всё будет окей.

Таким образом можно контролировать не только зависание программы, но и слишком быстрое выполнение её.

Чтоб «окно» не участвовало в работе, оставляйте его значение равным или больше счётчика.

На F103 «окно» есть только у WWDG. Он кстати поэтому так и называется — WWDG (Window Watchdog).

IWDG может выводить МК из любого режима энергосбережения, включая Standby .

WWDG не такой крутой как IWDG, он не умеет выводить МК из режима Standby , но зато может генерить очень полезное прерывание.

Тактируется на частоте PCLK1 (APB1) делённой на постоянный делитель 4096. Настройки предделителя, «окна» и счётчика такие же как и у IWDG. Счётчик считает в диапазоне от 127 до 64. Да, вот так вот.

Для наглядности эксперимента пришлось понизить частоту шины до 162кГц.

… а WWDG настроил так.


162кГц / 4096 / 4 = 9.89 тиков в секунду, 127 — 64 = 63, 63 / 9.89 = 6.37 сек.

Если активировать Early wakeup interrupt ⇨ Enable и включить прерывание, тогда WatchDog перед тем как сделать харакири Reset вызовет это самое прерывание. То есть если программа подвисла, то прежде чем всё обресетится, можно выполнить какие-то действия в обработчике, например сохранить данные.

Колбек выглядит так:

Счётчик сбрасывается командой…

На этом пожалуй всё.

Всем спасибо

Источник

Цифровая лаборатория FPGA / DSP

Информационно-учебный проект по цифровой электронике

Обзор микроконтроллеров семейства STM32F4

Сравнительный обзор семейства микроконтроллеров STM32F4

1.1 Базовые характеристики серии STM32F4

Основанные на ARM Cortex-M4 микроконтроллеры серии STM32 F4 являются продолжением ведущей линейки STM32, обладая еще более высокой производительностью. Так же, как серия STM32 F2, эти микроконтроллеры изготавливаются по 90нм-технологии и используют запатентованный ST Microelectronics’ом ART Accelerator для достижения наилучших результатов тестов среди основанных на ядре Cortex-M микроконтроллеров, достигая показателей в 225 DMIPS/606 CoreMark и работая с флеш-памятью на частоте 180 МГц. Инструкции DSP и модуль операций с плавающей точкой дают возможность применять данные контроллеры в широком спектре проектов. Динамическое потребление питания позволяет снизить потребление тока при выполнении кода из флеш-памяти до 140 мкА/МГц для STM32F401 (максимальная частота до 84 МГц) и до 238 мкА/МГц для STM32F42x/43x, работающих на частоте до 180 МГц. Микроконтроллеры серии STM32 F4 являются результатом идеального симбиоза возможности управления МК в реальном времени и производительностью обработки сигналов, свойственной сигнальным процессорам, дополняя таким образом линейку контроллеров STM32 новым классом устройств, сигнальными микроконтроллерами (англ. digital signal controller, DSC). Серия состоит из пяти классов продуктов, которые полностью совместимы по выводам, периферии и програмному коду.

1.2. Общие характеристики семейства

Общие характеристики МК семейства:

Рис. 2. Структура микроконтроллеров STM32F4xx

1.3. Встроенные интерфейсы коммуникации

Ethernet. Данный блок присутствует не во всех продуктах семейства, а лишь в контроллерах STM32F407 / STM32F417. Блок выполнен в строго по стандарту IEEE802.3. Возможна передача данных со скоростью 10/100 Мбит/с. Доступна синхронизация часов для чего протокол IEEE1588 v2 реализован аппаратно. Для оптоволоконной либо медной линии требуется применение стороннего приемопередатчика. PHY-трансивер соединяется напрямую с портом MII или RMII.

USB (Universal Serial Bus). На борту присутствует два раздельных блока USB. Первый – USB OTG full-speed, является полностью аппаратной реализацией и совместим со стандартами USB 2.0, а также OTG 1.0. Работает на скорости до 12 Mбит/с. Поддерживается работа в режиме Host/Device/OTG. Присутствует SRP (Session request protocol) и HNP (Host negotiation protocol).

Второй – USB OTG high-speed работает в режиме Host/Device/OTG с высокой скоростью 480 Мбит/с, для чего необходим блок приемопередатчика, работающего на высокой скорости через специальный ULPI-интерфейс.

SDIO (Secure Digital Input/Output). Интерфейс позволяет работать с картами SD/SDIO/MMC-картами памяти и дисковыми контроллерами CE-ATA. В восьмибитном режиме несущая частота обмена данными составляет 48 MHz. Контроллер соответствует таким стандартам: SD Memory Card 2.0, MultiMediaCard System 4.2 (работа в режимах 1/4/8 бит), SD I/O Card 2.0 (режимы 1го и 4х бит), CE-ATA 1.1.

SPI (Serial Peripheral Interface). Устройство оснащено тремя блоками SPI, каждый из которых работает в режиме Мaster (Мultimaster) либо в режиме Slave, передавая данные полудуплексно, полнодуплексно либо симплексно. Поддерживается аппаратный расчет контрольных сумм CRC для повышения помехоустойчивости канала связи: так CRC может быть передан последним байтом слова в режиме Tx, присутствует автопроверка правильности CRC последнего пришедшего байта. Блок устройства SPI1 работает на скоростях вплоть до 37,5 Mбит/с. Другие ограничены максимальной скоростью в 21 Мбит/с.

Передача данных идет в виде 8- или 16-битных блоков, вперед младшим либо старшим битом. При чем допускается программная замена фазы и полярности сигнала тактирования.

USART (Universal Synchronous Asynchronous Receiver Transmitter). В микроконтроллер встроено четыре блока USART и два UART (Universal Asynchronous Receiver Transmitter). Блоки USART1 и USART6 допускают высокоскоростной обмен данными на скорости до 10,5 Mбит/с. Другие же поддерживают скорость не более 5,25 Mбит/с. На нативном уровне присутствует поддержка передачи данных согласно стандарта NRZ (Non Return to Zero).

Обмен данными осуществляется с использованием 8- либо 9-битных блоков, один или два бита которых выделены как стоп-биты и биты проверки четности. USART можно сконфигурировать на режим SPI, блок USART при этом выступает в роли ведущего устройства SPI. Используя блок USART можно организовать подключение к интерфейсу LIN, нашедшему применение в автомобильной промышленности, либо настроить на энкодинг/декодинг ИК-сигнала IrDA. Возможна работа с модемами по линиям управления RTS и СTS. Поддерживается работа со смарт-карточками.

I2C (Inter-Integrated Circuit). На борту МК содержится три блока I2C, поддерживающих работу в режиме Master/Slave (ведущий или ведомый), а также в режиме Мultimaster (режим в котором на шине присутствуют несколько Master-устройств, разделяющих общие ресурсы Slave, либо поочередно изменяющих свое состояние с Master на Slave и обратно). В составе устройства имеется модуль диагностики и исправления пакетных ошибок PEC. Используется 7-битный и 10-битный режим адресации. Поддерживаются общепринятые для протокола скорости обмена данными до 100 kHz в простом режиме и 400 kHz в режиме сверхбыстрого обмена данными. Модули могут быть сконфигурированны на расширенные протоколы SMBus 2.0 и PMBus.

Читайте также:  Процесс глубокого обезвоживания в электродегидраторе происходит вследствие постоянного тока

I2S (Inter-Integrated Sound). В микроконтроллере присутствуют два мультиплексированных блока I2S со встроенным SPI. Оба модуля могут быть сконфигурированны на работу в режиме Мaster либо Slave. Данные передаются по 16, 24 или 32 бита полнодуплексно или симплексно.

Среди поддерживаемых протоколов такие: Phillips I2S, PCM, MSB и LSB с выравниванием данных. Интерфейс I2S был разработан для обмена звуковыми данными в цифровом формате. Отныне для тактирования присутствует отдельный PLL, делающий возможным генерацию частот сэмплов аудио от 8 до 192 kHz с погрешностью не более 0,01%.

CAN (Controller Area Network). На борту находится два CAN-модуля, работающих по стандартам 2.0А и 2.0В, скорость работы при этом достигает 1 Мбит/с. Модули могут работать со стандартными, а также с расширенными кадрами. Модуль CAN содержит три буфера передачи, трехкаскадный FIFO-стек и 28 банков фильтров (распределены и масштабируемы).

DCMI (Digital Camera Interface). Присутствует в контроллерах STM32F407 и STM32F417. При помощи данного интерфейса можно организовать прямое подключение к камере или CMOS-матрице. Возможна внутренняя и внешняя синхронизация покадрово или построчно, работа в непрерывном режиме, автообрезка лишних частей изображения. Среди поддерживаемых форматов 8/10/12/14-битное прогрессивное видео, YCbCr 4:2:2 и RGB 565, JPEG.

FSMC (Flexible Static Memory Controller). Блок используется для подключения жидкокристаллических дисплеев либо внешней памяти напрямую. Блок содержится лишь в 100-, 144- или 176-пиновых корпусах.

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

Таким образом каждое внешнее устройство имеет собственный адрес из пула, собственные сигналы для управления. Подав необходимый сигнал выбора микросхемы можно получить доступ к тому или иному внешнему устройству (одновременное использование не допустимо). Возможно подключение таких типов памяти как NAND Flash, Compact Flash, NOR Flash, SRAM и PSRAM. Интерфейс сконфигурирован для работы с LCD-контроллерами Motorola 6800 и Intel 8080, однако может быть легко использован для сопряжения с контроллерами других производителей.

1.4. Блок-схема переферии

На рис.3 изображена переферия МК STM32F407VGT6, использующегося в рекомендованой производителем отладочной плате для быстрого старта STMF4-DISCOVERY

Рис. 3. Переферия STM32F405xx, STM32F407xx

1.5. Карта памяти

На рис. 4 изображена карта памяти STM32F407VGT6, использующегося в рекомендованой производителем отладочной плате для быстрого старта STMF4-DISCOVERY. Важно отметить, что при использовании STM32 разработчику довольно редко приходится иметь дело с архитектурой МК, поскольку зачастую все процедуры выполняются с использованием хорошо документированной высокоуровневой C- или C++ API от ST Microelectronics.

Рис. 4. Карта памяти семейств STM32F405xx, STM32F407xx

1.6. Работа с аналоговыми сигналами

На борту содержится три АЦП и два одноканальных ЦАП.

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

ЦАП обладает разрешающей способностью 12 бит, преобразование возможно в 8/12-битовом формате с выравниванием этого результата по левому или правому краям. Так как ЦАП содержит два канала, то есть возможность формирования стереосигнала. Доступна функция автоматической генерации шумового сигнала с меняющейся амплитудой или треугольного сигнала.

1.7. Быстрый старт и отладка

Для подключения микроконтроллера к отладочным средствам используется четырехпроходный JTAG-интерфейс или двухпроводный SWD (Serial Wire Debug). Выходы SWD-интерфейса мультиплексированы с выходами JTAG. Разработчику дается возможность в выборе интерфейса отладки/программирования. Интегрированная макроячейка трассировки (Embedded Trace Macrocell) значительно расширяет функции отладки, позволяя наблюдать за потоком инструкций и данных внутри ядра CPU в реальном времени. Данные выводятся через небольшое количество ETM-ножек на внешний TDA-анализатор. Существует также специальный пакет в Matlab для генерирования и создания кода алгоритмов цифровой обработки сигналов для ядра Cortex-M4. Это заметно облегчяет применение ЦОС в микроконтроллерах на ядре Cortex-M4.

ST Microelectronics предлагает разработчикам начать знакомство с микроконтроллерами STM32F4 с приобретения недорогой отладочной платы STM32F4-DISCOVERY (рис. 5, 6) из серии плат Discovery, хорошо известных разработчикам на рынке. За невысокую цену(заявленная производителем стоимость составляет 14.25 у.е.), разработчик получает полноценную отладочную плату с программатором-отладчиком ST-Link и может начинать осваивать STM32 без дополнительных затрат. На этот раз в плате помимо встроенного программатора-отладчика присутствуют такие опции как МЭМС-датчики (акселерометр и микрофон), USB и аудиокодек с разъемом для подключения наушников или колонок. Новые компоненты на отладочной плате вкупе с ядром Cortex-M4 и периферией STM32F4x позволяют быстро освоить микроконтроллеры данного семейства.

Рис. 5. Отладочная плата STM32F4-DISCOVERY. Вид сверху

Рис. 6. Отладочная плата STM32F4-DISCOVERY. Вид снизу

Выводы

На сегодняшний день так долго бывшие лидерами рынка в области встраиваемых решений 8-ми и 16-тибитные микроконтроллеры были практически вытеснены полноценными 32-битными гигантами, вроде ядра Cortex-M. Это позволило разработчикам не вникать во внутреннее строение, думая на уровне архитектуры, а сосредоточиться на более высоком – программном уровне. Таким образом грань между персональными компьютерами и микроконтроллерами значительно размылась. Проблемами, которые отталкивала разработчиков от 32-битных контроллеров семь лет назад были высокая стоимость кристалла, сложность его сопряжения с внешним миром, высокое энергопотребление.

Когда производители уменьшили энергопотребление кристаллов за счет создания множества механизмов отключения отдельных модулей в ненужные моменты времени и внедрили в свои устройства высококачественные модули шифрования, множественные АЦП и ЦАП, модули связи – началась эпоха цифровых сигнальных процессоров. Однако очевидно, что удовлетворяющий большинство современных прикладных задач кристалл будет требовать охлаждения, равносильного охлаждению ядерного реактора, поэтому в определенный момент гонка за максимальной частотой тактирования закончилась. Началась эпоха параллельных вычеслений. Можно утверждать, что МК серии STM32F4 находятся посредине – на этом переходном этапе, определенно занимая свою нишу.

Однако поскольку будущее за параллельными вычислениями, стоит обратить особое внимание на устройства FPGA, ASIC, CPLD и прочие, поскольку именно эти устройства будут являться прародителями новых технологий в недалеком будущем.

3. Список использованной литературы:

  1. STM32 F4 series of high-performance [Электронный ресурс].
  2. Trevor Martin : The Insider’s Guide To The STM32 ARM Based Microcontroller; Published – Coventry, UK: Hitex (UK) Ltd., 2009. – 103 p., ISBN: 0-9549988 8.
  3. Сообщество EasyElectronics [Электронный ресурс].

Автор: Ходнев Т.A. ДК-21. КЭВА, ФЕЛ, НТУУ «КПИ».

Источник



STM32 режимы пониженного энергопотребления.

STM32 режимы пониженного энергопотребления.

Как видно, схема питания разделена на домены и каждый из них отвечает за питание определённой периферии/части МК.

Уменьшить потребление МК можно несколькими способами, самое простое, что можно сделать — это понизить тактовую частоту или отключать шины APB и AHB, когда они не используются. Другой вариант, который требует чуть больше знаний — это использовать режимы низкого энергопотребления, кстати, их всего три:

  • sleep режим
  • stop режим
  • standby режим

Перед тем как начать описывать режимы хотелось бы отметить, что переход в любой из режимов пониженного энергопотребления осуществляется с помощью ассемблерных инструкций WFI и WFE, их отличие заключается в том, что если контроллер был отправлен в режим пониженного энергопотребления с помощью WFI(wait for interrupt), то выйти из этого режима он может только по прерыванию, если с помощью WFE(wait for event), то выйти из этого режима он может по наступлению события. Хотелось бы напомнить, что событие — это периферийное прерывание, которое не было разрешено в NVIC.

Читайте также:  Дарсонваль с высоким током

Для режима sleep характерно следующее, прекращается выполнение кода программы, прекращается тактирование ядра, периферия работает, все вывода сохраняют своё состояние.

Вход в режим sleep осуществляется с помощью инструкций WFE и WFI, когда:

  • сброшен бит SLEEPDEEP
  • выбрано значение бита SLEEPONEXIT

Что касается SLEEPONEXIT , его состояние определяет поведение контроллера при выходе из режима sleep по прерыванию(WFI), если бит сброшен, то контроллер проснётся, отработает прерывание и продолжит, как обычно, исполнять код, но если SLEEPONEXIT установлен, то после пробуждения, отработав прерывание, контроллер снова уснёт. Это позволяет создавать устройства с минимальным потреблением, работающие на прерываниях.

Выход из режима sleep по событию(WFE), позволяет начать выполнение программы с того места, где она была остановлена.
Источником события может быть:

  • прерывание в регистре управления периферией, но не в NVIC или установка бита SEVONPEND в регистре управления ядром
  • появление сигнала на линии внешних прерываний, когда она сконфигурирована в режиме событий. Но совсем необязательно, что сигнал будет поступать извне, например, EXTI содержит линию, по которой может приходить запрос прерывания от часов реального времени( RTC)

Выход из режима sleep по прерыванию(WFI), может быть спровоцирован любым прерыванием в NVIC.

Что касается потребления, то тут надо смотреть документацию на конкретный камень, например, минимальное потребление STM32F103VE составляет 0.45mA.
STM32 режимы пониженного энергопотребления.

Режим stop характерен остановкой PLL, HSI и HSE генераторов, при этом все пины ввода-вывода сохраняют своё состояние.

Вход в stop режим осуществляется с помощью инструкций WFE и WFI, когда:

  • установлен бит SLEEPDEEP
  • cброшен бит PDDS в регистре PWR_CR
  • выбран режим стабилизатора напряжения(тот о котором упоминалось в начале статьи) битом LPDS в регистре PWR_CR

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

Что касается энергопотребления, то в этом случае оно составляет десятки микроампер и зависит от режима стабилизатора напряжения.

STM32 режимы пониженного энергопотребления.

Standby режим характеризуется самым низким потреблением, около 2мкА и потерей всех данных, то есть при выходе из этого режима контроллер будет вести себя также как при нажатии на кнопку Reset.

Вход в standby режим осуществляется с помощью инструкций WFE и WFI, когда:

  • установлен бит SLEEPDEEP
  • установлен бит PDDS в регистре PWR_CR
  • сброшен бит WUF, в регистре PWR_CSR

Выход из standby режима осуществляется:

  • по нарастающему фронту на пине WKUP(A0), который для этого необходимо сконфигурировать специальным образом
  • по нарастающему фронту будильника RTC
  • внешнему сбросу(пин NRST)
  • сбросу IWGT

О том что контроллер вышел из standby режима говорит установленный флаг SBF. В standby режиме все выводы находятся в высокоимпедансном состоянии кроме NRST, WKUP(если сконфигурирован), Tamper(если сконфигурирован).

Для наглядности оставлю здесь эту таблицу и поясню, что в столбце entry описаны биты которые надо сконфигурировать, а не установить.

STM32 режимы пониженного энергопотребления.

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

Регистр управления питанием(PWR_CR).

STM32 режимы пониженного энергопотребления.

Биты 31:9 – зарезервированы, заполнены нулями.

DBP(Disable backup domain write protection) — 1 в этом бите разрешает доступ к регистрам резервного копирования и RTC, 0 – запрещает.

PLS[2:0](PVD level selection) — задают уровень порога срабатывания детектора напряжения.
STM32 режимы пониженного энергопотребления.

PVDE(Power voltage detector enable) — 1 в этом бите включает PVD, 0 – отключает.

CSBF(Clear standby flag) — всегда читается как ноль, установка 1 в этот бит очищает SBF(StandbyFlag).

CWUF(Clear wakeup flag) — всегда читается как ноль, установка 1 в этот бит очищает WUF(Wakeup Flag), но происходит это спустя два такта системного генератора.

PDDS(Power down deepsleep) — когда контроллер находится в режиме глубокого сна(Deepsleep), запись 1 в этот бит переводит его в standby режим, при записи 0 — в stop режим, статус стабилизатора напряжения зависит от LPDS, это относится только к stop режиму.

LPDS(Low-power deepsleep) — 0 в этом бите включает стабилизатор напряжения в stop режиме, 1 — переводит стабилизатор в режим пониженного энергопотребления в stop режиме.

Регистр управления/статуса (PWR_CSR)

STM32 режимы пониженного энергопотребления.

Биты 31:9 – зарезервированы, заполнены нулями.

EWUP(Enable WKUP pin) — 1 в этом бите разрешает использовать пин WKUP для пробуждения микроконтроллера по нарастающему фронту, при установленном 0 — запрещает, в этом случае пин WKUP используется как обычный GPIO. Автоматически сбрасывается после ресета.

Биты 7:3 – зарезервированы, заполнены нулями.

PVDO(PVD output) — этот бит изменяется аппаратно и имеет силу, только когда установлен бит PVDE. Единица в этом бите означает, что VDD/VDDA опустилось ниже порогового значения, выбранного битами PLS[2:0], 0 — VDD/VDDA выше порогового значения, выбранного битами PLS[2:0].

SBF(Standby flag) — этот бит устанавливается аппаратно, а сбрасывается с помощью POR/PDR(power on reset/power down reset — при включение/выключение питания) или установкой бита CWUF в регистре PWR_CR , 1 в этом бите говорит о том, что контроллер был в режиме standby.

WUF(Wakeup flag) — этот бит устанавливается аппаратно, а сбрасывается с помощью POR/PDR(power on reset/power down reset — при включение/выключение питания) или установкой бита CWUF в регистре PWR_CR, 1 в этом бите говорит о том, что пробуждающее событие пришло с пина WKUP или от будильника RTC.

Узнать какой вывод реализует функцию WKUP, можно в программе STM32CUBE.

STM32 режимы пониженного энергопотребления.

Ну и в заключение код, позволяющий входить в режим standby и выходить из него по переднему фронту на пине WKUP, в моём случае(STM32F103VET) — это вывод A0.

Для получения более подробной информации можно обратиться к AN2629 Application note

Источник

Stm32F100C8T6B Ток Gpio

Автор: K.A., 15 декабря 2015 в STM32

Рекомендованные сообщения

Присоединяйтесь к обсуждению

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

Сообщения

IDIOT

Похожие публикации

Михаил Дементьев

Гость Тот самый чайник

Добрых времени суток, недавно начал изучать микроконтроллер STM32. Уже собрал контроллер в виде схемы, но не могу понять пару моментов а именно с подключением к нему датчиков. (буду благодарен если картинками кинете ещё).

Микроконтроллер я как понял он питается и управляется с помощью 3.3В а 5В нежелательно, поскольку мк может сгореть. Хотя многие говорят можно подать, а в дотушите нету упоминания, можете разъяснить этот момент. (знаю можно устранить с помощью подтягивающего резистора, но всё же, хочу знать от мнение асов и кто уже просветлён).

Есть датчики температуры, уровень жидкости и её температура, скорости вращения. Их я как понимаю можно подключить на МК через усилитель, ФНЧ и комутатор аналоговых сигналов а затем на МК пустить. (питание через гальваническую развязку сделаю), так можно делать? Интересует схема этих датчиков которые я перечислил, желательно для промышленности поскольку не могу выбрать а какие-то не могу найти потому что не знаю что поставить.

Ещё читал что аналоговые датчики можно подключать напрямую из датчиков к МК (через делитель). Что скажите?

И такой момент, на МК есть вводы и выводы. Т.е. программно в них можно прописать какой пин будет вводом а какой выводом? Дискретным или аналоговым, можете рассказать? Или на статью с разъяснением скиньте.

Здравствуйте
Есть задание по электронике:
Прошу объяснить принцип действия конденсатора в момент замыкания и размыкания ключа S1.
Как я понимаю, при замыкании ток изменяется только на R1 и R2, а при размыкании R1=R2=0, а меняется только на R4 и R5, хотел уточнить у Вас, как вообще это расcчитывается и верны ли мои рассуждения?
Так же много раз пробовал в мультисиме, и в первую секунду при замыкании, у меня появлялся ток на R4, прошу тоже объяснить этот момент.

Источник