GD32A503和GD32A513仅相差一个boot引脚,如果没有相应的需求可忽略两款芯片的区别。
简介
此MCU最多支持 88 个通用 I/O 引脚(GPIO),每个 GPIO 引脚可以由软件配置为输出(推挽或开漏)、输入、外设备用功能或者模拟模式。
此篇主要讲解GPIO端口配置。所有的端口都有外部中断的能力,如果想使用端口的外部中断功能,需要配置为输入模式。
GPIO 输出配置
- 可选择的弱上拉和下拉电阻;
- 开漏模式:输出控制寄存器设置为“0”时,相应引脚输出低电平;输出控制寄存器设置
为“1”,相应管脚处于高阻状态; - 推挽模式:输出控制寄存器设置为“0”时,相应引脚输出低电平;输出控制寄存器设置
为“1”,相应引脚输出高电平;
//GPIO输出初始化配置
void gpio_output_init(void)
{
/* 使能 GPIOC 时钟 */
rcu_periph_clock_enable(RCU_GPIOC);
/* 配置 GPIO PC0 PC1 为输出模式不进行上下拉,在demo板上PC0和PC1为LED*/
gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0 | GPIO_PIN_1);
gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0 | GPIO_PIN_1);
/* 初始化 GPIO PC0 PC1 状态 根据项目需求设定*/
gpio_bit_reset(GPIOC, GPIO_PIN_0 | GPIO_PIN_1);
}
//让PC0 和 PC1 输出高电平 -- 点亮LED
void set_gpio(void)
{
gpio_bit_set(GPIOC, GPIO_PIN_0 | GPIO_PIN_1);
}
//让PC0 和 PC1 输出低电平 -- 熄灭LED
void reset_gpio(void)
{
gpio_bit_reset(GPIOC, GPIO_PIN_0 | GPIO_PIN_1);
}
输出模式可以控制引脚状态;可以通过高低电平的反转输出相应的时序;可以配合示波器等设备,测量程序运行时间等。
输入配置
- 可选择的弱上拉和下拉电阻;
- 当前I/O引脚上的数据在每个AHB时钟周期都会被采样并存入端口输入状态寄存器;
- 输出缓冲器禁用。
//gpio输入初始化配置
void gpio_input_init(void)
{
/* 使能 GPIOA 时钟 */
rcu_periph_clock_enable(RCU_GPIOA);
/* 配置PA0为输出模式 */
gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_0);
}
//获取gpio输入状态
uint8_t get_gpio(void) --KEY2按键按下PA0处于上拉状态 为高电平
{
return gpio_input_bit_get(GPIOA, GPIO_PIN_0);
}
可以根据实际需求对输入进行中断或者轮询读取是否要进行消抖处理等操作。约定好的bool类型数据;按键信号;捕获时序等信号处理。