[Встроенное] Шаг за шагом научит вас, как начать работу с 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
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода