能否提供一个STM32端口GPIO用作输入模式的配置和读取示例程序代码?
时间: 2024-12-12 17:23:15 浏览: 19
当然可以。STM32的GPIO端口通常用于数字输入输出控制,作为输入模式,我们首先需要设置GPIO的模式为输入,并使能中断(如果需要)。以下是一个简单的示例,假设我们使用的是GPIOA的PIN0作为输入:
```c
#include "stm32f1xx_hal.h"
// 定义GPIOA和PIN0的宏
#define GPIO_PIN_SOURCE_GPIOA 0x00000010 // GPIOA的输入源使能
#define GPIO_PIN_SOURCE_PULLUP 0x00000400 // 引脚上拉电阻
// 初始化GPIOA并设置PIN0为输入模式,带内部上拉
void configure_GPIOA_Pin0_as_input(void) {
GPIO_InitTypeDef GPIO_InitStruct = {0};
// 配置GPIOA为通用I/O
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP; // 或者GPIO_NOPULL取消上拉电阻
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// 开启GPIOA的电源
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); // 设置低电平有效
// 设置GPIOA的线路速度和功能(这里仅做示例,实际应用可能不需要)
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_SOURCE_GPIOA | GPIO_PIN_SOURCE_PULLUP, GPIO_PIN_RESET);
}
// 读取GPIOA PIN0的状态
bool read_GPIOA_Pin0(void) {
return HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET ? true : false; // 返回高电平(1)还是低电平(0)
}
int main(void) {
configure_GPIOA_Pin0_as_input();
while (1) {
if (read_GPIOA_Pin0()) {
// 当PIN0为高电平时,执行相应操作...
printf("GPIOA PIN0 is high.\n");
}
else {
// 当PIN0为低电平时,执行其他操作...
printf("GPIOA PIN0 is low.\n");
}
}
return 0;
}
```
阅读全文