open drain output что это

Электроника для всех

Блог о электронике

Основы на пальцах. Часть 4

Но диоды, резисторы, транзисторы и конденсаторы это так, лишь обвязка. Особо на них не развернешься (нет, маньяки, конечно могут, но габариты устройств там будут феерические). Самое вкусное нас поджидает в микросхемах 🙂
Делятся они на цифровые и аналоговые. Для начала кратко пробегусь по цифровым микросхемам.

Миром правит цифра!

open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это
Во избежания путаницы смыслов, в терминологии ключей и транзисторов принято следующее соглашение. Ключ считается открытым или закрытым для протекания тока, как кран на трубе. С точки зрения же механического исполнения он может быть замкнут или разомкнут. Так что открыт = замкнут, закрыт = разомкнут. И не следует путать с англоязычной нотацией, где Open = открыт если речь идет о транзисторе или электронном ключе и Open = разомкнут если речь идет о механическом рубильнике. Там Open-Close следует рассматривать в общем контексте текущего случая. Велик и могуч русский язык! =)

О микросхемах дискретной логики И, ИЛИ, НЕ я рассказывать не буду, каждую описать, так это справочник не на одну сотню страниц будет. Да и постепенно они уходят в прошлое, вытесняемые контроллерами и программируемыми матрицами. Скажу лишь главное – работают они по жесткой таблице истинности, которую можно найти в соответствующем datasheet.

open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это
Испльзование операционных усилителей

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

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

Спасибо. Вы потрясающие! Всего за месяц мы собрали нужную сумму в 500000 на хоккейную коробку для детского дома Аистенок. Из которых 125000+ было от вас, читателей EasyElectronics. Были даже переводы на 25000+ и просто поток платежей на 251 рубль. Это невероятно круто. Сейчас идет заключение договора и подготовка к строительству!

А я встрял на три года, как минимум, ежемесячной пахоты над статьями :)))))))))))) Спасибо вам за такой мощный пинок.

Источник

GPIO выход в режиме OpenDrain

open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

Читая даташит при подготовке схемы я напоролся на интересный момент. Есть выводы которые можно использовать в режиме OpenDrain (т.е. открытый сток). Для тех кто не врубился — СТМ32 питается максимум 3.3В (3.6В вообще-то, но интегральный стабилизатор проще найти на 3.3). Большинство логики работает на 5В (так и у меня — плата с МК отдельно, а основная плата уже есть). Как бы тут сильно экономится кол-во элементов для согласования уровней (будь это специализированная микросхема или транзистор). Я довольный, с расчетом на это поставил резисторы подтяжки к +5В.
При заводке выяснилось что OpenDrain не такой уж хороший…

Даташит обещает нереальное счастье, и предлагает вот такую картинку:
open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это
В даташите написано что P-MOS транзистор в режиме OpenDrain отключается напрочь. Соответственно навешиваем резистор 10К на +5В и вроде профит…
Немного тонкости задачи: у меня кучка входов (реально кучка) которые надо периодически опрашивать, я не стал «городить городки» на матричных считывателях а поставил регистры 74HC165 и периодически их опрашивая имею на входе некую последовательность бит, которую кастанув к структуре можно крутить и вертеть как удобно. Соответственно мне для управления надо 5В для гарантии (при 3.3 В тоже работает, но об этом позже).
Пробуем настроить:

Дальше битбанг в виде цикла с клоками и считываем данные. Отладчик показал что считываем мы постоянно единички. Ясно, что-то не так — лезем осциллом. И ничего не видим. Вернее видим, но явно не то что хотели.
Смотрим осциллом по выходам (в частности клок):
open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

Если честно у меня сперва был ступор. Потом я посмотрел крупнее — стало видно затянутый передний фронт — понятно. Скорость нарастания выходного сигнала плохая. Ставим задержки в ПО (надо же выяснить насколько все плохо). Получаем следующую картинку:
open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

Как бы сдвиговые регистры нормально реагируют на клоки длительностью 10-50 нСек, и задержка в виде 2 мкСек на каждый клок, как-то не очень…
Крутил настройки по-разному — толку нет. Передний фронт плохой. Кроме того, если посмотреть на вторую осциллограмму — видно в верхней части сигнала горизонтальную ступеньку — это сработал защитный диод на VFT (около 4 Вольт). С этого момента МК начинает греться (несильно, но греется).
Попытка уменьшить подтяжку с 10К до 5К каких-либо положительных результатов не принесла. Уменьшать дальше — не вижу смысла — растет потребление тока.

В финальной версии буду городить городки на транзисторах или на микросхемах — для согласования уровней.

Для входа такой проблемы нет — все нормально работает.

Резюмирую — на больших частотах использование OpenDrain не представляется возможным (если кто выяснит обратное — прошу комментить — ибо удобно, но не в таком виде как оно есть сейчас). Толерантность входов к 5 вольтам подтверждается.

Источник

open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

В предыдущем уроке мы поговорили о необходимой нам документации и установили IDE. Сейчас самое время познакомится с GPIO.

В этом уроке мы:
Начало

Что это за зверь такой? Если по-нашему, то GPIO — это порты ввода-вывода общего назначения. Через них микроконтроллер по сути связан с внешним миром. Вот почему именно с этого и нужно начинать знакомство с STM32.

Я попрошу вас открыть скачанное ранее Справочное руководство, страницу 265 и взглянуть на раздел 8 General-purpose I/Os (GPIO). В первом же предложении сказано, что все написанное в разделе касается всей серии STM32F4, если только в каком-либо пункте не сказано иначе. Окей, возьмем на заметку, что в случае чего нужно смотреть Даташит. К пункту 8.1 мы еще вернемся при рассмотрении регистров GPIO, поэтому сейчас пропускаем его и переходим к пункту 8.2. В нем сказано, что:

Основные возможности GPIO рассмотрели, перейдем к режимам работы порта. Смотрим в пункте 8.3 GPIO functional description режимы:

Остановимся еще на одном важном моменте: после системного сброса порты по умолчанию находятся в режиме высокоимпедансного входа(Hi-Z).
Я попрошу вас еще раз пройтись по пунктам 8.1 — 8.3.2 Справочного руководства, и переходить к следующей части статьи только когда убедитесь, что освоили все вышеописанное. Не пытайтесь разобраться сразу во всем, это просто невозможно, у нас ведь практический курс и во всем не понятном мы будем разбираться по ходу изучения.
Разобрались? Отлично, теперь поговорим о регистрах.

Регистры GPIO

В соответствии с пунктом 8.1 GPIO introduction у нас есть 10 регистров для каждого порта. Давайте-ка разобъем их на типы:

Попрошу вас пройтись по пунктам 8.3.3 — 8.3.15 Справочного руководства и слегка заглянуть в 8.4. Слегка потому, что писать мы будем на Си, совсем изредка используя ассемблерные вставки в критичных участках.
Серьезно, если у вас есть друг, который пишет под высокоуровневые МК только на ассемблере и он не джедай, скорее бегите за лекарствами. Можно на пальцах пересчитать проекты на STM32 которые требуют исключительно ассемблерного кода. Написать часть RTOS или криптофункцию на асме вполне оправданно, но проект целиком? К счастью лихие 90е прошли, и если код не влазит в кристалл, меняйте либо камень, либо код.

Приступим к практике

С теорией разобрались. Попробуем теперь применить полученные знания на практике. Еще раз напомню, что в нашем коде будет одна строчка, работающая на магии и пока что вам придется поверить мне на слово, что без этой строчки ничего не заработает(хотя скомпилируется без проблем). Так что мы просто вставим ее в код и на время забудем о ней(но вспомним в следующем уроке). Ну что, поехали.

Открываем кокос CoIDE и создаем новый проект:
open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

Тут вводим имя проекта и выбираем директория, в которой он будет лежать(на картинке дефолтная, еще картинка сжата по высоте). Имя проекта обязательно английскими буквами и без пробелов, иначе могут возникнуть проблемы с периносимостью. Нажимаем Next
open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

Нажимаем на Chip и опять Next
open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

Выбираем наш установленный на F4-Discovery МК(STM32F407VG), жмем Finish.
open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

Нам предложат добавить в проект библиотеки из репозитория. Добавляем: M4 CMSIS Core, CMSIS BOOT, RCC, GPIO отметив их галочками.
open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

Ищем слева main.c и двойным кликом открываем.
open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что этоТеперь разберемся, что же мы добавили из репозитория. Словом каждый пункт из списка «PERIPHERAL.ST» является частью очень удобной библиотеки StdPeriph_Lib от ST. Саму библиотеку мы скачивали в предыдущем уроке. Тогда я попросил вас оставить из скачанного архива лишь файл «stm32f4xx_dsp_stdperiph_lib_um.chm» с документацией на библиотеку и сказал, что остальные файлы из архива нам не нужны поскольку библиотеку будем подключать из репозитория кокоса. Как видим, это намного удобнее, чем переносить файлы библиотеки в директорию вручную. Из репозитория помимо необходимого нам GPIO мы потянули еще и RCC(та самая магия, которую в этом уроке мы не трогаем).
Что за два остальных компонента репозитория, те, что с именем CMSIS? Это стандартизированная для всех Cortex-M библиотека абстракции, которая позволяет при написании кода думать на более высоком уровне(архитектуры вцелом и имеющейся периферии). Помимо упрощения написания кода, библиотека очень упрощает перенесение кода между разными МК с Cortex-M на борту(да-да, не только STM). К слову библиотека распространяется самой компанией ARM. При желании можно зайти сюда и почитать про библиотеку и скачать спецификацию на нее, но это чисто почитать на горшке досуге: в данном уроке можно обойтись без рассмотрения особенностей этой библиотеки.

Замените код в main.c на следующий:

Как говорил наш препод по программированию: «Вот мы и написали основную часть кода». Эту основную часть будем по ходу дела дополнять всем недостающим.

Допишем недостающие части кода. Поскольку мигать мы будем светодиодом, хорошо бы знать на какую ногу МК он прицеплен. Посмотрите на плату F4-Discovery, по две стороны нижнего usb у нас 2 светодиода, а между кнопками у нас расположены еще 4. Со светодиодами определились, теперь посмотрем куда создатели Discovery решили их подключить. Откройте Руководство Discovery(мы скачали его с сайта ST в прошлом уроке) и найдите в описании подключенных устройств LEDs (страница 16, п. 4.4) и выбираем, например синий диод. Там же смотрим, что он имеет обозначение LD6 и подключен к PD15(порт D вывод 15) нашего МК, но как именно он подключен нам пока не известно. Посмотрим на скачанной(в пр. уроке) схеме Discovery, в самом конце на 6 стр. находим вот такой структурный блок:
open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это
Отсюда видно, для того что бы зажечь синий светодиод необходимо подключить вывод PD15 к питанию, т.е. подать на ножку в режиме push-pull(двухтактный выход) логическую 1. Но как мы уже говорили ранее сначала вывод нужно сконфигурировать.

Ну а для того, что бы зажечь/погасить светодиод в StdPeriph_Lib у нас есть функции GPIO_SetBits и GPIO_ResetBits, предоставляющие интерфейс к регистру GPIOx_BSRR. Пожалуйста, найдите ее в документации к библиотеке. Код включения и выключения светодиода будет выглядеть следующим образом:

Источник

open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это GPIO (General Purpose Input-Output) — это выводы общего назначения, ноги микроконтроллера, доступные для прямого управления. Это обычно довольно дефицитный ресурс во многих популярных МК, но с STM32 эта проблема теряет актуальность: в самом мелком корпусе (LQFP48) доступно 37 GPIO, а в самом большом (LQFP176) — 140 GPIO. И всё это богатство ещё и настраивается вдоль и поперёк. Но, обо всём по порядку.

Для начала откроем руководство по STM32F100xx и взглянем на схему вывода порта:

open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

Сами МК питаются 3.3 В, но до сих пор ещё активно используются 5-вольтовые микросхемы и логика, а их нужно как-то подключать. Поэтому в STM32 большинство выводов «толерантны» к 5 В — уж не знаю, как ещё перевести термин «5 V tolerant». То есть, они могут принимать на вход 5 В без какой-либо угрозы их здоровью.

Толерантный пин отличается от обычного только тем, что у него верхний защитный диод подключён к Vdd_ft вместо Vdd. Из этой схемы становится понятно, что хоть выводы и толерантны к 5 В на вход, но вот выдавать 5 В на выход не могут — тут уже нужен транзистор. Если нужно получить логическую единичку, то это не проблема — 3.3 В вполне распознаются 5-вольтовой логикой как 1, но если нужно именно 5 В, то есть решение — режим Open-drain у GPIO.

Всего у STM32F10x режимов GPIO имеется 8.

GPIOx_CRL и GPIOx_CRH — регистры конфигурации, содержат настройки режима (вход/выход) и частоты GPIO. Доступны на чтение и запись.

GPIOx_IDR и GPIOx_ODR — входной и выходной регистры: в первом хранится считанное со входов порта значение, во второй записывается новое состояние выводов. GPIOx_IDR доступен только на чтение, а GPIOx_ODR — на чтение и запись.

GPIOx_BSRR и GPIOx_BRR — регистры атомарного изменения битов в GPIOx_ODR.
Обычно, если нужно установить бит в регистре периферии, то его сначала нужно прочитать, потом применить побитовое ‘ИЛИ’ к считанному значению и битовой маске, после чего записать новое значение назад в регистр. То же и со сбросом битов, только маску нужно инвертировать и применить побитовое ‘И’. А вот запись значений в GPIOx_BSRR и GPIOx_BRR изменяет только те биты выходного регистра, которые были установлены в единицу, притом происходит это за 1 такт, так что прерывание не сможет ворваться и всё испортить. Проиллюстрирую кодом:

Оба регистра доступны только на запись.

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

Пример инициализации GPIO для модуля USART1 и самого модуля на STM32VLDiscovery :

Что касается режима Open-drain, тут всё не так прямолинейно, как с другими режимами. Так как устройство, которым предполагается управлять, подключено к открытому стоку, нужно чуть более сложное соединение, чем обычно, а управление будет инверсное: выставляешь выход в 1 — ток с верхнего резистора идёт на землю, устройство видит на линии 0; выставляешь 0 — полевик запирается, ток идёт на устройство, на линии уровень 1.

open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

Ещё одна и интересная функция — переназначение выводов. Она позволяет переназначить выводы периферии с обычных на альтернативные, тоже фиксированные — впрочем, это не умаляет ценности данной функции: например, для USART1 можно переназначить TX с PA9 на PB6, а RX с PA10 на PB7. Если взглянуть на распиновку МК, можно увидеть, что обычные и альтернативные выводы находятся на разных сторонах кристалла, так что в разводке платы это в любом случае поможет:

open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

А включается переназначение вот так:

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

Есть у GPIO и довольно диковинная функция — блокирование выводов. Я так и не понял, зачем она может понадобится, но суть такова: можно заблокировать изменение состояния любого GPIO до следующей перезагрузки МК. Активируется тоже несложно:

Несколько слов об электрических характеристиках
В даташите по STM32F100xx встречаются рекомендации подключать не более 20 выводов с отдачей 8 мА через каждый или не более 8 выводов с 20 мА, но практически нереально найти информацию по максимальному току на вывод. Но есть таблица, где приведена максимальная рассеиваемая мощность для МК целиком, причём для разных корпусов эта мощность разная. Например, для LQFP64, в котором идёт STM32F100RBT6B на STM32VLDiscovery, эта мощность равна 444 мВт, что при напряжении питания 3.3 В даёт силу тока

134 мА. В другой таблице указано, что максимальный ток, потребляемый МК в режиме выполнения кода со всей включенной периферией при 100℃, составляет 15.7 мА. Итого имеем 134 — 15.7 = 118.3 мА на все выходы. Это максимальный ток, который может пропустить через себя МК, что немного расходится с рекомендациями. Впрочем, питать что-либо кроме светодиодов от MК в любом случае — плохая идея, а 118.3 мА хватит на пару-тройку десятков обычных светодиодов, которые при номинальном токе в 20 мА выжигают глаза, а при 1 мА вполне годятся в индикаторы.

Источник

ОБОРУДОВАНИЕ
ТЕХНОЛОГИИ
РАЗРАБОТКИ

Блог технической поддержки моих разработок

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

open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

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

Не пропускайте этот урок, прочитайте внимательно. По опыту уроков Ардуино знаю, что много вопросов возникает из-за незнания всего того, что я описываю в этой статье.

И про аппаратное устройство портов и их электрические характеристики я пишу не для того, чтобы набрать объем урока. Это очень важный вопрос. Знание его необходимо для подключения к микроконтроллеру различных электронных компонентов. Микроконтроллер сам по себе никогда не работает. К нему всегда что-то подключается.

Через порты ввода-вывода микроконтроллер управляет и связывается со всем, что к нему подключено. Есть еще коммуникационные интерфейсы, но о них в последующих уроках. Хотя интерфейсы также используют порты, только в режиме альтернативных функций.

В системе STM32 применяется общепринятое название портов ввода-вывода общего назначения, а именно GPIO (General purpose input-output).

Под “общим назначением” имеется в виду, что состояние выводов устанавливается или считывается программно, т.е. вывод не является входным или выходным сигналом какого-либо аппаратного узла микроконтроллера.

open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

Порты STM32 с аппаратной точки зрения.

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

В документации приводится базовая схема вывода порта.

open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

Нас интересует правая, выходная часть.

Режим входов.

При использовании вывода в качестве входа, к нему могут быть подключены подтягивающие резисторы сопротивлением порядка 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 В выводы отмечены закрашенными точками.

Предельно-допустимые входные параметры портов.

Режим выходов.

В режиме выхода порта работают 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)

open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

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

open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

На каждый вывод отводится 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 00 1

1 1

0 или 1
Открытый сток0 10 или 1
Выход альтернативной функцииАктивный выход1 0
Открытый сток1 1
ВходАналоговый вход0 00 0
Свободный вход0 1
Вход, подтяжка к земле1 00
Вход, подтяжка к питанию1

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

Регистр блокировки конфигурации порта GPIOx_LCKR (Port configuration lock register)

open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

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

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

Доступ к портам происходит через регистры ввода и вывода данных.

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

open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

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

open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

Первый доступен только для чтения. Биты IDR0 – IDR15 содержат состояние соответствующих выводов порта.

Запись данных во второй регистр устанавливает состояние выводов порта (ODR0 – ODR15).

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

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

Регистр установки/сброса битов GPIOx_BSRR (Port bit set/reset register)

open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

Регистр установки/сброса битов разделен на 2 равные части(0-15 и 16-31). Первая предназначена для установки выводов в состояние 1, вторая – в состояние 0.

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

Регистр сброса битов GPIOx_BRR (Port bit reset register)

open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

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

Запись слова с 1 в битах BR0 – BR15 переводит соответствующие выводы в состояние низкого уровня.

Конфигурация портов с помощью STM32CubeMX.

Здесь все просто и понятно. Мы это уже делали.

Давайте настроим вывод PB12 на вход с подтягивающим резистором к шине питания, а PB13 на активный выход.

Правой кнопкой мыши нажимаем на вывод PB12. Выбираем GPIO_Input.

open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

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

open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

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

open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

Выбираем строку PB13 и задаем:

open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

Я не буду описывать режимы, они очевидны.

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

open drain output что это. Смотреть фото open drain output что это. Смотреть картинку open drain output что это. Картинка про open drain output что это. Фото open drain output что это

Проект будем использовать в следующем уроке.

В нем научимся работать с портами через регистры библиотеки CMSIS.

Источник

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

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