Микроконтроллеры STM32G0: Периферия и таймеры

1 ноября

учёт ресурсовавтоматизацияинтернет вещейуниверсальное применениеST Microelectronicsстатьяинтегральные микросхемы

Вячеслав Гавриков (г. Смоленск)

Продолжаем изучать новую серию микроконтроллеров STM32G0 производства STMicroelectronics. В третьей статье из цикла, основанного на публикации STM32G0 Online Training, рассматривается периферия этих микроконтроллеров – АЦП, ЦАП, встроенные ИОН, аналоговые компараторы – а также работа интерфейсов, таймеров и часов реального времени.

ADC: Аналогово-цифровой преобразователь

В составе микроконтроллеров STM32G0 присутствует многоканальный 12-битный аналого-цифровой преобразователь (АЦП) последовательного приближения. Благодаря встроенному блоку передискретизации разрядность АЦП может быть увеличена до 16 бит. Отличительными особенностями АЦП также являются возможность гибкой настройки, наличие собственных режимов пониженного потребления, широкий выбор алгоритмов работы, встроенный цифровой компаратор и возможность накопления результатов измерений с помощью DMA без участия процессора. Основные характеристики АЦП микроконтроллеров STM32G0 представлены в таблице 20.

Таблица 20. Основные характеристики АЦП микроконтроллеров STM32G0

Параметр Значение
Число входных каналов 16 внешних + 3 внутренних
Тип АЦП последовательного приближения
Разрядность 12 бит
Скорость преобразования (12-битные измерения), MSPS 2,5 (400 нс)
Скорость преобразования (10-битные измерения), MSPS 2,9
Скорость преобразования (8-битные измерения), MSPS 3,5
Режимы работы Single, Continous, Scan, Discontinous
Триггерные сигналы Программные или аппаратные (от таймеров или портов GPIO)
Специальные функции Режим цифрового компаратора, предискретизация, самокалибровка
Обработка данных Полинг, прерывания и DMA
Собственные режимы пониженного потребления Wait, Auto-off, Power down
Дифференциальная нелинейность, LSB ±1,2
Интегральная нелинейность, LSB ±2,5
Эффективное число битов (ENOB) (12-битные измерения) 10,2
Потребление, мкА 475 (2,5 MSPS), 17 (10 kSPS)

Рассмотрим структуру АЦП (рисунок 26). В его состав входят мультиплексор входных каналов, блок управления очередностью сканирования, схема запуска и остановки с поддержкой аппаратных и программных триггерных сигналов, 12-битный АЦП последовательного приближения со входным конденсатором, блок передискретизации, три цифровых компаратора, конфигурационные регистры, система управления питанием. Встроенный конденсатор необходим для поддержания входного напряжения в процессе выборки. Питание АЦП производится от внешнего источника, подключенного к выводу VDDA, но во многих случаях для питания контроллера и АЦП используется один и тот же внешний источник. Конфигурационные регистры АЦП подключены к шине APB.

Рис. 26. Блок-схема 12-битного АЦП микроконтроллеров STM32G0

Рис. 26. Блок-схема 12-битного АЦП микроконтроллеров STM32G0

Встроенный АЦП может измерять напряжение с 19 входных каналов. Коммутация каналов производится с помощью встроенного мультиплексора (рисунок 27). 16 каналов являются внешними, они подключены к выводам микроконтроллера. На каналы 12…14 подаются внутренние сигналы: напряжение с датчика температуры, напряжение VREF, напряжение с дежурной батарейки VBAT/3. Переключение между каналами может производиться вручную или по одному из выбранных алгоритмов, в том числе – с привлечением триггерных сигналов.

Рис. 27. Мультиплексирование входных каналов АЦП

Рис. 27. Мультиплексирование входных каналов АЦП

АЦП имеет гибкую систему тактирования (рисунок 28). По умолчанию используется синхронное тактирование (сигнал PCLK, поделенный с помощью встроенного делителя на 1, 2 или 4). Однако если пользователю необходимо «развязать» тактовую частоту процессора и АЦП, то возможно организовать тактирование с помощью асинхронного сигнала ADC_CLK. В качестве ADC_CLK могут выступать HSI16, PLLPCLK или SYSCLK. Асинхронное тактирование необходимо в тех случаях, когда, например, требуется высокая производительность АЦП и невысокая частота процессорного ядра. Управление выбором источника тактирования выполняется с помощью битов CKMODE[3:0] регистра ADC_CFGR2.

Рис. 28. Схема тактирования АЦП

Рис. 28. Схема тактирования АЦП

Работа АЦП состоит из двух фаз: фазы выборки и фазы преобразования. В фазе выборки происходит заряд входного конденсатора АЦП. Чем выше импеданс источника напряжения, тем больше времени потребуется, чтобы зарядить входной конденсатор. В случае со встроенным АЦП микроконтроллеров STM32G0 пользователь может задавать следующие значения длительности фазы выборки: 1,5/3,5/7,5/19,5/39,5/79,5/160,5 рабочих тактов. Таким образом, минимальная длительность этой фазы составляет 1,5 рабочих такта. Стоит отметить, что пользователь может одновременно работать только с двумя значениями длительности фазы выборки.

В фазе преобразования АЦП измеряет напряжение, накопленное на входном конденсаторе. Очевидно, что в случае с АЦП последовательного приближения длительность измерения зависит от разрядности. Чем выше разрядность – тем больше потребуется времени на выполнение измерения. Так, при использовании максимальной разрядности 12-бит преобразование займет 12,5 рабочих тактов, а при разрядности 6 бит – только 6,5 тактов. Таким образом, на максимальной рабочей частоте АЦП (35 МГц) скорость измерений при максимальной разрядности составит 2,5 MSPS (миллионов выборок в секунду) (длительность фазы выборки 1,5 такта). При уменьшении разрядности скорость будет еще выше. Например, при разрядности 6 бит скорость измерений составит 4,37 MSPS (таблица 21).

Таблица 21. Максимальная производительность АЦП при рабочей частоте 35 МГц

Разрешение, бит Длительность фазы выборки, тактов Длительность фазы преобразования, тактов Производительность АЦП, MSPS
12 1,5 12,5 2,5
10 1,5 10,5 2,9
8 1,5 8,5 3,5
6 1,5 6,5 4,37

Важной особенностью АЦП является встроенный блок передискретизации, который позволяет увеличить разрядность измерений до 16 бит за счет усреднения результатов от множества измерений. Алгоритм работы этого блока достаточно прост. Каждый раз при получении нового результата измерения он складывается с предыдущим результатом, то есть происходит аппаратная операция сложения с накоплением. Пользователь сам задает число выборок в диапазоне 1…256 с помощью поля OVFS[2:0] регистра ADC_CFGR2. Полученное в итоге число сдвигается вправо на заданное число бит, которое определяется полем OVSS[3:0] регистра ADC_CFGR2. Встроенный регистр накопления имеет длину 20 бит, однако после выполнения сдвига происходит обрезка результата до 16 бит. Вполне очевидно, что расплатой за увеличение разрядности становится уменьшение эффективной частоты измерений. Для увеличения разрядности до 16 бит потребуется выполнить как минимум 16 измерений, а значит, эффективная частота измерений упадет в 16 раз – с 2,5 MSPS до 156,25 kSPS. При максимальной степени передискретизации (256 выборок) эффективное быстродействие АЦП составит 9,77 kSPS.

Как уже упоминалось выше, АЦП имеет в своем составе специальный блок, позволяющий управлять процедурой запуска и очередностью подключения каналов. Благодаря этому блоку АЦП поддерживает несколько алгоритмов работы (рисунок 29), таких как:

  • режим Single conversion mode предполагает выполнение однократного измерения напряжения на выбранном канале;
  • режим Continuous conversion mode позволяет выполнять циклические измерения напряжения на выбранном канале с автозапуском;
  • режим Scan mode используется для однократного выполнения цепи измерений на выбранных каналах. Порядок измерений может быть либо последовательным, либо определяться пользователем. Заданная пользователем цепочка измерений может содержать до восьми каналов;
  • режим Continuous scan mode – циклический многоканальный режим с автозапуском;
  • режим Discontinuous mode предполагает выполнение цепочки измерений, однако запуск каждого следующего измерения производится с помощью триггерного сигнала. Триггерный сигнал может формироваться пользовательской программой либо поступать от встроенных таймеров.

Рис. 29. Алгоритмы работы АЦП в микроконтроллерах STM32G0

Рис. 29. Алгоритмы работы АЦП в микроконтроллерах STM32G0

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

В АЦП микроконтроллеров STM32G0 реализованы несколько интересных режимов работы, обеспечивающих снижение потребления:

  • Deep Power-down mode. Если АЦП не используется, то он может быть физически отключен от линий питания (с помощью встроенного силового ключа) для минимизации токов утечки.
  • Wait mode. Если данный режим активирован, то после выполнения преобразования АЦП не начинает следующее измерение до тех пор, пока не будет считан результат измерений или не будет сброшен флаг EOC.
  • Auto-off mode. Находясь в режиме Auto-off, АЦП автоматически выключается после выполнения измерения, а его пробуждение происходит только при запросе следующего преобразования. Пробуждение АЦП требует некоторого времени. Таким образом, в режиме Auto-off достигается снижение потребления, однако оперативность измерений также уменьшается.

Режимы Auto-off и Wait могут использоваться одновременно. В таком случае АЦП отключается каждый раз, когда активируется фаза ожидания.

Потребление АЦП зависит от рабочей частоты. При частоте измерений 2,5 MSPS потребление составляет около 475 мкА (2,5 MSPS), а при частоте 10 kSPS потребление уменьшается до 17 мкА.

Как уже отмечалось выше, результат измерения АЦП помещается в 16-битный регистр данных. При этом у пользователя есть несколько вариантов для контроля статуса преобразования: стандартный полинг (постоянное вычитывание флага окончания преобразования EOC), использование прерываний, а также автоматическая пересылка данных с помощью DMA.

АЦП способен выставлять ряд флагов с возможностью генерации прерываний:

  • ADRDY – АЦП котов к выполнению преобразования;
  • EOC – преобразование завершено;
  • EOS – цепь преобразований завершена;
  • EOCAL – калибровка завершена;
  • AWD1…3 – срабатывание цифрового компаратора 1…3;
  • EOSMP – фаза выборки завершена;
  • OVR – ошибка записи новых данных, если старые данные перед этим не были вычитаны;
  • CCREADY – конфигурация канала завершена.

Для получения информации по работе АЦП в режимах пониженного потребления следует обратиться к первой части статьи из данного цикла – «Микроконтроллеры STM32G0: Архитектура и системная периферия». Вопросы повышения эффективности использования выстроенных АЦП микроконтроллеров STM32 рассматриваются в руководстве «AN2834. Application note. How to get the best ADC accuracy in STM32 microcontrollers».

DAC: цифро-аналоговый преобразователь

Микроконтроллеры STM32G0 имеют в своем составе два 12-битных ЦАП, которые могут работать как независимо друг от друга, так и синхронно. Основные характеристики ЦАП представлены в таблице 22. Отличительными особенностями встроенных ЦАП являются: поддержка различных форматов входных данных, возможность запуска от внешних и внутренних триггерных сигналов, наличие встроенного буфера, возможность генерации шумового и треугольного сигналов, а также поддержка особого режима пониженного потребления при использовании схемы выборки/хранения (Sample and Hold). Рассмотрим эти особенности подробнее.

Таблица 22. Основные характеристики встроенных ЦАП микроконтроллеров STM32G0

Параметр Значение
Число ЦАП 2
Напряжение питания VDDA, В 1,8…3,6
Разрядность, бит 12/8
Гарантированная монотонность, бит 10
Дифференциальная нелинейность, LSB ±2
Интегральная нелинейность, LSB ±4
Эффективное число битов (ENOB) (1 кГц) 11, 4 с буфером и 11,5 без буфера
Скорость преобразования, MSPS 1
Потребление (VDDA + VREF+), мкА 185 с выходным буфером и 155 без выходного буфера

Структура встроенных ЦАП представлена на рисунке 30. В состав каждого ЦАП входят конфигурационные регистры, логика управления, 12-битный ЦАП, схема управления режимом выборки/хранения, выходные буферы. Тактирование ЦАП производится с помощью тактового сигнала PCLK (шина APB), но при активизации режима выборки/хранения (Sample and Hold) тактирование выполняется от LSI. Данные, требующие цифро-аналогового преобразования, первоначально поступают в буферные регистры DAC_DHRx. Далее по сигналу запуска (триггеру) данные копируются в регистр DOR, а оттуда поступают в ЦАП. Сигнал с ЦАП может буферизироваться с помощью выходного буфера. Окончательный сигнал подается либо на внешние выводы микроконтроллера, либо на входы внутренней периферии (например, на входы компараторов). Подробнее о взаимном подключении периферийных блоков рассказывается в первой статье данного цикла в разделе «Interconnect Matrix (IMX): матрица межсоединений периферийных блоков».

Рис. 30. Блок схема ЦАП микроконтроллеров STM32G0

Рис. 30. Блок схема ЦАП микроконтроллеров STM32G0

Встроенные каналы ЦАП могут работать независимо или синхронно. При использовании асинхронного режима поддерживаются три формата входных данных (рисунок 31):

  • 8-битный с правым выравниванием. Запись производится в регистр DAC_DHR8Rx[7:0], ], в котором данные автоматически преобразуются и поступают в регистр данных DHRx[11:4];
  • 12-битный с левым выравниванием. Запись производится в регистр DAC_DHR12Lx [15:4], ], в котором данные автоматически преобразуются и поступают в регистр данных DHRx[11:0];
  • 12-битный с правым выравниванием. Запись производится в регистр DAC_DHR12Rx [11:0], в котором данные автоматически преобразуются и поступают в регистр данных DHRx[11:0].

Рис. 31. Формат входных данных при асинхронной работе ЦАП (single mode)

Рис. 31. Формат входных данных при асинхронной работе ЦАП (single mode)

Если выбран синхронный режим работы, то данные из входных регистров должны поступать в оба канала ЦАП одновременно. Для организации синхронной передачи данных используются специальные входные регистры и соответствующие им форматы (рисунок 32):

  • 8-битный с правым выравниванием. Запись данных первого канала производится в DAC_DHR8RD[7:0], а второго канала – в DAC_DHR8RD [15:8]. Далее информация синхронно преобразуется и поступает в DHR1[11:4] и DHR2[11:4];
  • 12-битный с левым выравниванием. Запись данных первого канала производится в DAC_DHR12LD[15:4], а второго – в DAC_DHR12LD [31:20]. Далее информация синхронно преобразуется и поступает в DHR1[11:0] и DHR2[11:0];
  • 12-битный с правым выравниванием. Запись данных первого канала производится в DAC_DHR12RD [11:0], а второго – в DAC_DHR12RD [27:16]. Далее информация синхронно преобразуется и поступает в DHR1[11:0] и DHR2[11:0].

Рис. 32. Формат входных данных при работе ЦАП в синхронном режиме (dual mode)

Рис. 32. Формат входных данных при работе ЦАП в синхронном режиме (dual mode)

После автоматического форматирования данные копируются из входных регистров в регистр DHRх. Если в регистре конфигурации DAC_CR не разрешены триггерные сигналы (TENx), то уже через один такт (PCLK) данные попадают в регистр DAC_DORx, после чего поступают в ЦАП. Если же требуется запускать цифро-аналоговое преобразование только по какому-либо триггерному сигналу, то следует выставить бит TENx и выбрать сигнал запуска. В качестве триггерных сигналов могут выступать сигналы с таймеров, а также сигналы с внешних выводов микроконтроллера (таблица 23). Стоит отметить, что при работе с триггерными сигналами копирование данных из DHRх в DAC_DORx занимает три такта.

Таблица 23. Сигналы запуска ЦАП (триггерные сигналы)

Источник Описание TSELx[3:0]
SWTRIG Программный триггер 0
TIM1_TRGO Внутренний сигнал от таймера 1
TIM2_TRGO Внутренний сигнал от таймера 10
TIM3_TRGO Внутренний сигнал от таймера 11
Резерв 100
TIM6_TRGO Внутренний сигнал от таймера 101
TIM7_TRGO Внутренний сигнал от таймера 110
резерв 111
TIM15_TRGO Внутренний сигнал от таймера 1000
TIM3_TRGO Внутренний сигнал от таймера 1001
Резерв 1010
LPTIM1_OUT Внутренний сигнал от таймера 1011
LPTIM2_OUT Внутренний сигнал от таймера 1100
EXTI9 Внешний сигнал с вывода микроконтроллера 1101
Резерв 1110
Резерв 1111

Встроенные ЦАП используют резистивную R-2R-цепочку для формирования выходного сигнала напряжения. Такое решение отличается простотой и высокой монотонностью выходной характеристики (до 10 бит). Однако из-за высокого собственного сопротивления резистивной цепочки (около 12 кОм) у АЦП могут возникнуть проблемы при работе с низкоомной нагрузкой. К счастью, в случае с STM32G0 эту проблему удается решить без привлечения внешних усилителей с помощью встроенных буферов. При использовании буфера следует учитывать некоторый рост потребления. Если без буфера потребление ЦАП составляет 155 мкА, то при включении буфера оно возрастет до 185 мкА.

В самом простом случае данные, требующие цифроаналогового преобразования, записываются в ЦАП силами процессора. Однако возможны и альтернативные варианты. Наиболее эффективным с точки зрения производительности и потребления становится вариант с использованием DMA. DMA может автоматически без привлечения процессора по триггерному сигналу копировать данные из памяти в регистры ЦАП. Использование DMA бережет вычислительные ресурсы, уменьшает потребление и позволяет ЦАП работать даже в режиме «Sleep».

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

Рис. 33. Формирование шумового сигнала

Рис. 33. Формирование шумового сигнала

Сигналы с выхода ЦАП могут поступать не только на внешние выводы микроконтроллера, но и на входы других периферийных блоков, даже в режимах «Sleep» и «Stop». Если работа в режиме «Sleep» возможна благодаря DMA, то в режиме «Stop» работоспособность ЦАП поддерживается с помощью специальной схемы выборки/хранения (Sample and Hold). Суть работы данной схемы достаточно проста. Сначала ЦАП формирует напряжение на конденсаторе (внутреннем или внешнем), а затем отключается для уменьшения потребления. Так как в схеме всегда присутствуют утечки, то напряжение на конденсаторе будет постепенно уменьшаться. Для поддержания постоянного выходного напряжения необходимо, чтобы ЦАП периодически «просыпался» и выполнял регенерацию сигнала. Именно за этот процесс отвечает схема выборки/хранения.

Рис. 34. Работа генератора треугольных сигналов

Рис. 34. Работа генератора треугольных сигналов

Работа схемы выборки/хранения имеет три фазы (рисунок 35). В фазе выборки (Sample phase) ЦАП заряжает выходной конденсатор. В качестве выходного конденсатора может выступать как встроенный, так и внешний конденсатор, подключенный к выводу микроконтроллера. Однако стоит иметь в виду, что встроенного конденсатора будет достаточно только в том случае, если выход ЦАП подключен к внутренней периферии контроллера. Если же сигнал с ЦАП поступает на внешний вывод микроконтроллера, то к этому выводу потребуется подключить внешний конденсатор. В фазе хранения (Hold phase) ЦАП выключается, а напряжение на конденсаторе начинает уменьшаться. После фазы хранения следует фаза регенерации (Refresh phase), в течение которой ЦАП вновь заряжает конденсатор. Длительность каждой из фаз задается пользователем в регистрах DAC_SHSRx, DAC_SHHR и DAC_SHRR. Для тактирования схемы выборки/хранения используется генератор LSI. Потребление ЦАП при работе в данном режиме зависит от частоты регенерации и токов утечки. В реальных схемах возможно обеспечить потребление на уровне 1 мкА.

Рис. 35. Работа схемы выборки/хранения (Sample and Hold)

Рис. 35. Работа схемы выборки/хранения (Sample and Hold)

Для более полного ознакомления с особенностями использования встроенных ЦАП микроконтроллеров STM32 следует обратиться к существующим руководствам, например:

VREFBUF: источник опорного напряжения

Для работы АЦП и ЦАП требуется источник опорного напряжения (ИОН). В микроконтроллерах STM32G0 для подключения внешнего ИОН используется вывод VREF (присутствует опционально). К сожалению, каждый дополнительный внешний компонент увеличивает стоимость изделий и занимает место на печатной плате. В ряде случаев в качестве опорного напряжения можно использовать аналоговое напряжение питания VDDA, однако недостаток такого подхода заключается в том, что напряжение VDDA не всегда стабильно, особенно если в качестве основного источника питания выступает аккумулятор или батарейка. Что делать, если не получается обойтись без ИОН? Микроконтроллеры STM32G0 предлагают идеальное решение в виде встроенного источника VREFBUF. Основные характеристики VREFBUF представлены в таблице 24.

Таблица 24. Характеристики встроенного буфера VREFBUF

Параметр Значение
Выходное напряжение, В 2,048 или 2,5
Напряжение питания VDDA, В 2,4…3,6 (выходное напряжение VREFBUF 2,048 В)
2,8…3,6 (выходное напряжение VREFBUF 2,5 В)
Погрешность выходного напряжения -2/+1 (2,048 В),
-2/+2 (2,5 В)
Ток нагрузки, мА 4
Потребление, мкА 16 (выходной ток VREFBUF 0 мкА)
18 (выходной ток VREFBUF 500 мкА)
35 (выходной ток VREFBUF 4 мА)
PSRR, дБ 60
Время запуска, мкс 500 (емкостная нагрузка 1,1 мкФ)

Встроенный источник опорного напряжения VREFBUF представляет собой стабилитрон с дополнительным буфером. Выходное напряжение VREFBUF выбирается пользователем из двух значений: 2,048 или 2,5 В. При этом следует иметь в виду, что для получения напряжения 2,5 В необходимо, чтобы напряжение питания VDDA было больше 2,8 В.

Для нормальной работы VREFBUF требуется внешний конденсатор, подключаемый к выводу VREF микроконтроллера. Стоит отметить, что вывод VREF есть не у всех моделей STM32G0. Если в выбранном корпусном исполнении вывод VREF отсутствует, то это значит, что данный сигнал подключен к напряжению питания VDDA внутри микроконтроллера и работа буфера VREFBUF становится невозможной (он должен быть выключен).

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

Режим работы VREFBUF определяется двумя битами регистра VREFBUF_CSR: ENVR и HIZ (таблица 25). После выполнения изменения конфигурации VREFBUF требует некоторого времени для выхода на режим. Статус готовности можно контролировать с помощью бита VRR из регистра VREFBUF_CSR.

Таблица 25. Режимы работы VREFBUF

ENVR HIZ VREFBUF Описание
0 0 Выкл. Режим без ИОН. VREFBUF выключен. Выход VREF подтянут к VSSA.
0 1 Выкл. Режим внешнего ИОН. Внешний источник опорного напряжения должен быть подключен к выходу VREF (данный режим установлен по умолчанию).
1 0 Вкл. Режим внутреннего ИОН. VREFBUF подключен к выходу VREF.
1 1 Выкл. Режим Hold mode. VREFBUF выключен. Выход VREF отключен от VREFBUF. Напряжение на VREF поддерживается внешним конденсатором.

Выходное напряжение VREFBUF калибруется при производстве микроконтроллера. Калибровочные данные записываются в поле TRIM[5:0] регистра VREFBUF_CCR. Однако у пользователя есть возможность самостоятельно изменять содержимое TRIM[5:0] и дополнительно калибровать VREFBUF.

VREFBUF способен работать в режимах пониженного потребления до «Stop 0» и «Stop 1» включительно. Это особенно важно, так как напряжение VREFBUF может использоваться внешними схемами.

COMP: аналоговые компараторы

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

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

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

Рис. 36. Структура аналоговых компараторов COMPx

Рис. 36. Структура аналоговых компараторов COMPx

У каждого компаратора есть инвертирующий и неинвертирующий входы. Благодаря входным мультиплексорам на эти входы могут подаваться сигналы как с внешних выводов микроконтроллера, так и от встроенной периферии, в том числе от ЦАП, таймеров и VREF. Выбор источника для инвертирующего входа выполнится с помощью поля INMSEL регистра COMP1_CSRx, а выбор источника для неинвертирующего входа – с помощью поля INPSEL регистра COMP1_CSRx (таблицы 26 и 27).

Таблица 26. Подключение неинвертирующих входов COMP1 и COMP2 [1]

COMP1_INPSEL[1:0] COMP1_INP COMP2_INPSEL[1:0] COMP2_INP
00 PC5 00 PB4
01 PB2 01 PB6
10 PA1 10 PA3
11 Не подключен 11 Не подключен

Таблица 27. Подключение инвертирующих входов COMP1 и COMP2 [1]

COMP1_INMSEL[3:0] COMP1_INM COMP2_INMSEL[3:0] COMP2_INM
0000 ¼ VREFINT 0000 ¼ VREFINT
0001 ½ VREFINT 0001 ½ VREFINT
0010 ¾ VREFINT 0010 ¾ VREFINT
0011 VREFINT 0011 VREFINT
0100 DAC Channel1 0100 DAC Channel1
0101 DAC Channel2 0101 DAC Channel2
0110 PB1 0110 PB3
0111 PC4 0111 PB7
1000 PA0 1000 PA2
> 1000 ¼ VREFINT > 1000 ¼ VREFINT

У встроенных компараторов есть несколько особых режимов работы. В частности, два компаратора могут объединяться для создания одного оконного компаратора (Window mode). Оконный компаратор обеспечивает контроль за тем, чтобы входной сигнал находился в выбранном диапазоне напряжений (рисунок 37). При этом у пользователя есть возможность сэкономить один внешний вывод микроконтроллера за счет объединения входов компараторов. Для этого используется бит WINMODE.

Рис. 37. Работа COMP1 и COMP2 в режиме оконного компаратора

Рис. 37. Работа COMP1 и COMP2 в режиме оконного компаратора

Режим работы с программируемым гистерезисом – еще один полезный режим компаратора, который позволяет избежать выходного дребезга при работе с плавно изменяющимися или зашумленными сигналами (рисунок 38).

Рис. 38. Режим компаратора с гистерезисом

Рис. 38. Режим компаратора с гистерезисом

Компараторы очень часто используются для контроля тока в различных приложениях, например, в мощных инверторах и приводах электродвигателей. При коммутации таких устройств часто возникают броски тока с амплитудой, превышающей допустимые значения. Несмотря на то, что эти броски имеют кратковременный характер и являются нормальным явлением, они, тем не менее, успевают вызвать срабатывание компаратора. Чтобы защититься от ложных срабатываний встроенных компараторов COMP1 и COMP2, используется режим работы со слепой зоной и блокирующим сигналом Blink mode (рисунок 39). В качестве блокирующего сигнала могут выступать TIM1 OC4, TIM1 OC5, TIM2 OC3, TIM3 OC3, TIM15 OC2.

Рис. 39. Режим работы с блокирующим сигналом для пропуска стартового броска

Рис. 39. Режим работы с блокирующим сигналом для пропуска стартового броска

Выходы компаратора очень часто подключаются ко входам таймеров для решения различных задач, таких как:

  • подключение ко входам BKIN для аварийного отключения ШИМ-сигналов при срабатывании компаратора;
  • подключение ко входам ETR для непрерывного контроля тока;
  • подключение ко входам захвата для измерения периода импульсов на выходе компаратора.

О подключении компараторов к таймерам рассказывалось в первой статье данного цикла в разделе «Interconnect Matrix (IMX): матрица межсоединений периферийных блоков» (в частности, в таблице 1).

Во многих приложениях компараторы должны обеспечивать минимальную задержку и быстрый отклик на входные сигналы. С другой стороны компараторы могут также использоваться в режимах пониженного потребления вплоть до «Stop». В таких случаях они должны, в первую очередь, иметь малое потребление. Чтобы разрешить это противоречие, пользователям предлагаются на выбор сразу два режима работы с компромиссными значениями потребления и быстродействия: High speed и Medium speed. Выбор режима осуществляется с помощью поля PWRMODE[1:0] в регистре COMPx_CSR. Сравнение режимов представлено в таблице 28.

Таблица 28. Сравнение режимов High speed и Medium speed

Режим PWRMODE[1:0] Задержка, мкс Типовое потребление, мкА
High speed 00 1,2 250
Medium speed 01 0,07 6

Компараторы способны генерировать прерывания NVIC (12 канал разделяется с АЦП) и EXTI (каналы 11 и 17).

USART: универсальный синхронный/асинхронный приемопередатчик

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

Структура приемопередатчика USART представлена на рисунке 40. Из нее видно, что USART состоит из двух доменов тактирования. Регистры управления подключены к шине APB и работают с тактовой частотой PCLK. Основное ядро USART работает с собственным тактовым сигналом, источником для которого могут выступать PCLK, HSI16, LSE и SYSCLK. Для согласования этих доменов используются специальные FIFO-буферы.

Рис. 40. Блок-схема приемопередатчика USART

Рис. 40. Блок-схема приемопередатчика USART

Для организации обмена данными приемопередатчик использует пять выводов. Их функции зависят от режимов работы:

  • сигналы TX и RX используются для передачи и приема данных в большинстве режимов;
  • сигналы nCTS и nRTS участвуют в аппаратном управлении потоком данных в RS-232;
  • сигнал DE используется для управления активностью внешней микросхемы трансивера RS-485/422;
  • сигнал СK выступает в качестве сигнала тактирования при работе в режиме SPI. Этот же сигнал является входным сигналом тактирования в режиме Smartcard;
  • сигнал NSS используется для выбора ведомого при работе в режиме SPI. 

Стоит отметить, что количество модулей USART и их возможности зависят от конкретной модели микроконтроллера STM32G0. Обзор возможностей модулей USART приведен в таблице 29.

Таблица 29. Обзор встроенных приемопередатчиков USART

Возможности USART1, USART2* USART2**, USART3/4* LPUART
Аппаратный контроль потока данных (RS-232 и RS-485) + + +
Поддержка DMA + + +
Мультипроцессорный режим обмена данными + + +
Синхронный режим (мастер/ведомый) + +
Режим Smartcard +
Однопроводной полудуплексный режим обмена + + +
IrDA SIR ENDEC +
Режим LIN +
Два домена тактирования и пробуждение из режимов пониженного потребления + +
Прерывание по таймауту при отсутствии принимаемых данных +
Modbus +
Автоматическое определение скорости передачи +
Поддержка сигнала Driver Enable для RS-485 + + +
Длина данных, бит 7, 8, 9
Tx/Rx FIFO + +
Размер Tx/Rx FIFO 8 8
* Только для STM32G071xx и STM32G081xx.
** Только для STM32G031xx и STM32G041xx.

Каждый из модулей USART позволяет гибко настраивать параметры сообщений:

  • длину данных 7/8/9 бит;
  • формат бита четности: четный, нечетный, без бита четности;
  • количество стоп-битов: 0,5/1/1,5/2;
  • порядок передачи данных: младшим или старшим битом вперед;
  • скорость передачи;
  • количество выборок за бит: 16 или 8. При использовании 8 выборок обеспечивается максимальная скорость передачи, а при использовании 16 выборок повышается устойчивость к рассогласованию таковых генераторов приемника и передатчика, а также устойчивость к шумам.

Следует отметить некоторые особенные функции USART. В частности, функцию автоматического определения частоты обмена (Auto Baud Rate Detection), а также возможность распознавания окончания передачи по таймауту (Receiver Timeout).

Модули USART позволяют гибко настраивать выводы, например, менять местами линии TX и RX. Благодаря этому они могут работать в различных режимах, таких как: полнодуплексный асинхронный режим, синхронный ведущий и ведомый режим с формированием/приемом тактового сигнала, однопроводной полнодуплексный режим, многопроцессорный режим.

Наличие выводов nCTS и nRTS, а также DE позволяют приемопередатчикам USART выполнять аппаратный контроль потока данных при реализации интерфейсов RS-232 и RS-485.

Модули USART1/2 также поддерживают и другие популярные интерфейсы: Modbus, LIN, IrDA SIR ENDEC, Smartcard.

Приемопередатчики USART способны формировать запросы DMA и вести двунаправленный обмен данными без участия процессора. При этом модули USART1/2 сохраняют работоспособность вплоть до режима «Stop» и могут при необходимости пробуждать процессор.

LPUART: малопотребляющий UART

В предыдущем разделе были рассмотрены основные особенности универсальных приемопередатчиков USART, реализованных в микроконтроллерах STM32G0. Кроме того, в таблице 10 были также представлены функциональные возможности малопотребляющего приемопередатчика LPUART. Его функционал достаточно сильно урезан по сравнению, например, с USART1. В частности, LPUART не имеет поддержки синхронного обмена, Modbus, LIN, IrDA SIR ENDEC, Smartcard, не может автоматически определять скорость передачи и распознавать окончание передачи по таймауту. С другой стороны, большая часть остальных параметров LPUART оказывается такой же, как и у USART1/2, а его главным козырем становится минимальное потребление.

Благодаря отказу от «лишнего» функционала, потребление LPUART оказывается очень скромным (таблица 30). Ниже потребление только у USART3/4. Однако у модулей USART3/4 есть целый ряд принципиальных ограничений: они имеют ограниченный функционал, не способны работать в режимах «Stop 0» и «Stop 1», и, кроме того, доступны только в старших линейках микроконтроллеров STM32G071xx и STM32G081xx.

Таблица 30. Сравнение потребления модулей USART и LPUART в различных режимах

Приемопередатчик Потребление, мка/МГц
Range 1 Range 2 Low-power run и Sleep
USART1 7,2 6 6,5
USART2 7,2 6 6
USART3 2 1,7 2
USART4 2 1,7 2
LPUART1 4,3 3,5 4

Интерфейс Serial Peripheral Interface (SPI)

SPI (Serial Peripheral Interface) является чрезвычайно простым и в то же время быстрым интерфейсом, позволяющим микроконтроллерам STM32G0 обмениваться данными с различными внешними устройствами, такими как АЦП, ЦАП, кодеки, радиомодули и многие другие. SPI-контролер, реализованный в STM32G0, обладает высокой гибкостью и способен работать с частотами до 32 МГц в различных режимах, таких как симплекс, дуплекс и полудуплекс.

Структурная схема SPI-контролера представлена на рисунке 41. В его состав входят следующие блоки: схема управления логикой работы (контроллер), генератор тактовой частоты (SCK), отдельные 32-битные FIFO-буферы для приема и передачи, блок вычисления контрольной суммы, схема управления функционалом вывода NSS. Тактирование SPI производится с помощью сигнала PCLK (шина APB).

Рис. 41. Блок-схема SPI

Рис. 41. Блок-схема SPI

SPI-контроллер может выступать в качестве передатчика и приемника, а также работать в режиме ведущего и ведомого. Для взаимодействия со внешними устройствами используются четыре вывода: MOSI, MISO, SCK, NSS. Назначение этих выводов зависит от режима работы. В режиме ведущего контроллер передает данные через MOSI, принимает данные через MISO, генерирует тактовый сигнал на линии SCK, выбирает ведомого с помощью линии NSS. В режиме ведомого назначение линий меняется: контроллер принимает данные через MOSI, передает данные через MISO, принимает сигнал тактирования SCK и, при необходимости, принимает сигнал выбора ведомого NSS.

Рассмотрим основные схемы включения и режимы обмена, которые позволяет реализовывать SPI.

Стандартный полнодуплексный режим обмена. Данный режим необходим для двунаправленного обмена данными между ведущим и ведомым. Микроконтроллер STM32G0 может выступать и в той, и в другой роли. При таком обмене задействованными оказываются все линии (рисунок 42).

Рис. 42. Полнодуплексный обмен между ведущим и ведомым

Рис. 42. Полнодуплексный обмен между ведущим и ведомым

Симплексная передача. Иногда требуется передавать данные только в одном направлении: от ведущего к ведомому или от ведомого к ведущему. В таких случаях допускается не подключать неиспользуемую линию (MOSI или MISO), а освободившийся вывод микроконтроллера использовать для других целей. Пример такого подключения представлен на рисунке 43.

Рис. 43. Симплексный режим передачи данных от ведущего к ведомому

Рис. 43. Симплексный режим передачи данных от ведущего к ведомому

Полудуплексный обмен. Иногда для экономии выводов используют двунаправленный обмен по одной линии. В таком случае ведущий и ведомый передают данные по очереди, используя общую линию MOSI (MISO), как показано на рисунке 44. Одновременная передача не допускается. Если, например, ведущий попытается передать «0» и в тот же момент времени ведомый установит на выходе «1», то в цепи начнет протекать ничем не ограниченный ток. С точки зрения ведомого ситуация будет аналогична короткому замыканию на землю. Чтобы избежать аварии, необходимо поместить в цепь токоограничивающий резистор. Номинал резистора выбирается исходя из допустимого тока портов микроконтроллера и требуемого быстродействия. В качестве отправной точки можно использовать номинал 1 кОм.

Рис. 44. Полудуплексный обмен между ведущим и ведомым

Рис. 44. Полудуплексный обмен между ведущим и ведомым

Полнодуплексный обмен с несколькими ведомыми. SPI-контроллер имеет только один специализированный вывод NSS для выбора ведомого. Однако если в качестве NSS использовать дополнительные порты ввода-вывода, то можно организовать двунаправленный обмен между одним мастером и несколькими ведомыми (рисунок 45). В каждый момент времени на шине может быть только один активный ведомый. При попытке одновременной передачи несколькими ведомыми произойдет аварийная ситуация, аналогичная той, что была рассмотрена в предыдущем случае.

Рис. 45. Полнодуплексный обмен с несколькими ведомыми

Рис. 45. Полнодуплексный обмен с несколькими ведомыми

Полнодуплексный обмен между двумя ведущими (Multi-master). Так как SPI-контроллеры, реализованные в STM32G0, способны оперативно переключаться между режимами ведущего и ведомого, то при использовании дополнительных портов можно организовать обмен между двумя ведущими устройствами (рисунок 46). По умолчанию оба устройства находятся в режиме ведомого. Если первое устройство решило выполнить передачу данных, оно блокирует режим ведущего второго устройства с помощью линии NSS. После завершения передачи первое устройство вновь приходит в режим ведомого и освобождает шину.

Рис. 46. Полнодуплексный обмен между двумя ведущими

Рис. 46. Полнодуплексный обмен между двумя ведущими

SPI-контроллеры в STM32G0 позволяют гибко настраивать формат данных и параметры передачи:

  • разрядность передаваемых данных 4…16 бит;
  • программируемая полярность и фаза тактового сигнала;
  • передача данных младшим или старшим битом вперед.

Среди важных особенностей SPI-контроллеров STM32G0 стоит также отметить наличие двух независимых 32-битных буферов для приема и передачи, благодаря которым удается избежать потери данных, возможность формирования запросов DMA при приеме и передачи данных, автоматический расчет и контроль контрольных сумм CRC.

Интерфейс Inter-Integrated Circuit (I2C)

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

Типовая структура шины I2C представлена на рисунке 47. К шине могут подключаться ведущие и ведомые узлы. Для обмена данными используются всего две сигнальных линии: SCL и SDA. Линия SDA используется для двунаправленной передачи данных, а по линии SCL ведущие передают сигнал тактирования. В интерфейсе I2C используется неразрушающий арбитраж. При передаче данных каждое устройство прослушивает шину. Если передатчик обнаруживает, что вместо передаваемой «1» (рецессивный бит) на шине присутствует «0» (доминантный бит), то передача прекращается и устройство освобождает шину.

Рис. 47. Пример реализации шины I2C

Рис. 47. Пример реализации шины I2C

В микроконтроллерах STM32G0 реализованы два модуля I2C, которые различаются по своему функционалу (таблица 31). Однако оба модуля поддерживают скорость обмена вплоть до 1 Мбит/с (режим «Fast-mode Plus») и отвечают стандартам I²C Revision 3 (NXP). I2C1 дополнительно поддерживает SMBus Revision 3 и PMBus Revision 1.3.

Таблица 31. Характеристики модулей I2C микроконтроллеров STM32G0

Характеристика I2C1 I2C2
Поддержка 7-битной адресации + +
Поддержка 10-битной адресации + +
Режим «Standard-mode» (до 100 кбит/с) + +
Режим «Fast-mode» (до 400 кбит/с) + +
Режим «Fast-mode Plus» с токовой нагрузкой до 20 мА (до 1 Мбит/с) + +
Независимое тактирование +
Пробуждение системы из режима «Stop» +
SMBus/PMBus +

Структурная схема модуля I2C1 представлена на рисунке 48. Модуль разбит на два домена тактирования: тактирование регистров управления осуществляется от PCLK (шина APB), а ядро I2C-контроллера тактируется от собственного сигнала I2с_ker_ck. Источником для I2c_ker_ck могут быть PCLK, SYSCLK и HSI16. В случае со вторым модулем I2C (I2C2) тактирование регистров и ядра осуществляется от PCLK. Как видно из схемы, I2C-контролер состоит из двух основных блоков: один из них отвечает за передачу и прием данных, а второй за генерацию и прием тактового сигнала. Кроме того, в составе контроллера присутствуют цифровые и аналоговые фильтры, позволяющие работать даже при наличии существенных шумов.

Рис. 48. Структура I2C-контроллера

Рис. 48. Структура I2C-контроллера

Встроенные I2C-контроллеры способны работать в четырех основных режимах: ведущий передатчик, ведущий приемник, ведомый приемник, ведомый передатчик. Обмен осуществляется на всех стандартных скоростях: «Standard-mode» (до 100 кбит/с), «Fast-mode» (до 400 кбит/с), «Fast-mode Plus» (до 1 Мбит/с). Стоит отметить, что для работы в режиме «Fast-mode Plus» требуется повышенная нагрузочная способность выходов. За управление повышенной нагрузочной способностью отвечает системный контроллер SYSCFG. Подробнее эта особенность рассматривалась в первой части данного цикла.

Наличие цифровых и аналоговых фильтров приводит к появлению дополнительных задержек. Это важное обстоятельство следует учитывать при выборе тактовой частоты SCL и настройке таймингов (рисунок 49). За настройку времени удержания и установления отвечают поля PRESC[3:0], SCLDEL[3:0] и SDADEL[3:0] из регистра I2C_TIMINGR. Частота SCL в режиме мастера определяется полями PRESC[3:0], SCLH[7:0] и SCLL[7:0] из того же регистра I2C_TIMINGR.

Рис. 49. Настройка таймингов I2C-контроллера

Рис. 49. Настройка таймингов I2C-контроллера

I2C-контроллеры обеспечивают работу с различными форматами адреса. Для задания адреса используется пара регистров. В регистре I2C_OAR1 может быть прописан 7-битный или 10-битный адрес. В регистре I2C_OAR2 может храниться только 7-битный адрес, однако с помощью регистра OA2MSK младшие биты I2C_OAR2 могут быть замаскированы, тем самым позволяя устройству реагировать на множество адресов. Регистры I2C_OAR1 и I2C_OAR2 могут использоваться одновременно.

Среди важных особенностей модуля I2C1 стоит отметить поддержку протоколов и функций SMBus Revision 3: протокол ARP (адрес устройства по умолчанию и арбитраж в режиме ведомого), протокол Host Notify, протокол Alert protocol (при использовании соответствующего вывода микроконтроллера), аппаратное вычисление PEC (Packet Error Code).

Контроллер I2C1 способен работать в режимах пониженного потребления вплоть до «Stop 1» и пробуждать процессор при совпадении адреса при приеме сообщения. Для этого требуется, чтобы тактирование ядра I2C1 осуществлялось от HSI16. По умолчанию в режиме «Stop» генератор HSI16 выключен, однако при обнаружении состояния START на шине I2C генератор пробуждается. Далее происходит прием адреса, если обнаружено совпадение – генерируется прерывание, пробуждающее процессор.

Подробную информацию о работе I2C можно найти в руководстве пользователя [1].

CEC: контроллер HDMI-CEC

HDMI-CEC (Consumer Electronics Control) является частью HDMI (High-Definition Multimedia Interface). Данный низкоскоростной интерфейс используется для управления различными видео- и аудиоустройствами. CEC-контроллер, входящий в состав STM32G0, соответствует спецификации HDMI-CEC v1.4.

CEC-контроллер состоит из двух основных блоков: ядра (CEC-адаптера) и CEC-интерфейса (CEC ITF). CEC-адаптер отвечает за выполнение основных функций и работу с шиной CEC (передачу, прием, кодирование и так далее), а CEC-интерфейс используется для обмена с шиной APB. На рисунке 50 представлена схема взаимодействия CEC-контроллера с другими блоками микроконтроллера, а также типовая схема реализации CEC-шины. Из рисунка видно, что CEC-контроллер использует два домена тактирования: регистры контроллера взаимодействуют с шиной APB на частоте PCLK, а ядро тактируется сигналом 32 кГц (LSE или HIS, деленным на 488). Шина CEC использует всего одну сигнальную линию для обмена данными.

Рис. 50. Структура HDMI-CEC-контроллера

Рис. 50. Структура HDMI-CEC-контроллера

Для передачи данных используется стандартное сообщение, начинающееся со старт-бита и состоящее из нескольких полей: заголовка, кода операции (OPCODE) и операндов (полезных данных), как показано на рисунке 51.

Рис. 51. Формат CEC-сообщения

Рис. 51. Формат CEC-сообщения

Заголовок содержит адреса источника и приемника, а также два служебных бита EOM и ACK (рисунок 52). Операнды имеют разрядность 8 бит.

Рис. 52. Формат полей CEC-сообщения

Рис. 52. Формат полей CEC-сообщения

Встроенный CEC-контроллер поддерживает два режима точности битовых сигналов: стандартную («Standard mode») и расширенную («Extended mode»). Согласно спецификации CEC, в режиме «Standard mode» погрешность фронта и среза для старт-бита составляет ±200 мкс, погрешность фронта для битов данных составляет ±200 мкс, а среза – ±350 мкс (рисунок 53). В режиме «Extended mode» погрешность фронта и среза для старт-бита составляет ±400 мкс, погрешность фронта для битов данных составляет ±300 мкс, а среза – ±500 мкс.

Рис. 53. Погрешности битовых таймингов в режиме «Standard mode»

Рис. 53. Погрешности битовых таймингов в режиме «Standard mode»

Шина CEC подразумевает полудуплексный обмен данными и состоит всего лишь из одного сигнального проводника. Для согласования очередности передачи между множеством устройств используется неразрушающий арбитраж. Для реализации арбитража применяются два механизма. Во-первых, каждый инициатор контролирует состояние шины. Если при передаче рецессивного бита передатчик обнаруживает доминантный бит, то он теряет арбитраж и должен отключиться от шины. Во-вторых, между передачей последнего сообщения и началом передачи следующего присутствует обязательный таймаут SFT (Signal-Free Time), как показано на рисунке 54. Длительность таймаута рассчитывается CEC-контроллером автоматически и зависит от статуса передающего устройства:

  • 2,5 бита для инициатора, который потерял приоритет при последней передаче;
  • 4 бита для нового инициатора;
  • 6 битов для инициатора, который выполнил последнюю удачную передачу.

Рис. 54. Задержка между сообщениями необходима для арбитража

Рис. 54. Задержка между сообщениями необходима для арбитража

Отсчет времени SFT может производиться либо от момента, когда пользовательская программа инициирует передачу (для этого необходимо сбросить бит SFTSTOP = 0), либо от момента освобождения шины или обнаружения ошибки (для этого необходимо установить бит SFTSTOP = 1). Если к моменту передачи нового сообщения таймаут SFT закончился, то передача стартует без задержки.

В процессе передачи HDMI-CEC контролирует тайминги и обнаруживает два типа ошибок: BTE и BPE. BTE (Bit Timing Error) возникает, если превышен допуск на тайминги отдельных битов. BPE (Bit Period Error) возникает, если нарушен допуск на период следования битов. При возникновении и обнаружении ошибок CEC-контроллер автоматически формирует на шине бит-ошибки длительностью 1,4…1,6 битов (3,6 мс), тем самым оповещая о проблеме остальные устройства.

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

  • RXBR устанавливается при приеме байта;
  • RXEND устанавливается по окончании приема;
  • RXOVR устанавливается при переполнении во время приема;
  • BRE устанавливается при обнаружении ошибки длительности фронта;
  • SBPE устанавливается при обнаружении ошибки малой длительности периода;
  • LBPE устанавливается при превышении длительности периода;
  • RXACKE устанавливается при отсутствии сигнала подтверждения ACK.

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

  • ARBLST устанавливается при потере арбитража;
  • TXBR является запросом байта на передачу;
  • TXEND устанавливается по окончании передачи;
  • TXUDR сигнализирует об ошибке – отсутствии данных в буфере к моменту передачи следующего байта;
  • TXERR сигнализирует об ошибке при передаче;
  • TXACKE устанавливается при отсутствии сигнала подтверждения ACK.

USB Type-C Power Delivery (UCPD)

Встроенный UCPD-контроллер совместим со спецификациями USB Type-C Rev. 1.2 и USB Power Delivery Rev. 3.0, при этом PHY поддерживают только режим СС. Таким образом, для работы может использоваться только кабель USB Type-C.

Модуль UCPD состоит из двух основных частей: непосредственно UCPD-контроллера и регистров управления (рисунок 55). Регистры управления подключены к шине APB и тактируются сигналом PCLK. UCPD-контроллер использует для тактирования сигнал HSI16.

Рис. 55. Структурная схема UCPD

Рис. 55. Структурная схема UCPD

UCPD использует следующие сигналы:

  • UCPDx_FRSTX1 и UCPDx_FRSTX2 относятся к функции FRS (Fast Role Swap). FRS позволяет UCPD переключаться между режимами DFP (Downstream Facing Port) и UFP (Upstream Facing Port). Активный уровень этих сигналов позволяет внешнему МОП-транзистору подтянуть вывод СС1/СС2 к земле;
  • UCPDx_CC1 – сигнал CC1 кабеля USB Type-C;
  • UCPDx_CC2 – сигнал CC2 кабеля USB Type-C;
  • UCPDx_DBCC1 и UCPDx_DBCC2 используются для работы с «мертвыми» или сильно разряженными батареями. Если такая функция необходима, эти линии должны быть подключены к линиям UCPDx_CC. 

В составе STM32G0 также реализованы встроенные резисторы Rp и Rd, подключенные к линиям СС1 и СС2. С их помощью UCPD может обнаружить подключение и ориентацию кабеля. Номинал Rp определяет передаваемую по умолчанию мощность.

UCPD-контроллер выполняет следующие функции:

  • обнаружение уровней USB Type-C и генерацию соответствующих прерываний;
  • выполнение FRS и генерацию соответствующих прерываний;
  • генерацию и контроль CRC;
  • кодирование и декодирование 4b5b;
  • кодирование и декодирование BMC;
  • прием и передачу кодов заголовка (ordered sets).

Стек PD выполняется микроконтроллерами STM32G0 на программном уровне с привлечением прерываний и событий. При этом программа отвечает только за передаваемые данные, в то время как формирование служебных полей (преамбулы, CRC, SOP и EOP) берет на себя UCPD.

Для получения подробной информации по работе UCPD следует обратиться к документу «AN5225 Application note USB Type-C™ Power Delivery using STM32xx Series MCUs and STM32xxx Series MPUs». Кроме того, для работы с UCPD предлагается утилита STM32CubeMonUCPD. Информация по работе с утилитой приведена в руководстве «UM2468 User manual STM32CubeMonitor-UCPD software tool for USB Type-C™ Power Delivery port management».

IWDG: независимый сторожевой таймер

В процессе выполнения пользовательской программы могут возникать сбои, из-за которых нормальная работа процессора оказывается невозможной. Речь, например, идет о зацикливаниях. Самостоятельно выйти из такой ситуации процессор не может – ему требуется внешний инструмент сброса. Обычно для этих целей используют сторожевые таймеры. На борту у STM32G0 есть два сторожевых таймера: оконный (WWDG) и независимый (IWDG).

Независимый сторожевой таймер IWDG (independent Watchdog) имеет минимальную связь с микроконтроллером. При наличии питания VDD он продолжает работать даже в режиме «Shutdown». После начальной настройки и включения сторожевой таймер не может быть остановлен, а может быть только сброшен пользовательской программой. Если же программа не успеет обновить IWDG и он досчитает до 0, то микроконтроллер будет автоматически сброшен.

Структурная схема IWDG показана на рисунке 56. Из нее видно, что IWDG состоит из двух доменов. Первый домен, к которому относятся регистры настройки и статуса, питается от напряжения Vcore и тактируется от PCLK. Второй домен – ядро IWDG питается напрямую от VDD и тактируется от LSI (32 кГц). Таким образом, работа первого домена при переходе в глубокие спящие режимы останавливается, в то время как работа ядра IWDG продолжается до тех пор, пока остается активным LSI и поддерживается питание VDD.

Рис. 56. Структура независимого сторожевого таймера IWDG

Рис. 56. Структура независимого сторожевого таймера IWDG

Принцип работы IWDG достаточно прост. Вначале пользователь задает делитель тактового сигнала (регистр IWDG_PR) и основание счета (регистр IWDG_RLR). После запуска IWDG в 12-битный вычитающий счетчик помещается значение из IWDG_RLR. Счетчик выполняет обратный отсчет. Пользовательская программа должна периодически сбрасывать счетчик. Если это не будет сделано, то при достижении счетчиком 0 произойдет сброс микроконтроллера. Благодаря делителю тактового сигнала пользователь может определять таймаут IWDG в диапазоне 125 мкс…32,8 с.

Существует дополнительный оконный режим работы IWDG. В этом режиме сброс микроконтроллера выполняется не только при достижении счетчиком 0, но и в том случае, если программа попытается сбросить счетчик слишком рано. Верхнее граничное значение должно быть предварительно записано в регистр IWDG_WINR.

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

  • активировать счетчик. Для этого записать значение 0x0000 СССС в регистр управления IWDG_KEY;
  • снять защиту от записи регистров IWDG_PR, IWDG_RLR и IWDG_WINR. Для этого записать значение 0x0000 5555 в регистр управления IWDG_KEY;
  • задать значение делителя тактового сигнала в регистре IWDG_PR;
  • задать основание счета в регистре IWDG_RLR;
  • дождаться готовности IWDG: убедится, что биты состояния в регистре IWDG_SR сброшены;
  • для активации оконного режима записать верхнее граничное значение в регистр IWDG_WINR;
  • запустить IWDG. Для этого записать значение 0x0000 AAAA в регистр управления IWDG_KEY.

WWDG: оконный сторожевой таймер

Помимо независимого сторожевого таймера IWDG в составе микроконтроллеров STM32G0 присутствует оконный сторожевой таймер WWDG (System Window Watchdog). Он также используется для формирования сброса при зависаниях или неадекватном поведении системы. В отличие от IWDG, оконный таймер использует тактовый сигнал периферийной шины APB.

Структура сторожевого таймера WWDG представлена на рисунке 57. Основой WWDG является 7-битный вычитающий счетчик. Тактирование счетчика выполняется от сигнала PCLK, поделенного с помощью двух делителей. Первый делитель имеет фиксированный коэффициент деления, равный 4096. Второй делитель является программируемым. Его коэффициент деления определяется полем WDGTB[2:0] из регистра WWDG_CFR. Перегружаемое начальное значение счетчика хранится в поле T[6:0] регистра WWDG_CR. В поле W [6:0] регистра WWDG_CFR хранится верхнее граничное значение, определяющее защиту от преждевременного сброса. WWDG имеет два выхода: wwdg_out_rst – сигнал сброса микроконтроллера, wwdg_it – сигнал прерывания. Сторожевой таймер может генерировать дежурное прерывание EWI (Early Wakeup Interrupt), которое позволяет системе аварийно сбросить WWDG до сброса системы.

Рис. 57. Структура оконного сторожевого таймера WWDG

Рис. 57. Структура оконного сторожевого таймера WWDG

Принцип работы сторожевого таймера WWDG показан на рисунке 58. При запуске в вычитающий счетчик помещается начальное значение, хранящееся в поле T[6:0]. Далее каждый внутренний такт содержимое счетчика уменьшается на 1. Если счетчик досчитает до значения 0x3F – будет сгенерирован сигнал сброса системы. Чтобы этого не происходило пользовательская программа должна периодически обновлять счетчик. При обновлении в счетчик снова загружается значение T[6:0]. Существует и еще одно условие сброса системы. Если программа попытается обновить WWDG слишком рано и значение счетчика окажется больше верхней разрешенной границы, заданной в поле W [6:0], то также будет сгенерирован сигнал сброса системы. Стоит помнить, что после запуска таймера WWDG он не может быть остановлен до сброса системы, а может быть только сброшен пользовательской программой.

Рис. 58. Принцип работы оконного сторожевого таймера WWDG

Рис. 58. Принцип работы оконного сторожевого таймера WWDG

Таймаут WWDG рассчитывается по формуле 1:

$$t_{WWDG}=t_{PCLK}\times 4096 \times 2^{WDGTB[2:0]}\times \left(T[5:0]+1 \right);\:(мс)\qquad{\mathrm{(}}{1}{\mathrm{)}}$$

Важной особенностью WWDG является наличие дежурного прерывания EWI (Early Wakeup Interrupt). Это прерывание генерируется, когда вычитающий счетчик WWDG достигает значения 0x40 (то есть за один такт до 0x3F). Выполняя обработку этого прерывания, программа может экстренно сбросить счетчик WWDG или подготовить систему к сбросу. Для разрешения прерывания EWI необходимо установить бит EWI в регистре WWDG_CFR.

Сторожевой таймер WWDG может работать в режимах пониженного потребления вплоть до «Stop». Для этого необходимо установить бит WWDGSMEN в регистре RCC_APBSMENR1.

IRTIM: ИК-интерфейс

Микроконтроллеры STM32G0 позволяют максимально просто реализовывать ИК-интерфейс с помощью специализированного модуля IRTIM.

Для работы модуля IRTIM требуется дополнительная периферия (рисунок 59). Для генерации несущей частоты используется таймер TIM17. Модуляция сигнала выполняется с помощью одного из источников: таймера TIM16 и универсальных приемопередатчиков USART. В случае с STM32G071xx и STM32G081xx это USART1 и USART4, а для STM32G031xx и STM32G041xx это USART2. Для выбора источника модуляции используется мультиплексор, состояние которого определяется полем IR_MOD[1:0] регистра SYSCFG_CFGR1. При необходимости выходной сигнал может быть инвертирован. За это отвечает бит IR_POL регистра SYSCFG_CFGR1. Далее сигнал поступает на вывод микроконтроллера (PA13 или PB9).

Рис. 59. Структура ИК-интерфейса IRTIM

Рис. 59. Структура ИК-интерфейса IRTIM

Как видно из схемы на рисунке 59, для нормальной работы ИК-интерфейса необходимо предварительно настроить все используемые периферийные блоки: таймеры, USART и порты ввода-вывода. Стоит также отметить, что для порта PB9 может быть активирована функция повышенной нагрузочной способности, которая позволяет напрямую управлять даже относительно мощными светодиодами. За это отвечает бит I2C_PB9_FMP регистра SYSCFG_CFGR1. Подробно о повышенной нагрузочной способности рассказывалось в первой статье из данного цикла.

GPTIM: таймеры общего назначения

Микроконтроллеры STM32G0 предлагают широкий выбор таймеров общего назначения. При этом работа с таймерами семейства STM32G0 практически полностью идентична работе с таймерами других семейств STM32. В частности, в STM32G0 используется традиционное разбиение таймеров на функциональные группы (таблица 32):

  • General-purpose – таймеры общего назначения, которые могут использоваться в различных приложениях для генерации выходных импульсов, измерения временных интервалов, обработки сигналов с датчиков, например, с энкодеров или датчиков Холла;
  • Advanced – таймеры с расширенными возможностями, способные выполнять все те же функции, что и таймеры общего назначения, но, помимо этого, обладающие дополнительными возможностями для управления электродвигателями и мощными преобразователями напряжения. Кроме стандартных выходов, такие таймеры имеют комплементарные;
  • Одноканальные таймеры общего назначения способны выполнять все те же функции, что и таймеры общего назначения, но имеют только один канал;
  • Двухканальные таймеры общего назначения способны выполнять все те же функции, что и таймеры общего назначения, но имеют два канала;
  • Basic timers – базовые таймеры, отличающиеся упрощенным функционалом и не имеющие внешних выходов. Они предназначены для работы с внутренней периферией микроконтроллера, например, с ЦАП или АЦП;
  • Low-power timers – таймеры для режимов пониженного потребления. Подробнее о них рассказывается в разделе «LPTIM: таймеры для режимов пониженного потребления».

Таблица 32. Типы таймеров в STM32G0

Тип таймера Название
Advanced (с расширенным функционалом) TIM1
General purpose (общего назначения) 32-битные TIM2
16-битные TIM3
Basic (базовые) TIM6 и TIM7
Одноканальные TIM14
Двухканальные
Одноканальные с комплементарными выходами TIM16, TIM17
Двухканальные с комплементарными выходами TIM15
LPTIM LPTIM1, LPTIM2

Тип таймера напрямую определяет его функционал (таблица 33). Сразу стоит отметить, что таймеры TIM1 и TIM15 обладают собственным ФАПЧ, который позволяет им работать на частотах до 128 МГц, что вдвое выше, чем частота системы.

Таблица 33. Возможности различных типов таймеров в STM32G0

Параметр TIM1 TIM2 TIM3 TIM6 TIM7 TIM14 TIM15 TIM16 TIM17
Разрешение, бит 16 32 16 16 16 16 16 16
Максимальная частота, МГц 128 64 64 64 64 64 128 64 64
Делитель, бит 16 бит
Направление счета Вверх, вниз, верх и вниз Вверх
Синхронизация Ведущий и ведомый Ведущий Ведущий и ведомый Ведущий
Количество каналов 6 4 0 1 2 1
Триггерный вход + + +
Режим захвата (Input capture mode) + + + + + + +
ШИМ-вход (PWM input mode) + + + +
Режим принудительного состояния выхода (Forced output mode) + + + + + + +
Режим сравнения (Output compare mode) + + + + + + +
ШИМ-выходы (PWM) + + + + + + +
Программируемое мертвое время + +
Входы BREAK 2 (двунаправленные) 0 0 0 1 (двунаправленный)
Режим однократного запуска (One pulse mode) + + + + + + +
Режим однократного запуска со внешним сигналом запуска + + + +
Режим энкодера + + +
DMA + + + + + + + +

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

Рис. 60. Структура таймера TIM1

Рис. 60. Структура таймера TIM1

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

LPTIM: таймеры для режимов пониженного потребления

Рассмотренные в предыдущем разделе таймеры общего назначения обеспечивают решение широкого спектра задач, однако использовать их можно только в режимах до «Low-power sleep» включительно. Если же требуется работа в более глубоких спящих режимах, то следует использовать 16-битные таймеры LPTIM1 и LPTIM2.

Главной отличительной особенностью таймеров LPTIM является их двухдоменная система тактирования (рисунок 61). Регистры LPTIM подключены к шине APB и работают с тактовой частотой PCLK, а само ядро таймера использует независимый тактовый сигнал, источником которого могут быть LSE, LSI, HSI16 или PCLK. Таким образом, в режиме пониженного потребления, когда таймеры общего назначения находятся в состоянии сна, таймеры LPTIM1 и LPTIM2 продолжают работать. Кроме того, LPTIM1 и LPTIM2 могут использоваться в качестве счетчиков, даже если все внутренние источник тактирования отключены. Для этого внешний счетный сигнал необходимо подключить ко входу LPTIM_IN1.

Рис. 61. Структура таймера LPTIM1

Рис. 61. Структура таймера LPTIM1

Таймеры LPTIM1 и LPTIM2 имеют некоторые важные отличия. В частности, LPTIM2 имеет только один вход и не может работать в режиме энкодера.

Таймеры LPTIM имеют три режима работы: ШИМ, режим с однократным запуском и режим с однократным переключением (рисунок 62). Выбор режима работы производится с помощью бита WAVE регистра LPTIM_CSGR и бита SNGSTRT регистра LPTIM_CR. При необходимости пользователь может менять полярность выходного сигнала с помощью бита WAVPOL регистра LPTIM_CFGR.

Рис. 62. Режимы работы таймера LPTIM

Рис. 62. Режимы работы таймера LPTIM

Таймер LPTIM1 способен работать в режиме энкодера с возможностью обратного счета (рисунок 63).

Рис. 63. Работа таймера LPTIM1 в режиме энкодера

Рис. 63. Работа таймера LPTIM1 в режиме энкодера

LPTIM имеет возможность генерации следующих прерываний:

  • прерывание по совпадению (Compare match) генерируется, когда содержимое счетчика LPTIM_CNT становится равным или больше чем содержимое регистра сравнения LPTIM_CMP;
  • прерывание по совпадению с LPTIM_ARR (Auto-reload match) генерируется, когда содержимое счетчика LPTIM_CNT становится равным содержимому регистра LPTIM_ARR;
  • прерывание по триггеру (External trigger event) генерируется при обнаружении внешнего триггера;
  • прерывание по обновлению регистра LPTIM_ARR (Autoreload register write completed) генерируется при обновлении регистра LPTIM_ARR;
  • прерывание по обновлению регистра LPTIM_CMP (Compare register write completed) возникает при обновлении регистра LPTIM_CMP;
  • прерывание при изменении направления счета (Direction change) генерируется при смене направления счета при работе в режиме энкодера.

RTC: часы реального времени RTC

В микроконтроллерах STM32G0 реализованы часы реального времени RTC (Real-Time Clock) с функцией календаря. Главной особенностью RTC является возможность работы во всех режимах пониженного потребления до «Shutdown» включительно, а также возможность питания от дежурной батарейки. Потребление RTC (с учетом потребления LSE) составляет 300 нА при напряжении питания 1,8 В.

RTC имеет следующие особенности:

  • календарь с измерением долей секунд, секунд, минут, часов, дней недели, дат, месяцев и лет;
  • автоматическую коррекцию количества дней в месяце (28, 29, 30, 31);
  • возможность коррекции летнего времени;
  • два программируемых будильника;
  • калибровку RTC с помощью введения калибровочных тактовых импульсов количеством 1…32767;
  • возможность формирования временных меток;
  • 17-битный пробуждающий таймер WUT, позволяющий генерировать периодические события с заданным периодом.

На рисунке 64 представлена структурная схема RTC. Из нее видно, что RTC состоит из двух доменов тактирования. Регистры RTC подключены к шине APB и тактируются от PCLK. Ядро RTC использует независимое тактирование от сигнала rtc_ker_ck. В качестве источника для rtc_ker_ck могут выступать LSE, HSE/32, LSI. При работе в режиме «Stop» тактирование ядра RTC может производиться только от LSE или LSI. В режиме «Shutdown» и VBAT тактирование возможно только от LSE. Входной тактовый сигнал rtc_ker_ck дополнительно делится с помощью 7-битного асинхронного делителя. Получаемый в результате деления сигнал ck_arpe является основным тактовым сигналом для большинства блоков в составе RTC. Поэтому если требуется обеспечить минимальное потребление RTC, то необходимо выбирать максимальное значение делителя (по умолчанию 128). Сигнал ck_arpe, в свою очередь, дополнительно делится для получения опорного тактового сигнала 1 Гц для часов и календаря. RTC имеет два выхода, на которые могут подаваться сигналы от будильника, калибровочный тактовый сигнал, флаг пробуждения.

Рис. 64. Структура RTC

Рис. 64. Структура RTC

RTC имеет собственную защиту от записи. По этой причине для инициализации RTC используется особый алгоритм. Для получения доступа к регистрам RTC необходимо установить бит DBP (Backup Domain Protection) в регистре PWR_CR. После этого необходимо записать кодовое значение в регистр RTC_WRP.

RTC генерирует следующие виды прерываний:

  • Alarm A возникает при достижении момента времени, заданного в регистрах RTC_ALRMASSR и RTC_ALRMAR;
  • Alarm B возникает при достижении момента времени, заданного в регистрах RTC_ALRMBSSR и RTC_ALRMBR;
  • Wakeup timer interrupt сообщает о том, что 16-битный таймер автопробуждения достиг значения 0;
  • Timestamp возникает при наступлении события с проставлением временной метки.

Литература

  1. Reference manual. STM32G0x1 advanced Arm®-based 32-bit MCUs. (Rev.2 2019).

Список ранее опубликованных глав

  1. Микроконтроллеры STM32G0: Архитектура и системная периферия
  2. Микроконтроллеры STM32G0: Память и безопасность
•••

Наши информационные каналы

О компании ST Microelectronics

Компания STMicroelectronics является №1 производителем электроники в Европе. Компоненты ST широко представлены в окружающих нас потребительских товарах – от iPhone до автомобилей разных марок. Лидеры индустриального рынка выбирают компоненты ST за их надежность и выдающиеся технические параметры. В компании ST работает 48 000 сотрудников в 35 странах. Производственные мощности расположены в 12 странах мира. Более 11 тысяч сотрудников заняты исследованиями и разработками – инновационное лидерство ...читать далее

Товары
Наименование
STM32G030C6T6 (ST)
NUCLEO-G071RB (ST)
STM32G031K6T6 (ST)
STM32G071B-DISCO (ST)
STM32G070KBT6 (ST)
STM32G071CBT6 (ST)
STM32G071CBT6TR (ST)
STM32G071CBU6 (ST)
STM32G071KBU6N (ST)
STM32G071KBU6 (ST)
STM32G071RBT6 (ST)
STM32G081RBT6 (ST)