gd32 gpio 寄存器操作PB1 PB2为输入模式的代码
时间: 2024-09-15 22:12:10 浏览: 111
GD32是一款STM32系列的微控制器,GPIO模块用于控制数字输入输出。要将PB1和PB2设置为输入模式,你需要使用相应的GPIO寄存器操作。以下是GD32F4xx芯片上设置GPIO Pin B1(PB1)和Pin B2(PB2)为输入模式的基本步骤:
```c
#include "stm32f4xx_hal.h" // 包含HAL库
// 初始化GPIOB
GPIO_InitTypeDef GPIO_InitStruct;
// 设置GPIOB的时钟(如果你还没有做)
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
// 配置PB1为输入模式
GPIO_InitStruct.Pin = GPIO_Pin_1; // 对应PB1
GPIO_InitStruct.Mode = GPIO_Mode_IN_FLOATING; // 输入浮空
GPIO_InitStruct.Pull = GPIO_NOPULL; // 无拉高拉低
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); // 初始化GPIOB
// 配置PB2为输入模式
GPIO_InitStruct.Pin = GPIO_Pin_2; // 对应PB2
HAL_GPIO_Init(GPIOB + GPIO_BASE address, &GPIO_InitStruct); // 加上偏移地址,因为GPIOB的配置是连续的
相关问题
用stm32的PB1的模拟输入 的寄存器函数
在STM32微控制器系列中,想要利用PB1作为模拟输入,你需要关注的主要寄存器包括ANalog Comparator (ADC) 和 GPIO(通用输入/输出)。以下是基本步骤:
1. **GPIO配置**:
- 首先,需要配置PB1作为输入模式。在GPIOB寄存器中,设置AFIO里的GPIO_Pin_1映射到模拟输入功能。例如:
```c
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; // PB1
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_ANALOG_IN;
GPIO_Init(GPIOB, &GPIO_InitStructure);
```
2. **ADC初始化**:
- ADC1通常是STM32内部用于模拟输入的ADC,如果要用到,需要配置AD1CHS寄存器选择PB1为输入通道:
```c
ADC_ChannelConfTypeDef sConfig;
sConfig.ADC_Channel = ADC_CHANNEL_1; // 对应于PB1
sConfig.ADC_ScanConvMode = ENABLE; // 扫描模式
sConfig.ADC_ContinuousConvMode = ENABLE; // 连续转换
ADC_Init(&ADC1, &sConfig);
```
- 接下来配置ADC1->CR1,开启转换和序列化。
3. **开始转换**:
- 调用`ADC_StartConversion(&ADC1)`开始一次转换,然后在中断服务函数中读取转换结果。
4. **读取转换值**:
- 使用`ADC_GetValue(&ADC1)`获取当前通道的采样值,这通常是一个0-4095范围内的数字,取决于你的参考电压。
```c
uint16_t adc_value = ADC_GetValue(&ADC1);
```
MM32F0010如何配置引脚PB1作为按键检测口
MM32F0010的PB1引脚可以通过下面的步骤配置为按键检测口:
1. 首先,在MM32F0010的datasheet中找到PB1引脚的功能,确认其为GPIO引脚。
2. 在MM32F0010的寄存器手册中找到GPIOB的控制寄存器GPIOB_CR,将其相应位设置为1,以使PB1引脚可以被控制。
3. 然后,将GPIOB的输入模式寄存器GPIOB_MODER的相应位设置为00,以使PB1引脚成为输入引脚。
4. 接下来,将GPIOB的上拉/下拉寄存器GPIOB_PUPDR的相应位设置为01,以启用PB1引脚的上拉电阻。
5. 最后,使用GPIOB的输入数据寄存器GPIOB_IDR读取PB1引脚的输入状态,即可检测PB1引脚的按键状态。
具体代码实现如下:
```c
// 使能GPIOB时钟
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
// 配置PB1引脚为输入模式,启用上拉电阻
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// 读取PB1引脚的输入状态
if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == Bit_RESET)
{
// PB1引脚被按下
}
else
{
// PB1引脚未被按下
}
```
阅读全文