Перейти к содержанию

Регистры GPIO STM32F3

Регистры портов GPIOA–GPIOH STM32F3: режим вывода, тип и скорость выхода, подтяжка, чтение входов и запись выходов, атомарные BSRR и BRR, блокировка настроек и выбор альтернативной функции AF0–AF15.

Порты STM32F3 устроены так же, как у STM32F0 и F4: по два бита на вывод в MODER, OSPEEDR и PUPDR, бит в OTYPER и четыре бита номера функции в AFR[0] (выводы 0–7) или AFR[1] (8–15). Функций у вывода до шестнадцати, AF0–AF15, их список — в таблице альтернативных функций даташита (RM0316, раздел 11.4).

Порты тактируются от шины AHB: биты GPIOAEN…GPIOHEN в RCC_AHBENR. После сброса выводы — входы без подтяжки, кроме выводов отладки PA13, PA14, PA15 и PB3, PB4. Набор портов зависит от линейки: у STM32F303xD/xE и F398 есть порты G и H, у STM32F303x6/x8 — только A, B, C, D и F.

ЭкземплярБазовый адресЕсть у
GPIOA0x4800 0000всех
GPIOB0x4800 0400всех
GPIOC0x4800 0800всех
GPIOD0x4800 0C00всех
GPIOE0x4800 1000STM32F303xC/xE, STM32F358, STM32F398
GPIOF0x4800 1400всех
GPIOG0x4800 1800STM32F303xE, STM32F398
GPIOH0x4800 1C00STM32F303xE, STM32F398

Регистры блока

РегистрСмещениеНазначениеПосле сброса
GPIOx_MODER0x00Режим выводов0xA800 0000 (у порта A; у порта B — 0x0000 0280, у остальных — 0x0000 0000)
GPIOx_OTYPER0x04Тип выходов0x0000 0000
GPIOx_OSPEEDR0x08Скорость выходов0x0C00 0000 (у порта A; у порта B — 0x0000 00C0, у остальных — 0x0000 0000)
GPIOx_PUPDR0x0CПодтяжка вверх и вниз0x6400 0000 (у порта A; у порта B — 0x0000 0100, у остальных — 0x0000 0000)
GPIOx_IDR0x10Входные данные порта0x0000 XXXX
GPIOx_ODR0x14Выходные данные порта0x0000 0000
GPIOx_BSRR0x18Атомарная установка и сброс выходов0x0000 0000
GPIOx_LCKR0x1CБлокировка настроек выводов0x0000 0000
GPIOx_AFRL0x20Альтернативные функции выводов 0–7 (AFRL)0x0000 0000
GPIOx_AFRH0x24Альтернативные функции выводов 8–15 (AFRH)0x0000 0000
GPIOx_BRR0x28Атомарный сброс выходов0x0000 0000

Конструктор значения

Выберите регистр и значения полей — конструктор покажет 32-битное значение и строку на C с макросами CMSIS. Поля, которые вы не меняете, берутся из значения после сброса.

Значение: 0xA8000000

1010 1000 0000 0000 0000 0000 0000 0000

GPIOA->MODER = 0xA8000000;

GPIOx_MODER — режим выводов

Смещение 0x00, 32 бит, после сброса 0xA800 0000 (у порта A; у порта B — 0x0000 0280, у остальных — 0x0000 0000). В коде: GPIOA->MODER.

31302928272625242322212019181716
MODER15MODER14MODER13MODER12MODER11MODER10MODER9MODER8
1514131211109876543210
MODER7MODER6MODER5MODER4MODER3MODER2MODER1MODER0
  • MODER0–MODER15 (по 2 бита на каждый y, положение — на карте битов) — Режим вывода y: вход, выход, альтернативная функция или аналог.
    MODERyЗначение
    00Вход
    01Выход общего назначения
    10Альтернативная функция
    11Аналоговый режим

GPIOx_OTYPER — тип выходов

Смещение 0x04, 32 бит, после сброса 0x0000 0000. В коде: GPIOA->OTYPER.

31302928272625242322212019181716
—
1514131211109876543210
OT15OT14OT13OT12OT11OT10OT9OT8OT7OT6OT5OT4OT3OT2OT1OT0
  • OT0–OT15 (по биту на каждый y, положение — на карте битов) — Тип выхода вывода y: двухтактный или открытый сток.
    OTyЗначение
    0Двухтактный выход
    1Открытый сток

GPIOx_OSPEEDR — скорость выходов

Смещение 0x08, 32 бит, после сброса 0x0C00 0000 (у порта A; у порта B — 0x0000 00C0, у остальных — 0x0000 0000). В коде: GPIOA->OSPEEDR.

31302928272625242322212019181716
OSPEEDR15OSPEEDR14OSPEEDR13OSPEEDR12OSPEEDR11OSPEEDR10OSPEEDR9OSPEEDR8
1514131211109876543210
OSPEEDR7OSPEEDR6OSPEEDR5OSPEEDR4OSPEEDR3OSPEEDR2OSPEEDR1OSPEEDR0
  • OSPEEDR0–OSPEEDR15 (по 2 бита на каждый y, положение — на карте битов) — Скорость (крутизна фронтов) выхода вывода y.
    OSPEEDRyЗначение
    00Низкая (до 2 МГц)
    01Средняя (до 10 МГц)
    10Низкая (код x0, как 00)
    11Высокая (до 50 МГц)

GPIOx_PUPDR — подтяжка вверх и вниз

Смещение 0x0C, 32 бит, после сброса 0x6400 0000 (у порта A; у порта B — 0x0000 0100, у остальных — 0x0000 0000). В коде: GPIOA->PUPDR.

31302928272625242322212019181716
PUPDR15PUPDR14PUPDR13PUPDR12PUPDR11PUPDR10PUPDR9PUPDR8
1514131211109876543210
PUPDR7PUPDR6PUPDR5PUPDR4PUPDR3PUPDR2PUPDR1PUPDR0
  • PUPDR0–PUPDR15 (по 2 бита на каждый y, положение — на карте битов) — Подтяжка вывода y.
    PUPDRyЗначение
    00Без подтяжки
    01Подтяжка вверх
    10Подтяжка вниз

GPIOx_IDR — входные данные порта

Смещение 0x10, 32 бит, после сброса 0x0000 XXXX. В коде: GPIOA->IDR.

31302928272625242322212019181716
—
1514131211109876543210
IDR15IDR14IDR13IDR12IDR11IDR10IDR9IDR8IDR7IDR6IDR5IDR4IDR3IDR2IDR1IDR0
  • IDR0–IDR15 (по биту на каждый y, положение — на карте битов) — Уровень на входе вывода y (только чтение).

GPIOx_ODR — выходные данные порта

Смещение 0x14, 32 бит, после сброса 0x0000 0000. В коде: GPIOA->ODR.

31302928272625242322212019181716
—
1514131211109876543210
ODR15ODR14ODR13ODR12ODR11ODR10ODR9ODR8ODR7ODR6ODR5ODR4ODR3ODR2ODR1ODR0
  • ODR0–ODR15 (по биту на каждый y, положение — на карте битов) — Уровень на выходе вывода y.

GPIOx_BSRR — атомарная установка и сброс выходов

Смещение 0x18, 32 бит, после сброса 0x0000 0000. В коде: GPIOA->BSRR.

31302928272625242322212019181716
BR15BR14BR13BR12BR11BR10BR9BR8BR7BR6BR5BR4BR3BR2BR1BR0
1514131211109876543210
BS15BS14BS13BS12BS11BS10BS9BS8BS7BS6BS5BS4BS3BS2BS1BS0
  • BR2–BR15 (по биту на каждый y, положение — на карте битов) — Сброс выхода y: запись 1 сбрасывает бит ODR, 0 — без действия.
  • BR1 (бит 17) — Сброс выхода 1: запись 1 сбрасывает бит ODR, 0 — без действия.
  • BR0 (бит 16) — Сброс выхода 0: запись 1 сбрасывает бит ODR, 0 — без действия.
  • BS2–BS15 (по биту на каждый y, положение — на карте битов) — Установка выхода y: запись 1 устанавливает бит ODR, 0 — без действия.
  • BS1 (бит 1) — Установка выхода 1: запись 1 устанавливает бит ODR, 0 — без действия.
  • BS0 (бит 0) — Установка выхода 0: запись 1 устанавливает бит ODR, 0 — без действия.

GPIOx_LCKR — блокировка настроек выводов

Смещение 0x1C, 32 бит, после сброса 0x0000 0000. В коде: GPIOA->LCKR.

31302928272625242322212019181716
—LCKK
1514131211109876543210
LCK15LCK14LCK13LCK12LCK11LCK10LCK9LCK8LCK7LCK6LCK5LCK4LCK3LCK2LCK1LCK0
  • LCKK (бит 16) — Ключ блокировки: последовательность записи 1, 0, 1 и чтения фиксирует биты LCK.
  • LCK0–LCK15 (по биту на каждый y, положение — на карте битов) — Блокировка настроек вывода y до следующего сброса.

GPIOx_AFRL — альтернативные функции выводов 0–7 (AFRL)

Смещение 0x20, 32 бит, после сброса 0x0000 0000. В коде: GPIOA->AFR[0].

31302928272625242322212019181716
AFRL7AFRL6AFRL5AFRL4
1514131211109876543210
AFRL3AFRL2AFRL1AFRL0
  • AFRL1–AFRL7 (по 4 бита на каждый y, положение — на карте битов) — Номер альтернативной функции вывода y (AF0–AF15).
  • AFRL0 (биты 3:0) — Номер альтернативной функции вывода 0 (AF0–AF15).

GPIOx_AFRH — альтернативные функции выводов 8–15 (AFRH)

Смещение 0x24, 32 бит, после сброса 0x0000 0000. В коде: GPIOA->AFR[1].

31302928272625242322212019181716
AFRH7AFRH6AFRH5AFRH4
1514131211109876543210
AFRH3AFRH2AFRH1AFRH0
  • AFRH7 (биты 31:28) — Номер альтернативной функции вывода 15 (AF0–AF15).
  • AFRH6 (биты 27:24) — Номер альтернативной функции вывода 14 (AF0–AF15).
  • AFRH5 (биты 23:20) — Номер альтернативной функции вывода 13 (AF0–AF15).
  • AFRH4 (биты 19:16) — Номер альтернативной функции вывода 12 (AF0–AF15).
  • AFRH3 (биты 15:12) — Номер альтернативной функции вывода 11 (AF0–AF15).
  • AFRH2 (биты 11:8) — Номер альтернативной функции вывода 10 (AF0–AF15).
  • AFRH1 (биты 7:4) — Номер альтернативной функции вывода 9 (AF0–AF15).
  • AFRH0 (биты 3:0) — Номер альтернативной функции вывода 8 (AF0–AF15).

GPIOx_BRR — атомарный сброс выходов

Смещение 0x28, 32 бит, после сброса 0x0000 0000. В коде: GPIOA->BRR.

31302928272625242322212019181716
—
1514131211109876543210
BR15BR14BR13BR12BR11BR10BR9BR8BR7BR6BR5BR4BR3BR2BR1BR0
  • BR2–BR15 (по биту на каждый y, положение — на карте битов) — Сброс выхода y: запись 1 сбрасывает бит ODR, 0 — без действия.
  • BR1 (бит 1) — Сброс выхода 1: запись 1 сбрасывает бит ODR, 0 — без действия.
  • BR0 (бит 0) — Сброс выхода 0: запись 1 сбрасывает бит ODR, 0 — без действия.

Частые вопросы

Как настроить PA5 STM32F303 выходом?

RCC->AHBENR |= RCC_AHBENR_GPIOAEN; затем GPIOA->MODER = (GPIOA->MODER & ~GPIO_MODER_MODER5) | GPIO_MODER_MODER5_0. Включать и выключать — GPIOA->BSRR = GPIO_BSRR_BS_5 и GPIOA->BRR = GPIO_BRR_BR_5.

Почему вывод аналогового входа АЦП не работает?

Вывод нужно перевести в аналоговый режим: MODER = 11. В этом режиме отключаются триггер Шмитта и подтяжки, и вход не искажает измерение.

Источники

  1. STMicroelectronics. RM0316: Reference manual (Rev 10) — раздел 11.4: описание регистров, назначение полей и значения после сброса
  2. STMicroelectronics. cmsis-device-f3 v2.3.9: заголовки CMSIS stm32f303x8.h, stm32f303xc.h, stm32f303xe.h, stm32f328xx.h, stm32f358xx.h, stm32f398xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0

Нашли ошибку в регистрах?

Другие регистры STM32F3

Калькуляторы и статьи