一、使用平台
MCU | GD32F450ZKT6 |
处理器 | Cortex-M4 |
SRAM | 256k |
Flash | 3072k |
SDK | GD32F4xx_Firmware_Library_V2.1.2 |
二、GPIO简介
2.1 GPIO是通用I/O引脚
GPIO是指单片机上的通用I/O引脚,分别为PA0~PA15,PB0~PB15,PC0~PC15,PD0~PD15,PE0~PE15,PF0~PF15,PG0~PG15,PH0~PH15和PI0~PI11。各片上设备用其来实现逻辑输入/输出功能。每个 GPIO 端口有相关的控制和配置寄存器以满足特定应用的需求。GPIO 引脚上的外部中断在中断/事件控制器(EXTI)中有相关的控制和配置寄存器。
2.2 GPIO概念
GPIO口一是个比较重要的概念,用户可以通过GPIO口和硬件进行数据交互(如UART),控制硬件工作(如LED、蜂鸣器等),读取硬件的工作状态信号(如中断信号)等。
三、GPIO模式
3.1 输入模式
每个通用I/O口都可以通过32位寄存器配置为输入模式
浮空输入模式
没有上拉电阻和下拉电阻,没有输入的情况下,读取上一次的电平状态。
模拟输入模式
不经过施密特触发器,没有上拉电阻和下拉电阻。
上拉输入模式
在上拉电阻闭合时,读取到高电平。
下拉输入模式
在下拉电阻闭合时,读取到低电平。
3.2 输出模式
开漏输出、推挽输出、复用开漏输出、复用推挽输出。
开漏输出模式
推挽输出模式
注意:推挽输出在开漏2输出的基础上增加了一个p-mos管,所以推挽输出既能输出高电平也能输出低电平。而开漏输出不能输出高电平。
(复用:GPIO上的数据来自片上外设。通用:GPIO上的数据来自内核控制的输出数据寄存器)
3.3 附加功能
部分GPIO引脚可用作ADC和DAC的附加功能,同时要设置成模拟模式。每个GPIO引脚都可以配置为上拉、下拉或无上拉/下拉。除模拟模式外,所有的 GPIO 引脚都具备大电流驱动能力。
四、GPIO用途
4.1 用于输出控制信号---控制LED的开关
GPIO口输出高电平的时候,LED灯亮。没有输出的时候,LED灯就关闭。
GPIO控制LED
rcu_periph_clock_enable(RCU_GPIOD); //使能LED时钟
gpio_mode_set(GPIOD,GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_4); //设置GPIO为输出模式
gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_4);//设置GPIO为推挽输出模式
gpio_bit_reset(GPIOD,GPIO_PIN_4); //设置引脚输出低电平
gpio_bit_set(GPIOD,GPIO_PIN_4); //设置引脚输出高电平
4.2 用于按键检测
GPIO口空闲时为高电平,每当按键按下就会被拉为低电平,这时就会检测到按键按下。按键抬起时,其恢复为高电平,就被检测到按键松开。
按键检测
rcu_periph_clock_enable(RCU_GPIOA); //使能GPIO
rcu_periph_clock_enable(RCU_SYSCFG); //使能系统时钟
gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE,GPIO_PIN_0); //设置引脚配置为输入
if(RESET == gpio_input_bit_get(GPIOA,GPIO_PIN_0)); //检测按键是否按下