ARM Embedded Tutorial - Simple GPIO on and off output/ru
Простой ввод и вывод GPIO
Порт состоит из «16 контактов», поэтому в большинстве регистров используются младшие «16 бит».
Исключение: «CRx» и «BSRR», с «BSRR» вы можете использовать старшие 16 бит для установки контактов.
Регистры доступа к порту
Для доступа к GPIO доступны следующие регистры:
- CRL — низкий регистр конфигурации
- CRH — высокий регистр конфигурации
- IDR - регистр входных данных
- ODR - регистр выходных данных
- BSRR — регистр сброса набора битов.
- BRR - регистр сброса битов
- LCKR - Регистр блокировки конфигурации порта
Во всех регистрах, кроме CRL и CRH, каждый бит соответствует выводу микроконтроллера.
Включить GPIO
Прежде чем вы сможете получить доступ к GPIO, вам необходимо включить его. Без этого доступ невозможен! Для PortA – PortC это делается следующим образом.
RCC.APB2ENR := RCC.APB2ENR or (% 111 shl 2);Прямое манипулирование портом
Прежде чем вы сможете переключить вывод GPIO на ВЫСОКИЙ уровень, вам необходимо настроить его как выход. Это делается через регистры CRL и CRH.
Для этих мини-примеров я обычно выбираю «Контакт 13 порта C», потому что к этому выводу подключен светодиод STM32F103C.
Внимание: Светодиод загорается при подключении анода к источнику питания.
CRx - Установить функцию контакта
Для настройки функции доступен один полубайт (4 бита). Контакт 13 порта C на выходе. Поскольку 13 больше, чем 7, для этого используется ВЫСОКИЙ регистр CRH. 13 - 8 = 5; Это пятый полубайт в CHR. Pin0–Pin7 будет настроен с использованием CHL.
PortC.CRH := $00300000;IDR - считать весь порт
// На контакте 13 ВЫСОКИЙ уровень?
Result := PortC.ODR and (1 shl 13) > 0;ODR - Записать весь порт
С помощью этой функции записывается весь порт сразу.
// Только контакт 13 установлен на ВЫСОКИЙ уровень.
PortC.ODR := 1 shl 13;
// Все контакты в НИЗКОМ уровне.
PortC.ODR := 0;BSRR - Один контакт на НИЗКИЙ уровень
С помощью этой функции вы можете установить отдельные контакты на «НИЗКИЙ».
// Устанавливаем только вывод 13 на НИЗКИЙ уровень, остальные остаются неизменными.
PortC.BSRR := 1 shl 13;BSRR - Изменить весь порт, используя битовую маску
С помощью этой функции вы можете установить отдельные контакты на «НИЗКИЙ».
// Установите только PIN13 на НИЗКИЙ, PIN12 на ВЫСОКИЙ, остальные остаются неизменными.
PortC.BSRR := (1 shl 13) + ((1 shl 12) shl 16);BRR - Один контакт на ВЫСОКИЙ
С помощью этой функции отдельные контакты могут быть установлены на «ВЫСОКИЙ».
// Устанавливаем только контакт 13 на ВЫСОКИЙ уровень, остальные остаются неизменными.
PortC.BSRR := 1 shl 13;Старшие 16 бит BSRR соответствуют 16 битам BRR.
См. также
- ARM Embedded Tutorials Overview
From the Free Pascal wiki, page "ARM Embedded Tutorial - Simple GPIO on and off output/ru", as it stood on 2024-01-21 after a change by Vitaly, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.
Talk about this page
Nobody has opened a bench for this page yet. Sign in to open one.
