Top.Mail.Ru
Уведомления
Очистить все

[Решено] Перенастроить GPIO на лету с Input на Output и обратно.

(@kostroma)
New member

Всем привет, пробовал кто-нибудь в процессе работы переконфигурировать GPIO со входа на выход и обратно? Как лучше это сделать?

Цитата
Создатель темы Размещено : 03.09.2023 15:09
Метки темы
(@eduard)
Level 4 Moderator

Пробовал. Элементарно.

В регистр MODER записываешь или 00 на нужный вывод для входа, или 01 для выхода.

изображение
ОтветитьЦитата
Размещено : 03.09.2023 18:11
Aveal
(@aveal)
Top level Admin

Главное, меняя какие-либо биты регистра, не изменить все остальные. И сами регистры зависят от конкретного контроллера/семейства, для STM32F10x:

изображение

Номера выводов с 8-го по 15-й - регистр CRH, выводы с 0-го по 7-й - аналогичный регистр CRL.

Допустим настраиваем PA3:

GPIOA->CRL &= ~(GPIO_CRL_MODE3 | GPIO_CRL_CNF3);
GPIOA->CRL |= (0x01 << GPIO_CRL_MODE3_Pos) | (0x02 << GPIO_CRL_CNF3_Pos);

Первая строка - обнуляем соответствующие биты:

изображение

Вторая строка - записываем нужные значения, в данном случае: 0x01 (биты 01: Output mode, max speed 10 MHz) и 0x02 (биты 10: Alternate function output Push-pull).

ОтветитьЦитата
Размещено : 04.09.2023 10:40
(@eduard)
Level 4 Moderator

@aveal Это только для F103 остальные по таблице, что я привёл. Всё время забываю об этой его особенности.

ОтветитьЦитата
Размещено : 04.09.2023 19:23
Aveal
(@aveal)
Top level Admin

Да, в основном как писал Эдуард нужно делать.

ОтветитьЦитата
Размещено : 04.09.2023 20:38
(@kostroma)
New member

А если через HAL?

GPIO_InitStruct.Pin = GPIO_PIN_8;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
ОтветитьЦитата
Создатель темы Размещено : 04.09.2023 21:01
Aveal
(@aveal)
Top level Admin

@kostroma технически можно, фактически - неоптимально.

ОтветитьЦитата
Размещено : 04.09.2023 21:05
(@kostroma)
New member

Понятно, спасибо всем )

ОтветитьЦитата
Создатель темы Размещено : 04.09.2023 21:15
(@eduard)
Level 4 Moderator

@kostroma Через прямой доступ к регистрам быстрее и код короче.

HAL монструозен очень.

ОтветитьЦитата
Размещено : 05.09.2023 19:31
Поделиться: