Правила именования STM32
Пример: STM32 F 103 C 8 T 6
- Семейство продуктов STM32 = 32-разрядный микроконтроллер на базе ARM
- Подсерия продукта
- 101=Основной
- 102 = базовый тип USB, полноскоростное устройство USB 2.0
- 103=Расширенный
- 105 или 107 = Взаимосвязанные
- Количество контактов
- Т=36 контактов
- С=48 контактов
- R=64 контакта
- V=100 контактов
- Емкость флэш-памяти (flash)
- 4=16К байт
- 6=32К байт
- 8=64К байт
- С=256К байт
- Д=384К байт
- Е=512К байт
- упаковка
- H=BGA
- T=LQFP
- U=VFQFPN
- Y=WLCSP64
- диапазон температур
- 6 = промышленный диапазон температур: -40 ℃ ~ 85 ℃
- 7=Промышленный диапазон температур: -40℃~105℃
GPIO
Как работает GPIO
- Четыре режима ввода
- Плавающий ввод (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 мА); двухтактный выход может выводить сильные высокие и низкие уровни и подключаться к цифровым устройствам.
- Три максимальные скорости переворота: 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)
- 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: Мультиплексированный выход с открытым стоком
- 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;