[Встроенное] Шаг за шагом научит вас, как начать работу с STM32 GPIO: использование входа GPIO.
[Встроенное] Шаг за шагом научит вас, как начать работу с STM32 GPIO: использование входа GPIO.

Основные понятия входа GPIO

Выводы GPIO можно настроить в режиме ввода или вывода. В режиме ввода GPIO используется для чтения внешних сигналов, таких как переключатели, датчики и т. д. Ниже приведены некоторые базовые сведения о входе STM32 GPIO:

  • Конфигурация контактов:каждыйGPIOПины могут быть независимыми Конфигурациядля ввода иливыход,Поддерживает различные режимы ввода.
  • режим ввода:GPIOВходные контакты могут Конфигурациядля подтягивания、Понижающий или плавающий ввод,адаптироваться к различным схемам.
  • Функция прерывания:GPIOВход поддерживает внешнее прерывание,Обработчики прерываний могут срабатывать при изменении сигнала.,Повысьте оперативность реагирования в режиме реального времени.

Шаги настройки входа STM32 GPIO

Настройка входа GPIO STM32 обычно требует следующих шагов:

Выберите контакт GPIO

  • Определите используемый контакт GPIO, обратитесь к схеме контактов STM32 и убедитесь, что этот контакт поддерживает функцию ввода.

включить часы

использоватьRCC(контроллер часов)Включить сопоставлениеGPIOпортовые часы。каждыйGPIOпорт(нравитьсяGPIOA、GPIOBждать)У каждого свои часы,чтобы порт мог работать правильно.

Прототип функции:

Язык кода:javascript
копировать
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);

Описание параметра

  • RCC_APB1Periph:Укажите часы, которые необходимо включитьAPB1периферийные устройства,Может быть одним или комбинацией следующих значений(использовать“Побитовое ИЛИ”действовать):
    • RCC_APB1Periph_TIM2:таймер2
    • RCC_APB1Periph_TIM3:таймер3
    • RCC_APB1Periph_TIM4:таймер4
    • RCC_APB1Periph_USART2:USART2
    • RCC_APB1Periph_USART3:USART3
    • RCC_APB1Periph_I2C1:I2C1
    • RCC_APB1Periph_I2C2:I2C2
    • RCC_APB1Periph_CAN1:CAN1
    • RCC_APB1Periph_PWR:Интерфейс питания
    • RCC_APB1Periph_BKP:Резервный интерфейс
    • RCC_APB1Periph_WWDG:независимый наблюдатель
    • Остальные устройства настраиваются по мере необходимости.
  • NewState:обозначениепериферийные устройствачасколоколизновый статус,Необязательное значение:
    • ENABLE:включить этопериферийные устройстваизчасколокол。
    • DISABLE:отключить этопериферийные устройстваизчасколокол。

Пример использования

Например, чтобы включить часы USART2, вы можете использовать следующий код:

Язык кода:javascript
копировать
#include "stm32f10x_rcc.h"

void RCC_Config(void) {
    // Включить часы для USART2
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_GPIOA, ENABLE);
}

Настроить режим вывода

использоватьGPIO_InitTypeDefСтруктура устанавливает режим вывода、Такие свойства, как подтягивающие/понижающие резисторы. Схема контактов включает ввод режима、выходмодельждать,Конкретные настройки можно выполнить по мере необходимости.

звонюGPIO_Init()перед функцией,Необходимо сначала определить и настроить GPIO_InitTypeDef переменные-члены структуры. Эта структура обычно содержит следующие элементы:

Язык кода:javascript
копировать
typedef struct
{
  uint16_t GPIO_Pin;              // Вывод GPIO, который может быть GPIO_Pin_0~GPIO_Pin_15.
  GPIOMode_TypeDef GPIO_Mode;      // Режимы GPIO, такие как ввод, вывод, мультиплексирование и т. д.
  GPIOSpeed_TypeDef GPIO_Speed;    // Скорость GPIO, действительна только в режиме вывода
} GPIO_InitTypeDef;
  • GPIO_Pin:Указать КонфигурацияизGPIOприколоть,может быть GPIO_Pin_0 приезжать GPIO_Pin_15。доступный | Оператор выбирает несколько контактов.
  • GPIO_Mode:обозначениеGPIOмодель,специфическийнравиться Вниз:
    • GPIO_Mode_AIN:моделированиережим ввода。
    • GPIO_Mode_IN_FLOATING:плавающийрежим ввода。
    • GPIO_Mode_IPD:падатьрежим ввода。
    • GPIO_Mode_IPU:Остановитьрежим ввода。
    • GPIO_Mode_Out_OD:Открытый сливвыходмодель。
    • GPIO_Mode_Out_PP:двухтактныйвыходмодель。
    • GPIO_Mode_AF_OD:Функция повторного использования Открытый сливвыходмодель。
    • GPIO_Mode_AF_PP:Функция повторного использованиядвухтактныйвыходмодель。
  • GPIO_Speed:обозначениевыходскорость,только ввыходмодельэффективный:
    • GPIO_Speed_10MHz:10 Скорость МГц.
    • GPIO_Speed_2MHz:2 Скорость МГц.
    • GPIO_Speed_50MHz:50 Скорость МГц.

Предположим, мы хотимGPIOAизPA0Конфигурациядля подтягиваниярежим ввода, код следующий:

Язык кода:javascript
копировать
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"

void GPIO_Config(void) {
    // Включить часы GPIOA
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    GPIO_InitTypeDef GPIO_InitStructure;

    // КонфигурацияPA0для подтягиваниярежим ввода
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  // подтягивающий вход
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // Установите скорость, не влияя на режим ввода
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}

контакт инициализации

вызовGPIO_Init()функция завершенаприколотьизинициализация,убеждаться Конфигурация контактов Вступить в силу。

Описание параметра

  • GPIOx:обозначениеGPIOпорт,может бытьGPIOAGPIOBждать(Зависит от конкретного чипа)。
  • GPIO_InitStruct:ориентированныйGPIO_InitTypeDefСтруктураизуказатель,Эта структура определяет начальные настройки вывода.

Чтение статуса PIN-кода

Используйте функцию GPIO_ReadInputDataBit(), чтобы прочитать состояние вывода и получить текущий статус внешнего сигнала.

Описание параметра

  • GPIOx:обозначениеGPIOпорт,может бытьGPIOAGPIOBждать(специфическийпорт Зависит от чипа)。
  • GPIO_Pin:обозначениеGPIOприколоть,может быть GPIO_Pin_0GPIO_Pin_1 ждать.

возвращаемое значение

  • 1:выражатьприколотькак высокий уровень。
  • 0:выражатьприколотьэто низкий уровень。
Язык кода:javascript
копировать
uint8_t pinState = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);

if (pinState) {
    // Статус контакта высокий
} else {
    // Состояние контакта низкое
}

На что следует обратить внимание

в ходе выполненияGPIOвходить Конфигурациячас,Следующие На что следует обратить вниманиеценностьсосредоточиться на:

  • Убедитесь, что часы включены:существовать КонфигурацияGPIOДо,должно быть правильновключить часы。Нетвключить Контакты GPIO часов не будут работать должным образом.
  • Конфигурация внешнего прерывания:использоватьвнешнее прерываниечас,В дополнение к контактам конфигурации GPIO,Также требуется правильный NVIC (контроллер прерываний).,для обработки соответствующей процедуры обслуживания прерываний (ISR).
  • устранение дребезга сигнала:существоватьпереключатель чтенияждатьмеханический сигналчас,Может возникнуть дрожание. Стабильность сигнала можно улучшить с помощью программного устранения дребезга или аппаратных фильтров.

Подвести итог

Функция входа GPIO STM32 обеспечивает гибкое решение для взаимодействия с внешними устройствами. Правильно настроив контакты GPIO, разработчики могут эффективно считывать внешние сигналы и при необходимости вызывать прерывания, повышая скорость реагирования системы. Я надеюсь, что эта статья поможет вам лучше понять и использовать функцию ввода GPIO STM32. В практических приложениях гибкая настройка GPIO в соответствии с конкретными потребностями значительно повысит производительность и надежность системы.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose