Определение констант для GPIO STM32

Вопрос или проблема

Я работаю над программой для STM32F103C8T6 и не смог найти константу GPIOA_OTYPER. Я хочу настроить PA0 до PA7 как push-pull для 8-битного параллельного вывода. Когда я гуглю константы, я нахожу несколько сайтов, на которых это сделано разными способами:

#define RCC_AHB1ENR (*((volatile unsigned int*)0x40023830))
#define GPIOA_MODER (*((volatile unsigned int*)0x40020000))
#define GPIOA_BSRR  (*((volatile unsigned int*)0x40020018))
#define RCC_AHB1ENR RCC_BASE + 0x30
#define GPIOA_MODER GPIOA_BASE + 0x00
#define GPIOA_BSRR  GPIOA_BASE + 0x18 

Мы все изобретаем колесо в каждом проекте?
Разве не должно быть заголовочного файла, чтобы задать их все сразу?
Я не смог его найти, и если он есть, где я могу его найти?

Если вы определяете такие вещи самостоятельно, вы определенно изобретаете колесо заново. То, что вы ищете, это CMSIS.

Это предоставляет стандартные определения для всех ЦП ARM Cortex-M. Производители также добавляют свои собственные определения для своих продуктов, например, ST Micro имеют свои определения, которые охватывают периферийные устройства, включенные в их линию МК STM32.

Если вы создали проект с использованием STM32CubeIDE, то все эти файлы будут в директории Drivers/CMSIS в вашем проекте.

Ответ или решение

Для работы с GPIO (например, установка выводов PA0-PA7 в режим "push-pull") на микроконтроллере STM32F103C8T6, вы правильно отметили, что определение констант вручную может привести к повторению одних и тех же усилий в разных проектах. На самом деле, существует более эффективный способ работы с такими константами через использование стандартизации, предоставляемой CMSIS.

Что такое CMSIS?

CMSIS (Cortex Microcontroller Software Interface Standard) — это стандарт, разработанный компанией ARM для упрощения программирования на базе ARM Cortex-M. В дополнение к базовым определениям и функциям, производители микроконтроллеров, такие как STMicroelectronics, добавляют свои собственные заголовочные файлы и библиотеки, обеспечивая доступ ко всем периферийным устройствам, включая GPIO.

Как работать с GPIO в STM32?

  1. Подключение заголовочных файлов: Если вы создали проект в STM32CubeIDE, все необходимые заголовочные файлы находятся в директории вашего проекта: Drivers/CMSIS/CMSIS/Device/ST/STM32F1xx/Include. Заголовочный файл, который вам нужен, обычно называется stm32f103x6.h или подобным образом.

  2. Определение регистров GPIO:
    Чтобы установить PA0-PA7 как push-pull, вам потребуется настроить регистр MODER (модус операций). Для этого можно использовать следующие определения, которые уже предоставлены в заголовочном файле:

    #define RCC_AHBENR  (*((volatile unsigned int*)0x40023830))
    #define GPIOA_MODER (*((volatile unsigned int*)0x40020000))
    #define GPIOA_OTYPER (*((volatile unsigned int*)0x40020004))

    Установка в MODER для PA0-PA7 в режим "output" (00) делается следующим образом:

    RCC->AHB1ENR |= (1 << 0);  // Включаем тактирование GPIOA
    GPIOA->MODER &= ~((0x03 << 0) | (0x03 << 2) | (0x03 << 4) | (0x03 << 6) | (0x03 << 8) | (0x03 << 10) | (0x03 << 12) | (0x03 << 14)); // Очищаем режимы PA0-PA7
    GPIOA->MODER |= (0x01 << 0) | (0x01 << 2) | (0x01 << 4) | (0x01 << 6) | (0x01 << 8) | (0x01 << 10) | (0x01 << 12) | (0x01 << 14); // Устанавливаем PA0-PA7 как output
    GPIOA->OTYPER &= ~((1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7)); // Убедитесь, что они в режиме push-pull
  3. Использование стандартной библиотеки STM32: Вместо ручного определения регистров, рекомендуется использовать HAL или LL библиотеки от ST. Это абстракция, которая устраняет необходимость работы с регистрами напрямую, что делает код более прогулочным и безопасным.

Заключение

Итак, если вы занимались ручным определением регистров GPIO, это вполне нормально для изучения, но в реальных проектах рекомендуется использовать готовые решения, такие как CMSIS и HAL от STMicroelectronics. Эти библиотеки не только упростят процесс разработки, но и повысят читабельность и поддерживаемость вашего кода. Поиск заголовочных файлов и документации, такой как HAL, значительно ускорит процесс разработки и избавит вас от дублирования усилий.

Оцените материал
Добавить комментарий

Капча загружается...