Начало работы с STM32: GPIO

встроенный

Правила именования STM32

Пример: STM32 F 103 C 8 T 6

  1. Семейство продуктов STM32 = 32-разрядный микроконтроллер на базе ARM
  2. Подсерия продукта
  • 101=Основной
  • 102 = базовый тип USB, полноскоростное устройство USB 2.0
  • 103=Расширенный
  • 105 или 107 = Взаимосвязанные
  1. Количество контактов
  • Т=36 контактов
  • С=48 контактов
  • R=64 контакта
  • V=100 контактов
  1. Емкость флэш-памяти (flash)
  • 4=16К байт
  • 6=32К байт
  • 8=64К байт
  • С=256К байт
  • Д=384К байт
  • Е=512К байт
  1. упаковка
  • H=BGA
  • T=LQFP
  • U=VFQFPN
  • Y=WLCSP64
  1. диапазон температур
  • 6 = промышленный диапазон температур: -40 ℃ ~ 85 ℃
  • 7=Промышленный диапазон температур: -40℃~105℃

GPIO

Как работает GPIO

  1. Четыре режима ввода
  • Плавающий ввод (GPIO_Mode_IN_FLOATING): сигнал уровня порта ввода-вывода напрямую поступает в регистр входных данных. То есть состояние уровня ввода-вывода неопределенно и полностью определяется внешним входом; если вывод остается плавающим (при отсутствии входного сигнала), уровень чтения порта неопределен.

输入浮空

  • Входной подтягивающий сигнал (GPIO_Mode_IPU): сигнал уровня порта ввода-вывода напрямую поступает в регистр входных данных. Однако, когда порт ввода/вывода является плавающим (при отсутствии входного сигнала), уровень входной клеммы может поддерживаться на высоком уровне, а когда вход порта ввода/вывода находится на низком уровне, уровень входного терминала все еще низкий.

输入上拉

  • Входной раскрывающийся список (GPIO_Mode_IPD): сигнал уровня порта ввода-вывода напрямую поступает в регистр входных данных. Однако, когда порт ввода/вывода является плавающим (нет входного сигнала), уровень входной клеммы может поддерживаться на низком уровне, а когда вход порта ввода/вывода находится на высоком уровне, уровень входной терминал по-прежнему высокий плоский.

输入下拉

  • Аналоговый вход (GPIO_Mode_AIN): аналоговый сигнал (сигнал напряжения, а не сигнал уровня) порта ввода-вывода является прямым аналоговым входом для встроенных периферийных модулей, таких как модули АЦП и т. д.

模拟输入2. Четыре режима вывода

  • Выход с открытым стоком (GPIO_Mode_Out_OD): установите/очистите регистр или выведите значение регистра данных, установив бит, пропустите через трубку N-MOS и, наконец, выведите на порт ввода-вывода. Обратите внимание на трубку N-MOS.Когда выходное значение установлено на высокий уровень, трубка N-MOS находится в закрытом состоянии.В это время уровень порта ввода/вывода не будет определяться высокий и низкий уровни вывода, но внешним портом ввода/выводаПотяните вверх или потяните внизрешение; когда значение установленного выходанизкий уровеньКогда трубка N-MOS включена, уровень порта ввода-выводанизкий уровень. В то же время уровень порта ввода-вывода также можно считывать через входную цепь; обратите внимание, что уровень порта ввода-вывода не обязательно является выходным уровнем.

开漏输出

  • Мультиплексирование с открытым стоком (GPIO_Mode_AF_OD): очень похоже на выходной режим с открытым стоком. Это только источник высокого и низкого уровня вывода, не позволяющий ЦП напрямую записывать регистр выходных данных, а использовать для принятия решения функцию мультиплексирования периферийного модуля на кристалле.

开漏复用

  • Двухтактный выход (GPIO_Mode_Out_PP): установите/очистите значение регистра или регистра выходных данных, установив бит, пропустите через трубку P-MOS и трубку N-MOS и, наконец, выведите на порт ввода-вывода. Обратите внимание на трубку P-MOS и трубку N-MOS здесь, когда установлено выходное значениевысокий уровеньВ это время трубка P-MOS включена, а трубка N-MOS выключена.В это время уровень порта ввода-вывода определяется трубкой P-MOS:высокий уровень; когда установленное выходное значениенизкий уровеньВ это время трубка P-MOS выключена, а трубка N-MOS включена.В это время уровень порта ввода-вывода определяется трубкой N-MOS:низкий уровень. В то же время уровень порта ввода-вывода также можно считывать через входную цепь; обратите внимание, что уровень порта ввода-вывода в это время должен быть выходным уровнем.

推挽输出

  • Двухтактное мультиплексирование (GPIO_Mode_AF_PP): очень похоже на двухтактный режим вывода. Это только источник высокого и низкого уровня вывода, не позволяющий ЦП напрямую записывать регистр выходных данных, а использовать для принятия решения функцию мультиплексирования периферийного модуля на кристалле.

推挽复用

  • Разница между выходом с открытым стоком и двухтактным выходом: выход с открытым стоком может выводить только сильный низкий уровень, а высокий уровень должен подтягиваться внешним резистором. Выходная клемма эквивалентна коллектору триода. Он подходит для токовых приводов, и его способность поглощать ток относительно высока (обычно в пределах 20 мА); двухтактный выход может выводить сильные высокие и низкие уровни и подключаться к цифровым устройствам.
  1. Три максимальные скорости переворота: 2МГц, 10МГц, 50МГц

Регистры конфигурации, связанные с GPIO

Регистры для каждой группы портов GPIO включают (настройте GPIO по группам):

  • Два 32-битных регистра конфигурации (GPIOx_CRL, GPIOx_CRH)
  • Два 32-битных регистра данных (GPIOx_IDR, GPIOx_ODR)
  • Один 32-битный регистр установки/очистки (GPIOx_BSRR)
  • 16-битный регистр сброса (GPIOx_BRR)
  • 32-битный регистр блокировки (GPIOx_LCKR)
  1. GPIOx_CRL, GPIOx_CRH

Каждому GPIO требуется 4 бита для настройки, то есть всего требуется 4×16=64 бита, а один регистр STM32 — 32 бита, поэтому для настройки группы GPIO требуется два регистра. Где GPIOx_CRL настраивает от 0 до 7, а GPIOx_CRH настраивает от 8 до 15. Для каждого GPIO младшие 2 бита из 4 настраивают, является ли он вводом или выводом, а старшие 2 бита настраивают конкретный режим ввода/вывода. Например, в двух младших цифрах

  • 00: Режим ввода (состояние после сброса)
  • 01: режим вывода, максимальная скорость 10 МГц
  • 10: режим вывода, максимальная скорость 2 МГц
  • 11: режим вывода, максимальная скорость 50 МГц

В двух старших битах, если это режим ввода,

  • 00: Аналоговый вход
  • 01: Плавающий вход (состояние после сброса)
  • 10: Вход Pull-up/Pull-Down (специально настроенный регистром GPIOx_ODR)
  • 11: зарезервировано

В режиме вывода

  • 00: двухтактный выход
  • 01: Выход с открытым стоком
  • 10: мультиплексирование двухтактного выхода
  • 11: Мультиплексированный выход с открытым стоком
  1. GPIOx_IDR, GPIOx_ODR
  • Биты GPIOx_IDR 31:16, зарезервированы всегда 0, биты 15:0, соответствующие этой группе16 уровней входа GPIO. Эти биты доступны только для чтения и могут считываться только как слова (16 бит);
  • GPIOx_ODR Бит 31:16, зарезервировано всегда 0; Бит 15:0, управляет выходным уровнем этой группы из 16 GPIO.Установите на 0, выход низкий, установите на 1, выход высокий. Операции могут выполняться только словами (16 бит).

Кроме того, когда этот порт ввода-вывода находится в режиме ввода, при установке соответствующего среднего бита ODR в 0 вход подтягивается вниз; если он установлен в 1, ввод подтягивается вверх. 3. GPIOx_BSRR, GPIOx_BRR

  • GPIOx_BSRR Бит 31:16, если бит установлен в 1, соответствующий бит ODR равен 0 (немного ясно); при значении 0 соответствующая медиана ODR не изменяется. Бит 15: 0, если бит установлен в 1, соответствующий бит ODR равен 1 (установка бит); при значении 0 соответствующая медиана ODR не изменяется.
  • GPIOx_BRR имеет ту же функцию, что и старшие 16 бит BSRR (очистка бита).

Библиотечные функции, связанные с GPIO

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

битовая операция

Раздувать каждый бит (карта) является 32-битным словом.При доступе к этим словам достигается цель доступа к битам.Например, регистр BSRR имеет 32 бита, поэтому он может быть отображен на 32 адреса.Давайте доступ (чтение-изменение-запись) Эти 32 адреса достигают цели доступа к 32 битам.То есть, если вы хотите переписать бит регистра, вы можете просто переписать адрес, отображаемый этим битом., вызовите инкапсулированные связанные функции, такие какPBout(5)=1;соответствуетGPIOB->ODR|=1<<5;

Ссылки по теме

использованная литература

  1. [STM32] Принцип работы GPIO (сверхдетальный анализ восьми режимов работы с принципиальной схемой)
  2. [Punctual Atom] Обучение обучению микроконтроллеру STM32 обучающее видео