что такое gpio порт

Что такое GPIO (General Purpose Input/Output).

что такое gpio порт. Смотреть фото что такое gpio порт. Смотреть картинку что такое gpio порт. Картинка про что такое gpio порт. Фото что такое gpio порт

Что такое GPIO (General Purpose Input/Output).

Порт GPIO (универсальный ввод/вывод) размещают внутри кристаллов прцессоров, чипсетов, вспомогательных чипов управления. Порт GPIO обрабатывает как входящие, так и исходящие цифровые сигналы. В качестве входного порта его можно использовать, например, для связи ЦП или PCH с сигналами полученными от переключателей, или цифровыми показаниями, полученными от датчиков. В качестве выходного порта его можно использовать для формирования сигналов управления внешними операциями на основе программ исполняемых процессором, например, для управления включением/ выключением светодиодной подсветки дисплея, или вывода сигналов управления двигателем и т. п..

GPIO называют «порт общего назначения», поскольку каждый его разряд может быть свободно настроен для работы по приему как входных сигналов, так и для формирования выходных сигналов (программным путем). В ранних вариантах каждый порт был либо исключительно входным, либо исключительно выходным. Однако сейчас GPIO является «гибким» по использованию своих контактов. Вы можете установить их назначение наилучшим образом в соответствии с вашими потребностями ( на вход, на выход или вход/выход в любой количественной комбинации.

Во время чтения, записи и работы с цифровыми значениями (0 и 1) внешние устройства часто используют уровни сигнала: «низкое» напряжение и «высокое» напряжение. GPIO выполняет необходимые преобразования в обоих направлениях.

Регистр входных данных порта (PIDR). Показывает состояние входных контактов. Для каждого вывода вход LOW-сигнала устанавливает соответствующее значение разряда регистра в 0; вход сигнала HIGH устанавливает соответствующее значение разряда регистра в 1. CPU программно считывает этот регистр, чтобы узнать самые последние уровни сигнала его разрядов. Значения сохраняются до перезаписывания; каждый раз, когда CPU считывает регистр, он будет отображать текущие состояния входных сигналов.

что такое gpio порт. Смотреть фото что такое gpio порт. Смотреть картинку что такое gpio порт. Картинка про что такое gpio порт. Фото что такое gpio порт

Рис. 1. Базовая структура GPIO (концептуальная).

Регистр выходных данных порта (PODR). Чтобы выводить данные через выходные выводы, ЦП программно записывает выходные значения в этот регистр. Значение 0 преобразуется в LOW-выход; 1 преобразуется в HIGH выход. Как и в обычной памяти, значения, записанные здесь, сохраняются до перезаписывания. Это означает, что уровень выходного контакта будет поддерживаться до тех пор, пока значение не будет изменено.

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

что такое gpio порт. Смотреть фото что такое gpio порт. Смотреть картинку что такое gpio порт. Картинка про что такое gpio порт. Фото что такое gpio порт

На рис. 3 видим, например, что разряд GPIO77 – используется для приема входного сигнала DGPU_PWRGD; разряд GPIO7 8 – используется для формирования выходного сигнала PXS_PWREN.

что такое gpio порт. Смотреть фото что такое gpio порт. Смотреть картинку что такое gpio порт. Картинка про что такое gpio порт. Фото что такое gpio порт

Рис. 3. Фрагмент схемы (однокристальный вариант Intel Haswell ULT/Broadwell U)

что такое gpio порт. Смотреть фото что такое gpio порт. Смотреть картинку что такое gpio порт. Картинка про что такое gpio порт. Фото что такое gpio порт

Рис. 4. Использование порта GPIO в ЕС контроллере (EC-KB9012).

Источник

что такое gpio порт. Смотреть фото что такое gpio порт. Смотреть картинку что такое gpio порт. Картинка про что такое gpio порт. Фото что такое gpio порт

В предыдущем уроке мы поговорили о необходимой нам документации и установили 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 и создаем новый проект:
что такое gpio порт. Смотреть фото что такое gpio порт. Смотреть картинку что такое gpio порт. Картинка про что такое gpio порт. Фото что такое gpio порт

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

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

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

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

Ищем слева main.c и двойным кликом открываем.
что такое gpio порт. Смотреть фото что такое gpio порт. Смотреть картинку что такое gpio порт. Картинка про что такое gpio порт. Фото что такое gpio портТеперь разберемся, что же мы добавили из репозитория. Словом каждый пункт из списка «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 стр. находим вот такой структурный блок:
что такое gpio порт. Смотреть фото что такое gpio порт. Смотреть картинку что такое gpio порт. Картинка про что такое gpio порт. Фото что такое gpio порт
Отсюда видно, для того что бы зажечь синий светодиод необходимо подключить вывод PD15 к питанию, т.е. подать на ножку в режиме push-pull(двухтактный выход) логическую 1. Но как мы уже говорили ранее сначала вывод нужно сконфигурировать.

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

Источник

Что такое gpio порт

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

Введение

В качестве базового примера, приведём простейшую программу, в которой осуществляется работа с GPIO. Здесь используется оценочная плата STM32VLDISCOVERY с микроконтроллером STM32F100RBT6B (подробнее об используемых средствах разработки смотрите «Минимальное приложение C++ для микроконтроллера ARM». что такое gpio порт. Смотреть фото что такое gpio порт. Смотреть картинку что такое gpio порт. Картинка про что такое gpio порт. Фото что такое gpio порт)

Прежде чем перейти к анализу программы, рассмотрим некоторые теоретические вопросы, касающиеся GPIO.

GPIO: обзор

Предусмотрены 4 варианта режима для входа, и 4 режима для выхода.

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

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

Например, у микроконтроллеров STM32F100xx вывод с основной функцией PA0 имеет альтернативные функции: WKUP (сигнал для пробуждения из режима ожидания standby), USART2_CTS (одна из линий второго интерфейса USART), ADC1_IN0 (вход 0 ADC, аналоговый), TIM2_CH1_ETR (внешний тактовый сигнал для второго таймера). Разумеется, во избежание конфликтов, одновременно может быть включено только одно из периферийных устройств, использующих общий выход.

Есть определённые ограничения на использование некоторых портов ввода/вывода. Выводы PA13, PA14, PA15, PB3, PB4 после сброса конфигурируются как используемые для отладки, что существенно ограничивает возможность их применения как портов ввода/вывода. PD0, PD1 используются для подключения кварцевого резонатора (это основная функция). К PC14, PC15 подключается кварц часов реального времени на 32 кГц (альтернативная, но часто используемая функция). PB2 является по совместительству входом BOOT1, совместно с BOOT0 определяющим способ начальной загрузки (правда, если на BOOT0 подан 0, задающий режим загрузки из Flash, а это самый часто используемый вариант, то сигнал на входе BOOT1 безразличен и PB2 можно использовать свободно). Кроме того, PC13, PC14 и PC15 получают питание через ключ с малым допустимым током (около 3 мА), так что использование PC13..PC15 в режиме выхода весьма ограничено: частота переключения не должна превышать 2 МГц, максимальная ёмкость нагрузки 30 пФ, недопустимо использовать выход в качестве источника тока (например, для подключения светодиодов).

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

GPIO: устройство

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

Чтобы получить на выходе сигнал с уровнем логической единицы до 5 В, следует использовать FT-вывод микроконтроллера в режиме выхода с открытым стоком (разумеется, со смещением от внешнего источника 5 В через резистор).

В datasheet на устройство указывается, какие выводы имеют допустимое напряжение 5 В. У микроконтроллеров STM32F100xx все сигнальные выводы являются FT-выводами, кроме: NRST, BOOT0, PA0..PA7, PB0, PB1, PB5, PC0..PC5, PC13, PC14, PC15 (из них PA0..PA7, PB0, PB1, PC0..PC5 не являются FT по той причине, что они в качестве альтернативной функции являются аналоговыми входами ADC: входы ADC1_IN0..ADC1_IN15). Уточняйте информацию в datasheet на своё устройство.

К выводу подключены драйвер входа и драйвер выхода.

Регистры установки/сброса битов упрощают доступ к отдельным разрядам порта ввода/вывода и обеспечивают атомарность доступа. Под атомарностью имеется в виду неделимость, непрерываемость операции, выполнение операции как одного действия.

Выбором соответствующего режима входа, может быть подключен один из подтягивающих резисторов. Наличие встроенных подтягивающих резисторов позволяет сократить количество компонентов на плате и упростить устройство в целом. Резисторы используются для того, чтобы принудительно задать уровень сигнала (высокий или низкий) на входе, который может в какие-то моменты работы устройства оставаться неподключённым, «висящим». Пример: вывод подключён через кнопку к общему проводу. Когда кнопка нажата, на выводе формируется логический 0. При разомкнутой кнопке подтягивающий резистор pull-up задаст логическую 1. Другие возможные варианты использования: подтягивание неиспользуемых выводов микроконтроллера (чтобы избежать наведения помех в этих выводах); при подключении к выходу с Z-состоянием или к выходу с открытым стоком. Стоит иметь в виду, что сопротивление внутренних подтягивающих резисторов довольно велико (для STM32F100xx по datasheet находится в пределах 30..50 кОм, типичное значение 40 кОм). С другой стороны, например для механических кнопок, может быть ограничен минимальный ток. При токе ниже минимального не гарантируется низкое сопротивление замкнутых контактов нажатой кнопки, кроме того это сопротивление может быть нестабильным и являться источником повышенного шума. Не знаю, по этой причине или из других соображений, но в STM32 value line Discovery evaluation board, например, используются внешние подтягивающие резисторы для подключения кнопок.

Кроме того могут быть и нетрадиционные варианты использования режима. Например, вход с подтягивающим резистором можно использовать как выход с большим внутренним сопротивлением! Такой вариант тоже иногда бывает полезен, особенно при желании минимизировать количество внешних компонентов.

GPIO: характеристики

Здесь будут рассмотрены только некоторые характеристики портов ввода/вывода микроконтроллеров STM32F100xx. За подробной информацией обращайтесь к datasheet.

Типовые значения обычно даются для температуры окружающей среды 25º C, напряжения питания 3.3 В.

Максимально допустимый выходной ток одного вывода составляет 25 мА; если нагружены несколько выводов, то нужно учитывать ограничение по току линий питания микроконтроллера и линий земли величиной 150 мА. Например, если 6 выводов отдают ток по 25 мА каждый, потребуется 150 мА от источника по линиям VDD. Так как сам микроконтроллер тоже потребляет ток, то уже получаем перегрузку.

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

Уровни напряжений на выходе

ОбозначениеПараметрУсловия измеренияMinMaxЕдиница
VOLНапряжение низкого уровня на выходеIIO=6 мА
2 В
0.4В
VOHНапряжение высокого уровня на выходеVDD-0.4
VOLНапряжение низкого уровня на выходеIIO=8 мА
2.7 В
0.4
VOHНапряжение высокого уровня на выходеVDD-0.4
VOLНапряжение низкого уровня на выходеIIO=20 мА
2.7 В
1.3
VOHНапряжение высокого уровня на выходеVDD-1.3

Однако совместимость наблюдается только при не слишком больших токах выхода: до 6 мА при низких напряжениях питания (до 2.7 В) и до 8 мА при напряжении питания свыше 2.7 В. Большие токи допустимы, если только нет строгих требований к уровням выходного напряжения (например, управление ключом на биполярном транзисторе, управление оптоэлектронными приборами).

Характеристики входа

ОбозначениеПараметрУсловия измеренияMinTypMaxЕдиница
VILНапряжение низкого уровня стандартного входа-0.50.28*(VVDD-2)+0.8В
Напряжение низкого уровня FT-входа-0.50.32*(VVDD-2)+0.75
VIHНапряжение высокого уровня стандартного входа0.41*(VDD–2)+1.3VDD+0.5
Напряжение высокого уровня FT-входа0.42*(VDD–2)+15.5
VhysГистерезис триггера Шмитта на стандартном входе200мВ
Гистерезис триггера Шмитта на FT-входе5% VDD
IlkgТок утечки входаVSS≤VIN≤VDD
Стандартный вход
±1мкА
VIN=5 В
FT-вход
3
RPUСопротивление подтягивающего к высокому уровню резистораVIN=VSS304050кОм
RPDСопротивление подтягивающего к низкому уровню резистораVIN=VDD
CIOЁмкость входа5пФ

Входы также являются TTL и CMOS-совместимыми. Микроконтроллер без проблем может работать в смешанных схемах, содержащих CMOS и TTL-логику с напряжением питания 5 В. Неплохо, особенно с учётом того, что сами микросхемы TTL и CMOS не всегда совместимы между собой без преобразования уровней!

GPIO: управление

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

Таким образом, регистр GPIOx_CRL содержит 8 битовых полей размером по 4 бита каждое, отвечающих за конфигурирование соответствующих разрядов 0..7 порта GPIOx, структура регистра поясняется следующей таблицей:

GPIOx_CRL (Port configuration register low)

31302928272625242322212019181716
Px7 conf.Px6 conf.Px5 conf.Px4 conf.
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw
1514131211109876543210
Px3 conf.Px2 conf.Px1 conf.Px0 conf.
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw

Структура регистров GPIOx_CRH аналогична:

GPIOx_CRH (Port configuration register high)

31302928272625242322212019181716
Px15 conf.Px14 conf.Px13 conf.Px12 conf.
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw
1514131211109876543210
Px11 conf.Px10 conf.Px9 conf.Px8 conf.
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw

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

Порядок следования битов в битовом поле конфигурации разряда

Смещение бита+3+2+1+0
НаименованиеCNF1CNF0MODE1MODE0

Биты MODE (два младших бита четырёхбитового поля конфигурации) задают режим работы вывода: вход или выход, а для выхода, кроме того, определяют скоростные возможности.

Значение битов MODE

MODEРежим
00Вход
01Выход, максимальная частота 10 МГц
10Выход, максимальная частота 2 МГц
11Выход, максимальная частота 50 МГц

Такой загадочный параметр, как максимальная частота выходного сигнала всего лишь определяет время нарастания и спада сигнала на выходе при переключении. Величина 50 МГц указанная в руководстве (Reference manual) проникла туда, очевидно из документации на более высокоскоростные устройства, тогда как в спецификации (Datasheet) честно говорится о максимальных частотах 10, 2 и 24 МГц. Время спада и нарастания при переключении составляет 1/4 часть от периода максимальной частоты при ёмкости нагрузки 50 пФ (t=1/(4*Fmax)). Составляет соответственно 25 нс, 125 нс и 8..12 нс. Так как увеличение скорости переключения приводит к увеличению потребляемой мощности, не стоит без необходимости выбирать высокоскоростные режимы.

Биты CNF определяют детали конфигурации для бита порта в каждом из режимов.

Значение битов CNF в режиме входа

CNFЗначение
00Аналоговый вход
01Цифровой плавающий вход
10Цифровой вход с подтягивающим резистором
11Зарезервировано

Во время и после сброса, выводы портов вводы/выводов конфигурируются как плавающие входы (во избежание конфликтов с подключёнными к микроконтроллеру устройствами).

Варианты режимов выхода задаются битами CNF и приведены в следующей таблице.

Значение битов CNF в режиме выхода

CNFЗначение
00Двухтактный выход
01Выход с открытым стоком
10Альтернативная функция, двухтактный выход
11Альтернативная функция, выход с открытым стоком

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

Режим работы выводаКонфигурационное значение
Вход аналоговый0x0
Вход цифровой плавающий0x4
Вход цифровой с подтяжкой0x8
Выход, основная функция, двухтактный, 10МГц0x1
Выход, основная функция, двухтактный, 2МГц0x2
Выход, основная функция, двухтактный, 50МГц0x3
Выход, основная функция, открытый сток, 10МГц0x5
Выход, основная функция, открытый сток, 2МГц0x6
Выход, основная функция, открытый сток, 50МГц0x7
Выход, альтернативная функция, двухтактный, 10МГц0x9
Выход, альтернативная функция, двухтактный, 2МГц0xA
Выход, альтернативная функция, двухтактный, 50МГц0xB
Выход, альтернативная функция, открытый сток, 10МГц0xD
Выход, альтернативная функция, открытый сток, 2МГц0xE
Выход, альтернативная функция, открытый сток, 50МГц0xF
Конфигурационное значениеРежим работы вывода
0x0Вход аналоговый
0x1Выход, основная функция, двухтактный, 10МГц
0x2Выход, основная функция, двухтактный, 2МГц
0x3Выход, основная функция, двухтактный, 50МГц
0x4Вход цифровой плавающий
0x5Выход, основная функция, открытый сток, 10МГц
0x6Выход, основная функция, открытый сток, 2МГц
0x7Выход, основная функция, открытый сток, 50МГц
0x8Вход цифровой с подтяжкой
0x9Выход, альтернативная функция, двухтактный, 10МГц
0xAВыход, альтернативная функция, двухтактный, 2МГц
0xBВыход, альтернативная функция, двухтактный, 50МГц
0xCX
0xDВыход, альтернативная функция, открытый сток, 10МГц
0xEВыход, альтернативная функция, открытый сток, 2МГц
0xFВыход, альтернативная функция, открытый сток, 50МГц

Если мы хотим изменить конфигурацию только одного или нескольких выводов, не трогая остальных, делаем это как обычно, в два этапа: сначала сбрасываем все биты изменяемых битовых полей (оператором &), а затем устанавливаем новое значение полей (оператором | или + ). При этом есть смысл воспользоваться дополнительной переменной для вычислений. Настроим PC9 как в предыдущем примере, при этом настройку остальных выводов не будем изменять:

Существует более короткий в записи вариант без промежуточной переменной, но его в данном случае лучше не использовать:

А так можно, это полностью эквивалентно варианту с промежуточной переменной:

Пример программы

Итак, обещанная программа для зажигания светодиода, подключенного анодом через резистор к PC9.

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

Неиспользуемые выводы

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

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

Защита выводов от перегрузки

Для того чтобы ограничить ток через выводы микроконтроллера при ошибочном подключении к внешним элементам схемы, можно использовать включение через ограничивающие ток резисторы. Максимальный ток для большинства выводов микроконтроллеров STM32F100xx составляет 25 мА. Так что резистор сопротивлением 200 Ом защитит вывод от перегрузки как в случае закорачивания линии на землю, так и при случайном подключении линии к источнику питания до 5 В (для FT-выводов) или к источнику VDD (для не FT-выводов). Если принять ёмкость нагрузки равной 50 пФ, то получившаяся RC-цепь будет иметь постоянную времени 10 нс. Поэтому описанная защита не годится для выводов, которые должны работать с высокочастотными сигналами. Если есть угроза случайного подключения не FT-вывода к источнику +5 В, сопротивление резистора должно быть выбрано с учётом максимально допустимого инжекционного тока. Например, при напряжении питания 3.3 В, максимальном инжекционном токе 5 мА, принимая падение напряжения на защитном диоде имеющим порядок 0.5 В, получаем, что требуется резистор с сопротивлением, как минимум 240 Ом.

что такое gpio порт. Смотреть фото что такое gpio порт. Смотреть картинку что такое gpio порт. Картинка про что такое gpio порт. Фото что такое gpio порт
Рис. %img:prt

На рисунке под I подразумевается сила тока по модулю. Обычно направленный к микросхеме (втекающий) ток считается положительным, а вытекающий ток считается имеющим отрицательное значение.

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

Источник

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

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