Мультиплексирование портов
STM32 имеет множество встроенных периферийных устройств, а внешние контакты этих периферийных устройств мультиплексированы с помощью GPIO. То есть, если GPIO можно повторно использовать в качестве функционального вывода встроенного периферийного устройства, то когда этоКогда GPIO используется как встроенное периферийное устройство, это называется мультиплексированием.. (Встроенные периферийные устройства — это периферийные устройства, интегрированные внутри микроконтроллера, и имеются соответствующие регистры.)
Например, передающие и принимающие контакты последовательного порта 1 — это PA9 и PA10.Когда мы используем PA9 и PA10 не как GPIO, а как отправляющие и принимающие контакты последовательного порта 1 с функцией мультиплексирования, это называется мультиплексированием портов.
Процесс настройки мультиплексирования портов
Возьмем, к примеру, PA9, PA10, настроенные как последовательный порт 1.
- Часы порта GPIO включены
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
- Включение мультиплексированных периферийных часов
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//使能串口时钟
- Конфигурация режима порта:
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)
- Включить часы GPIO (IO после переназначения)
- Включить функцию периферийных часов (например, последовательный порт 1)
- Включите часы AFIO, переназначение должно включать часы AFIO;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
- Включите переназначение (по первому параметру, чтобы определить частичное переназначение или полное переназначение)
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);
Случай включения вспомогательной функции часов AFIO
парный регистрAFIO_MAPR AFIO_EXTICRX AFIO_EVCR
Во время операций чтения и записи
- AFIO_MAPR: настроить переназначение функции мультиплексирования
- AFIO_EXTICRX: настроить отображение линии внешнего прерывания
- AFIO_EVCR: настроить вывод события EVENTOUT