void GPIO3_Input_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(GPIO3_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO3_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // GPIO_3引脚作为带上拉的输入口 GPIO_Init(GPIO3_PORT, &GPIO_InitStructure); }
时间: 2024-04-22 12:28:52 浏览: 64
这段代码是用于配置STM32的GPIO3口为带上拉的输入模式的函数。首先定义GPIO_InitTypeDef结构体变量GPIO_InitStructure,用于配置GPIO口。然后开启GPIO3口的时钟。接着配置GPIO3口的引脚为输入模式,同时启用上拉电阻。最后通过GPIO_Init函数将这些配置应用到GPIO3口上。这段代码的作用是将GPIO3口配置为输入模式,并启用上拉电阻,以便于读取外部输入信号。
相关问题
void hc_sr04_init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13; GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IPD; GPIO_Init(GPIOC,&GPIO_InitStructure); }
### STM32 HC-SR04 超声波模块初始化代码解析
HC-SR04 是一种常用的超声波传感器,用于测量距离。为了在 STM32 微控制器上使用该模块,需要完成硬件接口的初始化工作,主要包括 GPIO 配置以及触发信号和接收回响信号的相关设置。
#### 初始化函数的核心功能
初始化函数的主要目的是配置 STM32 的 GPIO 引脚以便能够驱动 HC-SR04 模块的工作模式。具体来说,这涉及两个主要部分:
1. **Trig 引脚 (GPIO 输出)**:用于向 HC-SR04 发送 10μs 的高电平脉冲以启动测距过程。
2. **Echo 引脚 (GPIO 输入)**:用于检测 HC-SR04 返回的 TTL 电平信号,并计算其持续时间来推导出实际的距离[^1]。
以下是基于 HAL 库的一个典型初始化代码示例:
```c
#include "stm32f1xx_hal.h"
// 定义 Trig 和 Echo 对应的 GPIO 引脚
#define TRIG_PIN GPIO_PIN_9
#define ECHO_PIN GPIO_PIN_10
#define GPIO_PORT GPIOA
void HC_SR04_Init(void) {
__HAL_RCC_GPIOA_CLK_ENABLE(); // 启用 GPIOA 时钟
// 配置 Trig 引脚为输出模式
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = TRIG_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出
GPIO_InitStruct.Pull = GPIO_NOPULL; // 不带上下拉电阻
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 设置速度为低速即可
HAL_GPIO_Init(GPIO_PORT, &GPIO_InitStruct);
// 配置 Echo 引脚为输入模式
GPIO_InitStruct.Pin = ECHO_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // 输入模式
GPIO_InitStruct.Pull = GPIO_PULLDOWN; // 下拉输入防止浮空
HAL_GPIO_Init(GPIO_PORT, &GPIO_InitStruct);
}
```
#### 关键点分析
- `__HAL_RCC_GPIOA_CLK_ENABLE()` 函数启用了 GPIOA 外设的时钟供应,这是任何 GPIO 操作的前提条件。
- 使用了结构体变量 `GPIO_InitTypeDef` 来定义引脚的具体参数,包括 Pin 编号、Mode(模式)、Pull(上下拉状态)以及 Speed(速度)等属性。
- 将 Trig 设定为推挽输出 (`GPIO_MODE_OUTPUT_PP`) 并禁用内部上下拉电阻 (`GPIO_NOPULL`),这样可以确保精确控制发送至 HC-SR04 的触发信号。
- 把 Echo 配置成下拉输入 (`GPIO_PULLDOWN`) 可有效减少噪声干扰并稳定读取返回信号的状态变化。
以上即完成了基本的硬件层面准备阶段,在此基础上还需要编写相应的软件逻辑去处理数据采集与转换等工作流程。
void Switch_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4; //输入 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); }在这个基础上配置PA15 PB3 PB4引脚作为输入引脚
### STM32 配置 PA15、PB3 和 PB4 为输入引脚的 GPIO 初始化代码
为了实现将 PA15、PB3 和 PB4 配置为输入引脚的功能,需要完成以下几个关键操作:
1. **使能相关外设时钟**:确保 GPIOA 和 GPIOB 的时钟被启用。
2. **禁用 JTAG 功能**:由于 PB3 和 PB4 默认分配给 JTAG 接口,在将其配置为普通 IO 前需通过重映射功能禁用 JTAG。
3. **配置引脚模式**:将目标引脚设置为输入模式。
以下是完整的初始化代码示例:
```c
#include "stm32f1xx_hal.h"
void GPIO_Init_Input(void) {
// 定义结构体变量
GPIO_InitTypeDef GPIO_InitStruct;
// 使能 GPIOA 和 GPIOB 外设时钟以及 AFIO 时钟
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_AFIO_CLK_ENABLE();
// 禁用 JTAG 功能,保留 SWD 调试功能(允许使用 PB3 和 PB4 作为普通 IO)
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
__HAL_AFIO_REMAP_SWJ_DISABLE(); // 或者使用 GPIO_Remap_SWJ_JTAGDisable 来仅禁用 JTAG[^4]
// 配置 PA15 为输入模式
GPIO_InitStruct.Pin = GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // 输入模式
GPIO_InitStruct.Pull = GPIO_NOPULL; // 不带上下拉电阻
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// 配置 PB3 和 PB4 为输入模式
GPIO_InitStruct.Pin = GPIO_PIN_3 | GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // 输入模式
GPIO_InitStruct.Pull = GPIO_PULLUP; // 上拉输入(可根据需求调整为下拉或无上下拉)
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
```
#### 参数说明
- `__HAL_RCC_GPIOA_CLK_ENABLE()` 和 `__HAL_RCC_GPIOB_CLK_ENABLE()`: 启用 GPIOA 和 GPIOB 的时钟。
- `__HAL_RCC_AFIO_CLK_ENABLE()`: 启用 AFIO 模块时钟,用于支持引脚重映射功能。
- `__HAL_AFIO_REMAP_SWJ_DISABLE()`: 禁用全部 JTAG/SWD 功能,使得 PB3、PB4 及其他相关引脚可用作普通 IO[^4]。
- `GPIO_InitStruct.Pin`: 指定要初始化的具体引脚。
- `GPIO_InitStruct.Mode`: 设置引脚的工作模式,此处为 `GPIO_MODE_INPUT` 表示输入模式。
- `GPIO_InitStruct.Pull`: 配置上拉/下拉电阻状态。可以选择 `GPIO_NOPULL`, `GPIO_PULLUP`, 或 `GPIO_PULLDOWN`。
---
### 注意事项
1. 若希望保留部分调试功能(如 SWD),则可以改用 `GPIO_Remap_SWJ_JTAGDisable` 替代 `GPIO_Remap_SWJ_Disable`。
2. 在实际应用中,建议根据具体硬件设计决定是否需要上拉或下拉电阻。
3. 初始完成后不要再重新启用与 JTAG 相关的时钟控制命令,否则可能恢复默认功能[^3]。
---
问题
阅读全文
相关推荐

















