1-4 GPIO输入模式(ARM-GD32)

输入结构

浮空输入模式:

上拉输入:

上面的电路浮空输入的状态是不确定的故需要通过设置上拉电阻的方式将电平设置为高电平,也就是确定的状态,此时下拉电阻处于关闭的状态,当按键没有按下的时候,处于浮空的状态默认是高电平,当按键按下的时候处于低电平,经过施密特触发器将电平信号转换为数字信号0存储到输入状态寄存器中,通过读取输入状态寄存器的值来获取电平状态(解决浮空输入模式下电平不确定的问题)。

下拉输入:

按键驱动电路,按键连接到限流电阻,然后连接到VCC,使用下拉输入的模式,将驱动单元的下拉电阻打开,当按键没有按下的时候端口处于低电平状态,当按键按下的时候电流从外部流向单片机的内部,会检测为高电平,(弱上拉和弱下拉)

浮空输入检测按键要在上拉和下拉的作用下加上上拉电阻和下拉电阻,让电路在悬空的状态写有一个明确的电平(上拉电阻使用的是2-10k的阻值)。

使用配置寄存器的方式驱动按键检测

电路分析:按键的一端连接到GND一端连接上拉电阻接3.3V电源,有一个R53的限流电阻用于保护IO口,C44使用了一个100nf的电容,滤波电容在一定程度上可以实现硬件消除抖动的效果,当按键没有被按下时端口的电平被4K的上拉电阻拉到高电平的状态(此时处于高阻状态),按键按下的时候电流从上拉电阻流线GND,此时端口为低电平。

寄存器配置:

ARMGD32

  • GPIOA 基地址:0x4001 0800
  • GPIOB 基地址:0x4001 0C00
  • GPIOC 基地址:0x4001 1000
  • GPIOD 基地址:0x4001 1400
  • GPIOE 基地址:0x4001 1800
  • GPIOF 基地址:0x4001 1C00
  • GPIOG 基地址:0x4001 2000
  • AFIO 基地址:0x4001 0000

KEY1对应的端口号为PA0这个时候找到端口对应的寄存器

注1:使用8424法判断对应的数值为4

读取端口电平状态寄存器

代码实现

cpp 复制代码
#define  GPIOA_OCTL (*(uint32_t *)(0x40010800 + 0x0C))
// 外设总线控制,时钟使能控制寄存器
#define  RCU_APB2EN (*(uint32_t *)(0x40021000 + 0x18))
// 按键检测寄存器控制
#define GPIOA_CTL0 (*(uint32_t *)(0x40010800 + 0x00))
#define GPIOA_ISTAT (*(uint32_t *)(0x40010800 + 0x08))

static void Delay(uint32_t count)
{
	while (count--);
}

int main(void)
{
	/*使能GPIO的时钟*/
	RCU_APB2EN |= 1 << 2;
	/*配置PA8为推挽输出模式*/
	GPIOA_CTL1 = 0x44444442;
	/*配置PA0为浮空输入模式*/
	GPIOA_CTL0 = 0x44444444;
	while (1)
	{
		while((GPIOA_ISTAT & (1 << 0)) == 0){
		    GPIOA_OCTL |= 1 << 8;  //00000000 00000000 00000001 00000000	
		}
		GPIOA_OCTL &= ~(1 << 8); //11111111 11111111 11111110 11111111
		
		/*
		   1 < 8 位是一个32位数据,对于ARM32位单片机平台
		   常数默认为uint32位
		*/
		
	}
}

当按键按下的时候地点亮发光的led灯,当按键没有被按下的时候LED灯处于熄灭状态

相关推荐
张海森-16882027 分钟前
cv610的spi0上适配tmi8150b电机ic
单片机
硅农程序猿42 分钟前
芯片设计中的门级仿真(GLS):从零延迟验证到 SDF 时序反标
嵌入式硬件·硬件架构·risc-v·芯片
智购科技智能售货柜1 小时前
自动售货机主控方案怎么选?——单片机、树莓派、ESP32的实战对比~YH
单片机·嵌入式硬件
byte轻骑兵2 小时前
如何定制BlueZ编译:开启/关闭BLE/音频模块的编译参数配置
linux·arm开发·蓝牙·bluez·电脑蓝牙
米饭不加菜2 小时前
电平转换电路
经验分享·嵌入式硬件·硬件工程
老k一步步来16 小时前
STM32 HAL库CAN通信核心函数详解,参数以及作用
stm32·单片机·嵌入式硬件
gwf21616 小时前
SSD读写速度深度解析:顺序读写vs随机读写、IOPS、延迟,你的硬盘性能到底怎么看?
git·嵌入式硬件·缓存·github·智能硬件
Chen_LSN18 小时前
C语言——深度理解指针(3)
c
Freak嵌入式19 小时前
版本混乱 / 依赖缺失?uPyPi:MicroPython 版 PyPI,彻底解决库管理混乱
linux·服务器·数据库·单片机·嵌入式硬件·性能优化·依赖倒置原则