Выводы GPIO можно настроить в режиме ввода или вывода. В режиме ввода GPIO используется для чтения внешних сигналов, таких как переключатели, датчики и т. д. Ниже приведены некоторые базовые сведения о входе STM32 GPIO:
Настройка входа GPIO STM32 обычно требует следующих шагов:
Выберите контакт GPIO:
включить часы:
использоватьRCC
(контроллер часов)Включить сопоставлениеGPIOпортовые часы。каждыйGPIOпорт(нравитьсяGPIOA、GPIOBждать)У каждого свои часы,чтобы порт мог работать правильно.
Прототип функции:
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
Описание параметра
RCC_APB1Periph
:Укажите часы, которые необходимо включитьAPB1периферийные устройства,Может быть одним или комбинацией следующих значений(использовать“Побитовое ИЛИ”действовать):
RCC_APB1Periph_TIM2
:таймер2RCC_APB1Periph_TIM3
:таймер3RCC_APB1Periph_TIM4
:таймер4RCC_APB1Periph_USART2
:USART2RCC_APB1Periph_USART3
:USART3RCC_APB1Periph_I2C1
:I2C1RCC_APB1Periph_I2C2
:I2C2RCC_APB1Periph_CAN1
:CAN1RCC_APB1Periph_PWR
:Интерфейс питанияRCC_APB1Periph_BKP
:Резервный интерфейсRCC_APB1Periph_WWDG
:независимый наблюдательNewState
:обозначениепериферийные устройствачасколоколизновый статус,Необязательное значение:
ENABLE
:включить этопериферийные устройстваизчасколокол。DISABLE
:отключить этопериферийные устройстваизчасколокол。Пример использования
Например, чтобы включить часы USART2, вы можете использовать следующий код:
#include "stm32f10x_rcc.h"
void RCC_Config(void) {
// Включить часы для USART2
RCC_APB1PeriphClockCmd(RCC_APB1Periph_GPIOA, ENABLE);
}
Настроить режим вывода:
использоватьGPIO_InitTypeDef
Структура устанавливает режим вывода、Такие свойства, как подтягивающие/понижающие резисторы. Схема контактов включает ввод режима、выходмодельждать,Конкретные настройки можно выполнить по мере необходимости.
звонюGPIO_Init()
перед функцией,Необходимо сначала определить и настроить GPIO_InitTypeDef
переменные-члены структуры. Эта структура обычно содержит следующие элементы:
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
Конфигурациядля подтягиваниярежим ввода, код следующий:
#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порт,может бытьGPIOA
、GPIOB
ждать(Зависит от конкретного чипа)。GPIO_InitStruct
:ориентированныйGPIO_InitTypeDef
Структураизуказатель,Эта структура определяет начальные настройки вывода.Чтение статуса PIN-кода:
Используйте функцию GPIO_ReadInputDataBit(), чтобы прочитать состояние вывода и получить текущий статус внешнего сигнала.
Описание параметра
GPIOx
:обозначениеGPIOпорт,может бытьGPIOA
、GPIOB
ждать(специфическийпорт Зависит от чипа)。GPIO_Pin
:обозначениеGPIOприколоть,может быть GPIO_Pin_0
、GPIO_Pin_1
ждать.возвращаемое значение
1
:выражатьприколотькак высокий уровень。0
:выражатьприколотьэто низкий уровень。uint8_t pinState = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);
if (pinState) {
// Статус контакта высокий
} else {
// Состояние контакта низкое
}
в ходе выполненияGPIOвходить Конфигурациячас,Следующие На что следует обратить вниманиеценностьсосредоточиться на:
Функция входа GPIO STM32 обеспечивает гибкое решение для взаимодействия с внешними устройствами. Правильно настроив контакты GPIO, разработчики могут эффективно считывать внешние сигналы и при необходимости вызывать прерывания, повышая скорость реагирования системы. Я надеюсь, что эта статья поможет вам лучше понять и использовать функцию ввода GPIO STM32. В практических приложениях гибкая настройка GPIO в соответствии с конкретными потребностями значительно повысит производительность и надежность системы.