GPIO的具体寄存器说明(标准库和HAL库)

本文详细介绍了嵌入式微控制器中GPIO(通用输入输出)的各种功能寄存器,包括AFR(备用功能寄存器)、BSRR(位设置/复位寄存器)、IDR(输入数据寄存器)等,以及HAL库的作用,帮助开发者理解和配置硬件资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、标准库

  1. AFR - Alternate Function Registers:用于配置引脚的备用功能。每个引脚可以选择不同的备用功能,如串口、定时器等。

  2. BSRRH - Bit Set/Reset Register High:用于设置引脚的特定位,高半字用于设置引脚位为 0。

  3. BSRRL - Bit Set/Reset Register Low:用于设置引脚的特定位,低半字用于设置引脚位为 1。

  4. IDR - Input Data Register:用于读取引脚的输入状态。通过读取该寄存器可以获取引脚的电平。

  5. LCKR - Lock Register:用于锁定引脚的配置,以防止在特定条件下对引脚配置的意外修改。

  6. MODER - Mode Register:用于配置引脚的工作模式,例如输入、输出等。

  7. ODR - Output Data Register:用于写入引脚的输出状态。通过写入该寄存器可以设置引脚的输出电平。

  8. PUPDR - Pull-Up/Pull-Down Register:用于配置引脚的上拉或下拉电阻。

  9. OSPEEDR - Output Speed Register:用于配置引脚的输出速度,即引脚的切换速度。

  10. OTYPER - Output Type Register:用于配置引脚的输出类型,即推挽输出或开漏输出

二、HAL库 

### STM32标准库实现HAL_GPIO_DeInit功能 在STM32标准库中,`GPIO_DeInit()`函数用于重置指定的GPIO端口寄存器到复位状态。这相当于HAL中的`HAL_GPIO_DeInit()`操作。下面展示如何利用STM32标准库来达到同样的效果。 #### 使用STM32标准库模拟HAL_GPIO_DeInit行为 为了模仿`HAL_GPIO_DeInit()`的行为,在标准库中可以通过调用`GPIO_DeInit()`并传递相应的参数给它。此过程涉及清除特定引脚上的所有配置,使它们恢复默认设置。 ```c #include "stm32f10x.h" void DeInitializeGPIOPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE); /* Reset the selected pin(s) */ GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN; // Analog input mode (high impedance) GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; if ((GPIOx == GPIOA && (GPIO_Pin & 0xFFFF0000)) || (GPIOx == GPIOB && (GPIO_Pin & 0xFFFF0000)) || (GPIOx == GPIOC && (GPIO_Pin & 0xFFFF0000)) || (GPIOx == GPIOD && (GPIO_Pin & 0xFFFF0000)) || (GPIOx == GPIOE && (GPIO_Pin & 0xFFFF0000))) { Error_Handler(); // Invalid parameter detected } GPIO_InitStruct.GPIO_Pin = GPIO_Pin; GPIO_Init(GPIOx, &GPIO_InitStruct); } ``` 上述代码片段展示了如何通过将选定引脚设为模拟输入模式(高阻抗),从而有效地取消任何先前的应用于这些引脚的配置[^4]。 对于更复杂的项目来说,可能还需要考虑其他因素,比如重新加载默认时钟配置等额外步骤,但这超出了当前讨论范围。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值