Начало работы с STM32: мультиплексирование и переназначение портов

встроенный

Мультиплексирование портов

STM32 имеет множество встроенных периферийных устройств, а внешние контакты этих периферийных устройств мультиплексированы с помощью GPIO. То есть, если GPIO можно повторно использовать в качестве функционального вывода встроенного периферийного устройства, то когда этоКогда GPIO используется как встроенное периферийное устройство, это называется мультиплексированием.. (Встроенные периферийные устройства — это периферийные устройства, интегрированные внутри микроконтроллера, и имеются соответствующие регистры.)

Например, передающие и принимающие контакты последовательного порта 1 — это PA9 и PA10.Когда мы используем PA9 и PA10 не как GPIO, а как отправляющие и принимающие контакты последовательного порта 1 с функцией мультиплексирования, это называется мультиплексированием портов.

Процесс настройки мультиплексирования портов

Возьмем, к примеру, PA9, PA10, настроенные как последовательный порт 1.

  1. Часы порта GPIO включены
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  1. Включение мультиплексированных периферийных часов
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//使能串口时钟
  1. Конфигурация режима порта:GPIO_Init()函数(проверить таблицу)

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIO时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//串口时钟使能
	
//初始化I/0为对应的模式
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出
GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_Init(GPIOA,&GPIO_InitStructure);

переназначение портов

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

Возьмите последовательный порт 1 в качестве примера,По умолчанию контакты отправки и получения последовательного порта 1 — PA9 и PA10.

Частичное переназначение и полное переназначение

  • Частичное переназначение: некоторые контакты функциональных периферийных устройств переназначаются, а некоторые контакты являются исходными контактами по умолчанию;
  • Полное переназначение: все контакты функциональных периферийных устройств переназначаются.

Процесс настройки переназначения контактов (на примере последовательного порта 1)

  1. Включить часы GPIO (IO после переназначения)
  2. Включить функцию периферийных часов (например, последовательный порт 1)
  3. Включите часы AFIO, переназначение должно включать часы AFIO;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  1. Включите переназначение (по первому параметру, чтобы определить частичное переназначение или полное переназначение)
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);

Случай включения вспомогательной функции часов AFIO

парный регистрAFIO_MAPR AFIO_EXTICRX AFIO_EVCRВо время операций чтения и записи

  • AFIO_MAPR: настроить переназначение функции мультиплексирования
  • AFIO_EXTICRX: настроить отображение линии внешнего прерывания
  • AFIO_EVCR: настроить вывод события EVENTOUT

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

  1. Мультиплексирование и переназначение портов stm32
  2. [Punctual Atom] Обучение обучению микроконтроллеру STM32 обучающее видео