Знакомство. Порты ввода/вывода GPIO

Порты ввода/вывода общего назначения (GPIO - General-Purpose I/Os) 

Опубликовано 09/01/2014  пользователем Николай Куртуков

Каждый порт ввода/вывода общего назначения (GPIO - General-Purpose I/Os) имеет:

•   четыре 32-разрядных регистра конфигурации (GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR и GPIOx_PUPDR),

•   два 32-битных регистра данных (GPIOx_IDR и GPIOx_ODR),

•   32-битный регистр побитовой установки или сброса данных (GPIOx_BSRR),

•   32-битный регистр блокировки изменения конфигурации(GPIOx_LCKR)

•   два 32-разрядный регистра выбора альтернативной функции(GPIOx_AFRH и GPIOx_AFRL).

Регистры конфигурации портов ввода/вывода

Каждый GPIO порт для настройки 16-ти входов/выходов имеет четыре 32-битных, размещённых в памяти, регистра управления (GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, GPIOx_PUPDR).

•   Регистр GPIOx_MODER используется для выбора направления ввода / вывода (ввод, вывод, AF – альтернативная функция, аналоговый ввод).

•   Регистры GPIOx_OTYPER и GPIOx_OSPEEDR используются для выбора типа вывода (двухтактный или с открытым стоком) и скорости или частоты обновления данных.

•   Регистр GPIOx_PUPDR используется для выбора «подтягивания вверх» или «подтягивания вниз» независимо от направления ввода / вывода.

Регистры ввода/вывода данных портов

Каждый GPIO порт имеет два 16-разрядных, размещенных в памяти, регистра данных: регистры ввода и вывода данных (GPIOx_IDR и GPIOx_ODR).

•   GPIOx_ODR хранит данные для вывода, доступен для чтения / записи.

•   Входные данные через I / O хранятся в регистре данных ввода (GPIOx_IDR), доступен только для чтения.

Регистр побитового изменения данных в регистре вывода данных GPIOx_ODR.

Регистр побитового изменения данных (GPIOx_BSRR - bit set reset register) представляет собой 32-разрядный регистр, который позволяет устанавливать и сбрасывать каждый отдельный бит в регистре данных вывода (GPIOx_ODR).

Размер регистра GPIOx_BSRR в два раза больше размера GPIOx_ODR.

Каждому биту в GPIOx_ODR, соответствуют два бита управления в GPIOx_BSRR: BSRR (i) иBSRR (i + size).

Запись «1» в бит BSRR (i) устанавливает в «1» соответствующий бит ODR (i). То есть младшие 16 разрядов (15…0) регистра GPIOx_BSRR отвечают за установку «1» в GPIOx_ODR.

Запись «1» в бит BSRR (i + size) сбрасывает в «0» соответствующий бит ODR (i). То есть старшие 16 разрядов (31…16) GPIOx_BSRR отвечают за установку «0» в регистре GPIOx_ODR.

Запись «0» в любой бит GPIOx_BSRR не оказывает никакого влияния на соответствующий бит в GPIOx_ODR.

 

Если есть попытка одновременной устанавки и сбрасывания бита в GPIOx_BSRR, то приоритет имеет установка бита регистра GPIOx_ODR в «1».