STM32微控制器的GPIO(通用输入/输出)配置是嵌入式系统开发中常见的任务之一。以下是一些基本的GPIO配置代码示例,使用STM32CubeMX和HAL库进行配置。
### 1. 初始化GPIO为输入模式
```c
GPIO_InitTypeDef GPIO_InitStruct = {0};
// 启用GPIO时钟
__HAL_RCC_GPIOA_CLK_ENABLE();
// 配置GPIO为输入模式
GPIO_InitStruct.Pin = GPIO_PIN_0; // 选择PA0作为输入
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // 设置为输入模式
GPIO_InitStruct.Pull = GPIO_NOPULL; // 无上拉/下拉电阻
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
```
### 2. 初始化GPIO为输出模式
```c
// 启用GPIO时钟
__HAL_RCC_GPIOA_CLK_ENABLE();
// 配置GPIO为输出模式
GPIO_InitStruct.Pin = GPIO_PIN_1; // 选择PA1作为输出
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 设置为推挽输出模式
GPIO_InitStruct.Pull = GPIO_NOPULL; // 无上拉/下拉电阻
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 低速
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
```
### 3. 读取GPIO输入值
```c
uint8_t input_value = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
if (input_value == GPIO_PIN_SET) {
// PA0为高电平
} else {
// PA0为低电平
}
```
### 4. 写GPIO输出值
```c
// 将PA1设置为高电平
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
// 将PA1设置为低电平
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
```
### 5. 配置GPIO为中断模式
```c
// 配置GPIO为中断模式
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; // 配置为上升沿触发中断
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// 配置NVIC
HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
// 启用GPIO中断
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
```
### 6. 中断服务例程
```c
void EXTI0_IRQHandler(void) {
if (__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_0) != RESET) {
__HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_0);
// 执行中断处理代码
}
}
```
这些示例提供了STM32 GPIO配置的基本框架,包括输入、输出、读取状态和中断配置。在实际应用中,你可能需要根据具体的硬件和需求进行调整。例如,你可能需要配置不同的GPIO端口、引脚、模式、速度和中断优先级。此外,STM32CubeMX工具可以自动生成初始化代码,大大简化了配置过程。