Урок 6. Порты ввода-вывода STM32.

В уроке узнаем структуру, функциональные возможности, электрические характеристики портов ввода-вывода общего назначения. Изучим регистры микроконтроллера для управления портами.
Кому-то кажется, что порты ввода-вывода очень простой элемент микроконтроллера. Выбрал для вывода режим — вход или выход, считал или установил его состояние.
Не пропускайте этот урок, прочитайте внимательно. По опыту уроков Ардуино знаю, что много вопросов возникает из-за незнания всего того, что я описываю в этой статье.
И про аппаратное устройство портов и их электрические характеристики я пишу не для того, чтобы набрать объем урока. Это очень важный вопрос. Знание его необходимо для подключения к микроконтроллеру различных электронных компонентов. Микроконтроллер сам по себе никогда не работает. К нему всегда что-то подключается.
Через порты ввода-вывода микроконтроллер управляет и связывается со всем, что к нему подключено. Есть еще коммуникационные интерфейсы, но о них в последующих уроках. Хотя интерфейсы также используют порты, только в режиме альтернативных функций.
В системе STM32 применяется общепринятое название портов ввода-вывода общего назначения, а именно GPIO (General purpose input-output).
Под “общим назначением” имеется в виду, что состояние выводов устанавливается или считывается программно, т.е. вывод не является входным или выходным сигналом какого-либо аппаратного узла микроконтроллера.
В системе STM32:
- Порты обозначаются GPIOA, GPIOB, GPIOC и т.д. На схеме микроконтроллера соответствующие портам выводы обозначаются PA0-PA15, PB0-PB15, PC0-PC15…
- Порты 16ти разрядные, т.е. у каждого порта 16 выводов.
- Режим и состояние каждого вывода могут быть установлены отдельно, независимо от других выводов.
- Каждый вывод может использоваться в режиме:
- Input floating – вход без подтягивающего резистора, брошенный в воздухе вход.
- Input pull-up – вход с подтягивающим резистором, подключенным к питанию микроконтроллера.
- Input pull-down — вход с подтягивающим резистором, подключенным к общему проводу (земле).
- Analog – аналоговый вход ( вход АЦП, компараторов и т.п.).
- Output open-drain – выход с открытым стоком. Функционально аналогичен выходу с открытым коллектором. При низком логическом уровне замыкает вывод на землю, при высоком – бросает в воздухе.
- Output push-pull – обычный активный выход. При низком логическом уровне напряжение на выводе равно 0, при высоком – напряжение близко к напряжению питания микроконтроллера, обычно + 3 В.
- Alternate function push-pull – альтернативная функция вывода в обычном (активном) режиме.
- Alternate function open-drain – альтернативная функция вывода в режиме открытый сток.
- GPIOA – 16 выводов: PA0-PA15;
- GPIOB – 16 выводов: PB0-PB15;
- GPIOC – 3 вывода: PC13-PC15;
- GPIOD – 2 выводов: PD0, PD1.

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

Нас интересует правая, выходная часть.
Режим входов.
При использовании вывода в качестве входа, к нему могут быть подключены подтягивающие резисторы сопротивлением порядка 40 кОм. Либо к питанию Vdd, либо к земле Vss.
Основные для нас входные параметры портов.
Параметр Значение Напряжение низкого уровня Не более 0,35 VDD
При питании 3,3 В не более 1,16 ВНапряжение высокого уровня Не менее 0,65 VDD
При питании 3,3 В не менее 2,15 ВТок утечки ± 1 мкА Сопротивление подтягивающих резисторов 30 – 50 кОм,
типовое значение 40 кОмЕмкость 5 пкФ Обратите внимание, какая небольшая разница между входными напряжениями низкого и высокого уровня. За это я и не люблю 3-вольтовые контроллеры.
Согласно схеме к выводу подключены 2 защитных диода. Один на землю Vss, другой на шину питания Vdd. Первый замыкает через себя входное напряжение отрицательной полярности, другой ограничивает его на уровне Vdd, у нас на плате это 3,3 В.
Сигналы с напряжением, превышающим эти пределы должны подключаться через ограничительные резисторы. Входной ток не должен превышать ± 5 мА. Это предельный ток защитных диодов.
Еще надо помнить, что втекающий ток через защитные диоды поступает на источник питания платы. Если он превышает ток потребления платы, то напряжение питания микроконтроллера будет повышаться и может достигнуть недопустимого значения. Это обычная проблема в подобных схемах.
Но большая часть входов микроконтроллера допускает подачу напряжения 5 В. Это, так называемые, толерантные к 5 В входы. В схеме для таких выводов верхний защитный диод подключен не к питанию Vdd, а к ограничителю напряжения Vdd_ft. Толерантные выводы обозначаются FT (five volt tolerant). Напряжение ограничевается до уровня на 4 В выше Vdd. Сделано это для подключения сигналов с 5 В уровнями. На схеме распределения выводов STM32F103C8T6 толерантные к 5 В выводы отмечены закрашенными точками.
Предельно-допустимые входные параметры портов.
Параметр Значение Напряжение на толерантных входах Не менее — 0,3 В, не более Vdd + 4 В
При питании 3,3 В — 0,3 … 7,3 ВНапряжение на остальных входах Не менее — 0,3 В, не более 4 В Максимальный втекающий ток через защитные диоды ± 5 мА Режим выходов.
В режиме выхода порта работают 2 комплементарных транзистора.
- В активном режиме они открываются по очереди, соединяя выход с шиной питания или землей.
- В режиме с открытым стоком работает только нижний транзистор, замыкая выход на землю при низком логическом уровне.
Выходные параметры портов.
Параметр Значение Напряжение низкого уровня при втекающем токе 8 мА Не более 0,4 В Напряжение низкого уровня при втекающем токе 20 мА Не более 1,3 В Напряжение высокого уровня при вытекающем токе 8 мА Не менее Vdd – 0,4 В Напряжение высокого уровня при вытекающем токе 20 мА Не менее Vdd – 1,3 В Предельно-допустимые выходные параметры портов.
Параметр Значение Максимальный вытекающий ток вывода 25 мА Максимальный втекающий ток вывода — 25 мА Общий вытекающий или втекающий ток портов Не более 150 мА. Получается, что к каждому выводу порта можно подключать нагрузку до 25 мА. Но при этом уровень логического сигнала выйдет за допустимые значения логических уровней. Чтобы этого не произошло нельзя нагружать вывод током свыше 8 мА.
Программное управление портами STM32.
Для каждого порта (16 выводов) есть два 32х разрядных регистра конфигурации. Они образуют 64 битный регистр конфигурации порта.
Младший регистр конфигурации портов GPIOx_CRL (Port configuration register low)

Старший регистр конфигурации портов GPIOx_CRH (Port configuration register high)

На каждый вывод отводится 4 бита, которые делятся на 2 битные поля режима и конфигурации.
Поле режима определяет направление работы вывода – вход или выход. В случае выхода оно задает максимальную частоту передачи выходного сигнала. Очевидно, это влияет на энергопотребление микроконтроллера.
Поле режима (биты Mode).
Биты режима MODE [1 : 0] Режим 0 0 Вход 0 1 Выход, синхронизация 10 мГц 1 0 Выход, синхронизация 2 мГц 1 1 Выход, синхронизация 50 мГц Поле режима дополняют биты конфигурации.
Конфигурация Биты конфигурации
CNF [1 : 0]Биты режима
MODE [1 : 0]Бит в регистре вывода данных
PxODRВыход общего назначения Активный выход 0 0 0 1 Состояние регистров конфигурации можно защитить от непредусмотренных изменений. Для этого существует регистр блокировки конфигурации.
Регистр блокировки конфигурации порта GPIOx_LCKR (Port configuration lock register)

Каждому выводу порта соответствует бит блокировки LCK0 – LCK15. При установке бита в 1 запрещается изменение соответствующих битов режима и конфигурации. После задания всех нужных битов регистра блокировки необходимо активизировать защиту. Для этого надо в 16й бит регистра блокировки (LCKK) последовательно записать 1, 0, 1. После этого блокировка будет действовать и изменение защищенных битов конфигурации и режима возможно только после сброса микроконтроллера.
Проверить установлена ли защита конфигурации можно чтением этого же 16-го бита (LCKK). При активированной защите два подряд чтения бита должны дать результат 0, 1.
Доступ к портам происходит через регистры ввода и вывода данных.
Регистр ввода данных порта GPIOx_IDR (Port input data register)

Регистр вывода данных порта GPIOx_ODR (Port output data register)

Первый доступен только для чтения. Биты IDR0 – IDR15 содержат состояние соответствующих выводов порта.
Запись данных во второй регистр устанавливает состояние выводов порта (ODR0 – ODR15).
Если задан режим вывода – вход, то состояние соответствующего бита ODR0 – ODR15 определяет, куда подключен подтягивающий резистор, к шине питания или земле.
Для управления состоянием отдельных выводов можно воспользоваться регистрами битовой обработки.
Регистр установки/сброса битов GPIOx_BSRR (Port bit set/reset register)

Регистр установки/сброса битов разделен на 2 равные части(0-15 и 16-31). Первая предназначена для установки выводов в состояние 1, вторая – в состояние 0.
- Запись данного с 1 в битах BS0 – BS15 устанавливает соответствующие выводы в состояние высокого уровня.
- Запись данного с 1 в битах BR0 – BR15 переводит соответствующие выводы в состояние низкого уровня.
Таким образом, одним обращением к регистру можно установить или сбросить нужные выводы, не изменяя состояние остальных. Если производить эту операцию с помощью регистра вывода данных, то потребуется операции чтение, модификация и запись.
Регистр сброса битов GPIOx_BRR (Port bit reset register)

Это 16ти разрядный регистр, который работает точно так, как младшая половина предыдущего регистра установки/сброса.
Запись слова с 1 в битах BR0 – BR15 переводит соответствующие выводы в состояние низкого уровня.
Конфигурация портов с помощью STM32CubeMX.
Здесь все просто и понятно. Мы это уже делали.
Давайте настроим вывод PB12 на вход с подтягивающим резистором к шине питания, а PB13 на активный выход.
Закладка System Core -> GPIO.
Правой кнопкой мыши нажимаем на вывод PB12. Выбираем GPIO_Input.

Для вывода PB13 задаем режим GPIO_Output

В поле Configuration выбираем строку PB12 и задаем Pull-up и имя вывода. Я написал Button.

Выбираем строку PB13 и задаем:
- высокий уровень при включении (High);
- активный выход (Output Push Pull);
- имя Led.

Я не буду описывать режимы, они очевидны.
Давайте настроим систему тактирования и вывод PC13, как в уроке 3, и создадим проект Lesson6_1.

Проект будем использовать в следующем уроке.
В нем научимся работать с портами через регистры библиотеки CMSIS.
Как и зачем читать даташиты, если микроконтроллеры – ваше хобби

Микроэлектроника – модное увлечение последних лет благодаря волшебному Arduino. Но вот беда: при должном интересе перерасти DigitalWrite() получается быстро, а что делать дальше – не совсем ясно. Разработчики Arduino приложили немало усилий для снижения порога вхождения в свою экосистему, но за ее пределами по-прежнему колышется темный лес суровой схемотехники, малодоступный любителю.
Например, даташиты. Вроде бы в них есть все, бери и пользуйся. Но только их авторы явно не ставят перед собой задачу популяризации микроконтроллеров; иногда кажется, что они специально злоупотребляют непонятными терминами и аббревиатурами при описании простых вещей, чтобы максимально запутать непосвященного. Но не все так плохо, при желании ларчик открывается.
В этой статье я поделюсь опытом общения гуманитария с даташитами в хобби-целях. Текст предназначен для выросших из штанишек Arduino любителей, он предполагает некоторое представление о принципах работы микроконтроллеров.
Начну с традиционного
Мигаем светодиодом на Ардуино
void setup() < DDRB |= (1<<5); >void loop()
«Что это? – Спросит искушенный читатель. – Зачем ты что-то пишешь во входной регистр PINB? Он же только для чтения!» Действительно, документация Arduino, как и большинство учебных статей в интернете, утверждает, что этот регистр read-only. Я и сам так думал, пока не перечитал даташит к Atmega328p, готовя это статью. А там:
Это относительно новый функционал, его не было на Atmega8, о нем не все знают или не упоминают из соображений обратной совместимости. Но вполне годный для демонстрации мысли, что даташиты стоит читать, чтобы использовать все возможности чипа, включая малоизвестные. И это не единственная причина.
Зачем еще читать даташиты
Обычно ардуинщики, наигравшись со светодиодами и AnalogWrite’ами, начинают подключать к плате всякие модули и чипы, для которых есть уже написанные библиотеки. Рано или поздно появляется библиотека, работающая не так, как надо. Тогда любитель начинает ее ковырять, чтобы починить, а там.
А там происходит что-то категорически непонятное, поэтому приходится отправляться в гугл, читать многочисленные тьюториалы, дергать по частям чей-то подходящий код и наконец добиваться своего. Это дает мощное ощущение свершения, но на самом деле процесс напоминает изобретение велосипеда путем реверс-инжиниринга мотоцикла. Причем понимания, как работает этот велосипед, не прибавляется. Знаю, поскольку сам этим занимался довольно долго.
Если бы я вместо этого увлекательного занятия потратил пару дней на изучение документации к Atmega328, я бы сэкономил огромное количество времени. В конце концов, это довольно простой микроконтроллер.
Таким образом, читать даташиты надо хотя бы для того, чтобы представлять себе, как вообще устроен микроконтроллер и что он умеет делать. И еще:
- чтобы проверять и оптимизировать чужие библиотеки. Их часто пишут такие же любители, изобретающие велосипед; или же, напротив, авторы намеренно делают в них избыточную защиту от дурака. Пусть будет в три раза больше и медленнее, зато точно сработает;
- чтобы иметь возможность использовать в проекте чипы, к которым никто не написал библиотеку;
- чтобы облегчить себе задачу по миграции с одной линейки МК на другую;
- чтобы наконец оптимизировать свой старый код, который никак не влезал в Ардуину;
- чтобы научиться управлять любым чипом напрямую через его регистры, не заморачиваясь изучением устройства его библиотек, если таковые вообще есть.
Зачем писать в регистры напрямую, когда есть HAL и LL?
Словарик
HAL, Hardware Abstraction Layer – библиотека для управления микроконтроллером с высоким уровнем абстракции. Если надо использовать интерфейс SPI1, просто настраиваем и включаем SPI1, не задумываясь, какие регистры за что отвечают.
LL, Low Level API – библиотека, содержащая макросы или структуры с адресами регистров, позволяющая обращаться к ним по имени. DDRx, PORTx, PINx на Атмеге – это LL.Споры на тему «HAL, LL или регистры» регулярно случаются в комментариях на Хабре. Не претендуя на доступ к астральному знанию, просто поделюсь своим любительским опытом и соображениями.
Более-менее разобравшись с Атмегой и начитавшись статей про прекрасности STM32, я накупил полдюжины разных плат – и Discovery, и «Синие Таблетки», и даже просто чипы под свои самоделки. Все они два года пылились в коробке. Иногда я говорил себе: «все, с этих выходных осваиваю STM», запускал CubeMX, генерил сетап для SPI, смотрел на получившуюся стену текста, обильно сдобренную копирайтами STM, и решал, что это как-то уж слишком.

Разобраться, что тут понаписал CubeMX, конечно, можно. Но одновременно понятно, что запомнить все формулировки, чтобы потом писать их руками, нереально. А уж дебажить это, если я случайно забуду в Кубе поставить какую-нибудь галочку, – совсем привет.
Прошло два года, я по-прежнему облизывался в ST MCU Finder на всякие вкусные, но недоступные моему пониманию чипы, и случайно наткнулся на замечательную статью, пусть и про STM8. И внезапно понял, что все это время стучался в открытую дверь: регистры у STM устроены так же, как у любого другого МК, и для работы с ними Куб необязателен. А что, так можно было.
HAL и конкретно STM32CubeMX – инструмент для профессиональных инженеров, плотно работающих с чипами STM32. Главная фишка – высокий уровень абстракции, возможность быстро мигрировать с одного МК на другой и даже с одного ядра на другое, оставаясь в рамках линейки STM32. Любители с такими задачами сталкиваются редко – наш выбор МК, как правило, ограничен ассортиментом AliExpress, и мы чаще мигрируем между кардинально разными чипами – переезжаем с Атмеги на STM, с STM на ESP, ну или что там нам новенького подкинут китайские друзья. HAL здесь не поможет, а времени его изучение съест немало.
Остается LL – но от него до регистров полшага. Лично я нахожу написание своих макросов с адресами регистров полезным: я внимательнее изучаю даташит, думаю, что мне потребуется в будущем, а что точно нет, лучше структурирую свои программы, ну и вообще преодоление способствует запоминанию.
Кроме того, есть нюанс с популярным STM32F103 – для него существуют две несовместимые версии LL, одна официальная от STM, вторая – от Leaf Labs, используемая в проекте STM32duino. Если писать open-source библиотеку (а у меня была именно такая задача), надо либо делать две версии, либо обращаться к регистрам напрямую.
Наконец, отказ от LL, на мой взгляд, упрощает миграцию, особенно если закладываться на нее с самого начала работы над проектом. Утрированный пример: напишем ардуиновский blink в Atmel Studio без LL:
#include #define _REG(addr) (*(volatile uint8_t*)(addr)) #define DDR_B 0x24 #define OUT_B 0x25 int main(void) < volatile uint32_t k; _REG(DDR_B) |= (1<<5); while(1) < _REG(OUT_B) |= (1<<5); for (k=0; k<50000; k++); _REG(OUT_B) &= ~(1<<5); for (k=0; k<50000; k++); >>Чтобы этот код замигал светодиодом на китайской платке с STM8 (из ST Visual Desktop), в нем достаточно поменять два адреса:
#define DDR_B 0x5007 #define OUT_B 0x5005Да, я использую особенность подключения светодиода на конкретной плате, мигать будет очень медленно, но будет же!
Какие бывают даташиты
В статьях и на форумах, и русско-, и англоязычных, под «даташитами» понимают любую техническую документацию к чипам, так же поступаю и я в этом тексте. Формально они – лишь один из видов такой документации:
Datasheet – ТТХ, тактико- технические характеристики. Обязательно имеется у любого электронного компонента. Справочная информация, полезно держать под рукой, но вдумчиво читать в нем особо нечего. Впрочем, чипы попроще часто ограничиваются даташитом, чтобы не плодить лишних документов; в этом случае Reference Manual включается сюда же.
Reference Manual – собственно инструкция, здоровая книжка на 1000+ страниц. Подробно расписывается работа всего, что понапихано в чип. Главный документ для освоения микроконтроллера. В отличие от datasheet, инструкции пишут для широкой линейки МК, в них содержится много информации о периферии, отсутствующей в вашей конкретной модели.
Programming Manual или Instruction Set Manual – инструкция по уникальным командам микроконтроллера. Предназначена для тех, кто программирует на Ассемблере. Авторы компиляторов активно ее используют для оптимизации кода, поэтому в общем случае нам она не потребуется. Но заглядывать сюда полезно для общего понимания, за некоторыми специфическими командами типа выхода из прерывания, а также при активном использовании дебаггера.
Application Note – полезные советы по решению конкретных задач, часто с примерами кода.
Errata Sheet – описание случаев нестандартного поведения чипа с вариантами обхода, если есть.
Что есть в даташитах
Непосредственно в Datasheet нам могут потребоваться такие разделы:
Device Summary – первая страница даташита вкратце рассказывает об устройстве. Очень полезна в ситуациях, когда вы где-то нашли чип (увидели в магазине, выпаяли, встретили упоминание) и хотите понять, что это.
General Description – более подробное описание возможностей чипов из линейки.
Pinouts – схемы распиновки для всех возможных корпусов чипа (на какой ноге какой пин).
Pin Description – описание назначения и возможностей каждого пина.
Memory Map – карта адресов в памяти нам вряд ли потребуется, но иногда в нее включается также таблица адресов блоков регистров.
Register Map – таблица адресов блоков регистров, как правило, находится именно в даташите, а в Ref Manual – только сдвиги (address offsets).
Electrical Characteristics – в этом разделе нас в первую очередь интересуют absolute maximum ratings, перечисляющие максимальные нагрузки на чип. В отличие от неубиваемой Atmega328p, большинство МК не позволяет подключать к пинам серьезные нагрузки, что становится неприятным сюрпризом для ардуинщиков.
Package Information – чертежи доступных корпусов, полезные при проектировании своих плат.
Reference Manual структурно состоит из разделов, посвященных конкретной периферии, указанной в их заголовке. Каждую главу можно условно поделить на три части:
Overview, Introduction, Features – обзор возможностей периферии;
Functional Description, Usage Guide или просто основной блок раздела – подробное текстовое описание принципов устройства периферии и способов ее использования;
Registers – описание управляющих регистров. В простых случаях типа GPIO или SPI этого может быть вполне достаточно, чтобы начать использовать периферию, но часто приходится все-таки читать и предыдущие части.
Как читать даташиты
Даташиты с непривычки отпугивают своим объемом и обилием непонятных слов. На самом деле все не так страшно, если знать несколько лайфхаков.
Установите хорошую PDF-читалку. Даташиты пишутся в славных традициях бумажных инструкций, их здорово распечатать, проложить пластиковыми закладками и сшить. Гипертекст в них наблюдается в следовых количествах. К счастью, хотя бы структуру документа оформляют закладками, поэтому годная читалка с удобной навигацией очень нужна.
Даташит – не учебник Страуструпа, в нем не надо читать все подряд. Если воспользовались предыдущим советом – просто найдите в панели закладок нужный раздел.
Даташиты, особенно Reference Manuals, могут описывать возможности не конкретного чипа, а всей линейки. Это значит, что половина, а то и две трети информации не имеет отношения к вашему чипу. Прежде чем изучать регистры TIM7, проверьте в General Description, есть ли он у вас.
Знать английский достаточно на базовом уровне. Даташиты наполовину состоят из терминов, незнакомых среднестатистическому носителю языка, и наполовину – из простых связующих конструкций. Еще бывают прекрасные китайские даташиты на китайском английском, где половина также термины, а вторая половина – рандомный набор слов.
Если встречаете незнакомое слово, не пытайтесь перевести его с помощью англо-русского словаря. Если вас ставит в тупик hysteresis, то от перевода «гистерезис» теплее вам не станет. Пользуйтесь Гуглом, Stack Overflow, Википедией, форумами, где нужное понятие будет объяснено простыми словами с примерами.
Лучший способ понять прочитанное – проверить в деле. Поэтому держите под рукой отладочную плату, с которой знакомитесь, а лучше две – на случай, если все-таки что-то недопоняли и увидели волшебный дымок.
Полезна привычка держать под рукой даташит, когда вы читаете чей-то тьюториал или изучаете чужую библиотеку. Вполне возможно, в нем вы найдете более оптимальное решение своей задачи. И наоборот – если из даташита никак не удается понять, как же все-таки работает регистр, загуглите его: скорее всего, кто-то уже все описал простыми словами или оставил понятный код на ГитХабе.
Словарик
Немного полезных слов и обозначений, помогающих быстрее освоиться с даташитами. То, что вспомнилось в последние пару дней, дополнения и исправления приветствуются.
Электричество
Vcc, Vdd – «плюс», питание
Vss, Vee – «минус», земля
current – ток
voltage – напряжение
to sink current – работать «землей» для внешней нагрузки
to source current – питать внешнюю нагрузку
high sink/source pin – пин с повышенной «терпимостью» к нагрузкеIO
H, High – на пине Vcc
L, Low – на пине Vss
High Impedance, Hi-Z, floating – на пине ничего нет, «высокое сопротивление», он фактически невидим внешнему миру.
weak pull up, weak pull down – встроенный подтягивающий/стягивающий резистор, примерный аналог 50 кОм (см. даташит). Используется, например, чтобы входной пин не болтался в воздухе, вызывая ложные срабатывания. Weak – потому что его легко «перебить».
push pull – выходной режим пина, в котором он переключается между High и Low – обычный OUTPUT с Arduino.
open drain – обозначение выходного режима, в котором пин может быть либо Low, либо High Impedance / Floating. При этом почти всегда это не «настоящий» открытый сток, есть защитные диоды, резисторы, еще что. Это просто обозначение режима земля/ничего.
true open drain – а вот это уже настоящий открытый сток: пин напрямую ведет в землю, если открыт, или пребывает в подвешенном состоянии, если закрыт. Это значит, что через него при необходимости можно пускать напряжение больше Vcc, но максимум все равно оговаривается в даташите в разделе Absolute Maximum Ratings / Voltage.Интерфейсы
in series – подключенные последовательно
to chain – собирать чипы в цепочку последовательным подключением, увеличивая количество выходов.
shift – сдвиг, обычно обозначает сдвиг битов. Соответственно, to shift in и to shift out – принимать и передавать данные побитно.
latch – задвижка, прикрывающая буфер, пока через него сдвигаются биты. Когда передача закончена, задвижка открывается, биты начинают работать.
to clock in – выполнить побитную передачу, сдвинуть все биты на нужные места.
double buffer, shadow register, preload register – обозначения истории, когда регистр должен уметь принимать новые данные, но придерживать их до какого-то момента. Например, для корректной работы ШИМ его параметры (скважность, частота) не должны меняться, пока не закончится текущий цикл, но новые параметры уже могут быть переданы. Соответственно, текущие держатся в shadow register, а новые попадают в preload register, будучи записанными в соответствующий регистр чипа.Всякое
prescaler – предделитель частоты
to set a bit – установить бит в 1
to clear/reset a bit – сбросить бит в 0 (reset – фишка даташитов STM)
to toggle a bit – поменять значение бита на противоположное (см. пример в начале статьи)Что дальше
Вообще тут планировалась практическая часть с демонстрацией трех проектов на STM32 и STM8, выполненных специально для этой статьи при помощи даташитов, с лампочками, SPI, таймерами, ШИМом и прерываниями:

Но текста получается многовато, поэтому проекты отправляются во вторую часть.
Навык чтения даташитов поможет вам с вашим хобби, но едва ли заменит живое общение с коллегами по увлечению на форумах и в чатах. Для него надо все-таки в первую очередь подтягивать английский язык. А потому дочитавшим – специальный приз: два бесплатных урока в Skyeng при первой оплате по коду HABR2 .
Перевод «open drain output» на русский
The alternative to a push-pull output is a single switch that connects the load either to ground (called an open collector or open drain output) or to the power supply (called an open-emitter or open-source output).
Альтернативой двухтактному выходу является одиночный электронный ключ, который присоединяет нагрузку или к земле (так называемый «выход с открытым коллектором (стоком)») или к источнику питания (так называемый «выход с открытым эмиттером (истоком)»).
Предложить пример
Другие результаты
The open-drain output driver is by no means the standard configuration among digital ICs, and with good reason: it comes with some significant disadvantages.
Выходной каскад с открытым стоком ни в коем случае не является стандартной схемой среди цифровых микросхем, и для этого есть причина: он обладает некоторыми существенными недостатками.
Whenever one of the six monitored voltages falls below its threshold, the open-drain reset output asserts and remains asserted for at least 140 ms after all six voltages exceed their respective thresholds.
Как только одно из шести отслеживаемых напряжений падает ниже порогового уровня, выход RESET\ с открытым истоком устанавливается на низком уровне и остается установленным как минимум 140 мс после того, как все 6 напряжений превысят свои пороговые уровни.
Открытый коллектор

Открытый коллектор представляет собой общий тип вывода на многих интегральных схем (ИС) , которые ведет себя как переключатель , который либо подключен к земле или отсоединен. Вместо вывода сигнала с определенным напряжением или током выходной сигнал подается на базу внутреннего NPN-транзистора , коллектор которого выведен наружу (открыт) на вывод IC. Эмиттер транзистора внутренне подключен к контакту заземления. Если устройство вывода представляет собой полевой МОП-транзистор, выход называется открытым стоком, и он работает аналогичным образом. Например, шина I²C основана на этой концепции.
- 1 Функция
- 2 Применение устройств с открытым коллектором
- 3 МОП-транзистора
- 4 POD Псевдо открытый сток
- 5 См. Также
- 6 Ссылки
- 7 Внешние ссылки
Функция [ править ]
На рисунке база транзистора обозначена как «IC output». Это сигнал от внутренней логики ИС к транзистору. Этот сигнал управляет переключением транзисторов. Внешний выход — коллектор транзистора; транзистор образует интерфейс между внутренней логикой ИС и частями, внешними по отношению к ИС.
В условных обозначениях компонентов схемы открытый выход обозначен этими символами: [1]
- ⎐ для вывода, который выводит low-Z L или hi-Z H (или ⎒ с внутренним подтягивающим резистором )
- ⎏ для вывода, который выводит hi-Z L или low-Z H (или ⎑ с внутренним понижающим резистором)
Выход образует либо разомкнутую цепь, либо соединение с землей. Выход обычно состоит из внешнего подтягивающего резистора , который повышает выходное напряжение при выключении транзистора. Когда транзистор, подключенный к этому резистору, включается, на выходе устанавливается напряжение почти 0 вольт. Выходы с открытым коллектором могут быть полезны для аналогового взвешивания, суммирования, ограничения и т.д., но такие приложения здесь не обсуждаются.
С тремя состояниями логического устройства в отличие от открытого устройства коллектора, так как он состоит из транзисторов источника и приемника тока в обоих логических состояний, а также в качестве контроля , чтобы выключить оба транзистора и изолировать выход.
Приложения устройств с открытым коллектором [ править ]
Поскольку подтягивающий резистор является внешним и его не нужно подключать к напряжению питания микросхемы, вместо него можно использовать более низкое или более высокое напряжение, чем напряжение питания микросхемы (при условии, что оно не превышает абсолютный максимальный номинал выхода микросхемы). . Поэтому схемы с открытым коллектором иногда используются для сопряжения различных семейств устройств с разными уровнями рабочего напряжения. Транзистор с открытым коллектором может быть рассчитан на то, чтобы выдерживать более высокое напряжение, чем напряжение питания микросхемы. Этот метод обычно используется логическими схемами, работающими от 5 В или ниже, для управления устройствами, такими как двигатели, реле 12 В , вакуумные люминесцентные дисплеи 50 В или лампы Nixie, требующие более 100 В.
Еще одно преимущество состоит в том, что к одной линии можно подключить более одного выхода с открытым коллектором. Если все выходы, подключенные к линии, находятся в состоянии высокого импеданса, подтягивающий резистор будет удерживать провод в состоянии высокого напряжения (логическая 1). Если один или несколько выходов устройства находятся в состоянии логического 0 (заземление), они потребляют ток и подтягивают линейное напряжение к земле. Это проводное логическое соединение имеет несколько применений. Устройства с открытым коллектором обычно используются для подключения нескольких устройств к одному сигналу запроса прерывания или общей шине, такой как I²C.. Это позволяет одному устройству управлять шиной без помех от других неактивных устройств. Если бы устройства с открытым коллектором не использовались, то выходы неактивных устройств пытались бы поддерживать высокое напряжение на шине, что приводило бы к непредсказуемому выходу.

Проводное ИЛИ с активным низким уровнем / проводное И с активным высоким уровнем с использованием вентилей с открытым стоком.
Связывая выход нескольких открытых коллекторов вместе, общая линия становится логическим элементом «соединенное И» (положительная-истинная логика) или «проводное ИЛИ» (отрицательная-истинная логика). «Проводное И» ведет себя как логическое И двух (или более) вентилей в том смысле, что это будет логическая 1, когда (все) находятся в состоянии высокого импеданса, и 0 в противном случае. «Проводное ИЛИ» ведет себя как логическое ИЛИ для логики «отрицательная-истина», где на выходе низкий уровень, если на любом из его входов низкий уровень.
Устройства SCSI -1 используют открытый коллектор для электрической сигнализации. [2] SCSI-2 и SCSI-3 могут использовать EIA-485 .
Одной из проблем устройств с открытым коллектором является энергопотребление, поскольку подтягивающий резистор рассеивает мощность всякий раз, когда выходной сигнал понижается, и чем выше желаемая рабочая скорость, тем меньшее значение резистора (т. Е. Более сильное подтягивание) должно быть, в результате повышенный расход. Даже в выключенном состоянии они часто имеют ток утечки в несколько наноампер (точное значение зависит от температуры).
MOSFET [ править ]
Аналогичное соединение, используемое с МОП-транзисторами, представляет собой соединение с открытым стоком. Выходы с открытым стоком могут быть полезны для аналогового взвешивания, суммирования и ограничения, а также для цифровой логики. Клемма открытого стока соединяется с землей, когда на затвор подается высокое напряжение (логическая 1), но имеет высокий импеданс, когда на затвор подается низкое напряжение (логический 0). Это состояние с высоким импедансом возникает из-за того, что клемма находится под неопределенным напряжением (плавающее), поэтому для такого устройства требуется внешний подтягивающий резистор, подключенный к шине положительного напряжения (логическая 1), чтобы обеспечить логическую 1 в качестве выхода.
Микроэлектронные устройства, использующие сигналы с открытым стоком (например, микроконтроллеры), могут обеспечивать слабый (с высоким сопротивлением) внутренний подтягивающий резистор для подключения рассматриваемого терминала к положительному источнику питания устройства. Такие слабые подтяжки, часто порядка 100 кОм, снижают энергопотребление, удерживая входные сигналы от плавающих сигналов, и могут избежать необходимости во внешнем подтягивающем компоненте. Внешние подтяжки более сильные (меньшее сопротивление, возможно, 3 кОм), чтобы уменьшить время нарастания сигнала (как с I²C ) или минимизировать шум (как на входах системного сброса ). Внутренние подтягивания обычно можно отключить, если они не нужны.
POD Псевдо открытый сток [ править ]
В псевдо открытом стоке ( POD водителей) имеют сильную ниспадающую силу , но слабее силы подтягивающих. Для сравнения, драйвер с чистым открытым стоком не имеет силы подтягивания, за исключением тока утечки: все подтягивающее действие осуществляется на внешнем согласующем резисторе. Вот почему здесь должен использоваться термин «псевдо»: на стороне драйвера наблюдается некоторое подтягивание, когда выходной сигнал находится в высоком состоянии, оставшаяся сила подтягивания обеспечивается параллельным завершением приемника на дальнем конце для ВЫСОКОЕ напряжение, часто с использованием переключаемого терминатора на кристалле вместо отдельного резистора. Цель всего этого — снизить общую потребляемую мощность по сравнению с использованием как сильного подтягивания, так и сильного понижения, как в драйверах, таких как HSTL. [3] Память DDR4использует драйверы POD12, но с одинаковой силой драйвера (34 Ом / 48 Ом) для понижения (R onPd ) и повышения (R onPu ). Термин POD в DDR4 относится только к типу завершения, который является только параллельным подтягиванием без завершения на дальнем конце. Контрольная точка (V REF ) для входа — это не половинное питание, как в DDR3, и может быть выше.

Использование Pseudo Open Drain в интерфейсах DDR.
JEDEC стандартизировал POD15, [4] POD125, [5] POD135 [6] и POD12 [7] для напряжений питания интерфейса 1,5 В, 1,35 В и 1,2 В. В конце 2011 года было опубликовано сравнение [8] схем завершения DDR3 и DDR4 с точки зрения перекоса, апертуры глаза и энергопотребления.
См. Также [ править ]
- Общий коллектор
- Двухтактный выход
Ссылки [ править ]
- ^ «Обзор объяснения логических символов стандарта IEEE 91-1984» (PDF) . Техасские инструменты . Инструменты Техаса. 1996 . Проверено 12 февраля 2020 года .
- ^ «Обзор стандартов и кабелей SCSI» . Архивировано из оригинала на 2008-12-10.
- 081214 scsita.org
- ^ Дополнение № 6 к JESD8 — Логика высокоскоростного трансивера (HSTL) — Стандарт интерфейса на основе напряжения питания выходного буфера 1,5 В для цифровых интегральных схем (август 1995 г.).
- ^ POD15 — Интерфейс псевдо открытого стока 1,5 В (октябрь 2009 г.).
- ^ Интерфейс псевдо открытого дренажа (сентябрь 2017 г.).
- ^ POD135 — Интерфейс псевдо открытого стока 1,35 В (март 2018 г.).
- ^ POD12 — Интерфейс псевдо открытого стока 1,2 В (август 2011 г.).
- ^ Псевдо-открытый сток и схемы оконечной нагрузки типа центральной вкладки
- Пол Горовиц; Уинфилд Хилл (1989). Искусство электроники (2-е изд.). Издательство Кембриджского университета.
Внешние ссылки [ править ]
Викискладе есть медиафайлы по теме открытых коллекционеров .