3382|0

821

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【GD32L233C-START评测】三、GPIO、EXTI [复制链接]

      本次利用GD32L233C-START板载的四颗LED及“Wakeup”按键进行实验,通过简单的实验对GD32L233CCT6的GPIO及EXTI(外部中断资源)进行了解和学习。具体实验过程如下:

一、实验资源

1、GD32L233C-START;

2、Keil V5.36.0.0;

 

二、知识准备

1、GPIO

       LQFP48封装的GD32L233CCT6为用户提供了高达43个GPIO接口,并且大部分IO口可容忍5V电压。IO端口具有多种可配置的输入输出功能,所有的IO端口都支持外部中断模式,当配置为外部中断模式时必须将对应的IO端口配置为输入模式;有些引脚如ADC、DAC、CMP具有附加功能,IO必须配置成模拟模式。除了通用的IO功能外还可通过配置使用IO端口的备用功能,这一点在后面的学习中会经常遇到。

 

2、EXTI

      “EXTI”被称作中断、事件控制器,包括30个相互独立的边沿检测电路并且能够向处理器内核产生中断请求或唤醒事件。EXTI有三种触发类型:上升沿触发、下降沿触发和任意沿触发。EXTI中的每一个边沿检测电路都可以独立配置和屏蔽。这是基于Cortex-M23内部集成的嵌套式矢量型中断控制器(Nested Vectored Interrupt Controller (NVIC))来实现高效的异常和中断处理。NVIC实现了低延迟的异常和中断处理,以及电源管理控制。

三、实验内容

1、硬件资源

       从上面局部电路图中可以看到板载的4颗LED(LED1、LED2、LED3、LED4)分别与GPIO端口的PA7、PA8、PC6、PC7相连接,且高电平有效,即当相应GPIO端口输出高电平时LED被点亮;按键开关一端接VCC,另一端连接PA0的同时并通过电阻下拉至GND,当按键按下时PA0端口会产生一个由“低”至“高”的电平变化,即传说中的上升沿,实验就是通过检测这一电平的变化来改变LED的运行状态,其所对应的EXTI触发源为“EXTI_0”

2、程序实现

程序主要分为两部分,其一是控制LED运行,程序中将LED对应的GPIO配置为推挽输出模式并输出低电平,使得开机时LED呈熄灭状态;

void LED_GPIO_Config(void)
{
	rcu_periph_clock_enable(RCU_GPIOA);
	rcu_periph_clock_enable(RCU_GPIOC);

	gpio_mode_set(LED1_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, LED1_PIN);
	gpio_output_options_set(LED1_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LED1_PIN);
	
	gpio_mode_set(LED2_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, LED2_PIN);
	gpio_output_options_set(LED2_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LED2_PIN);
	
	gpio_mode_set(LED3_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, LED3_PIN);
	gpio_output_options_set(LED3_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LED3_PIN);
	
	gpio_mode_set(LED4_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, LED4_PIN);
	gpio_output_options_set(LED4_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LED4_PIN);

	gpio_bit_reset(LED1_PORT, LED1_PIN);
	gpio_bit_reset(LED2_PORT, LED2_PIN);
	gpio_bit_reset(LED3_PORT, LED3_PIN);
	gpio_bit_reset(LED4_PORT, LED4_PIN);
}

其二是对按键动作进行处理,主要是下面这个在“gd32l23x_it.c”中的中断处理。第一次按键按下LED呈流水灯状态运行;再次按下4颗LED呈熄灭状态。

void EXTI0_IRQHandler(void)
{
	static uint8_t num=0;
	if(RESET != exti_interrupt_flag_get(EXTI_0)) 
	{
		KEY_flag = 1;
		num++;
		if(num == 2) 
		{
			num=0;
			KEY_flag = 0;
		}
		exti_interrupt_flag_clear(EXTI_0);
	}
}

主函数:

int main(void)
{
	systick_config();

	LED_GPIO_Config();
	KEY_GPIO_Config();
	
	while(1) 
	{
		if(KEY_flag)
		{
			gpio_bit_toggle(LED1_PORT, LED1_PIN);
			delay_1ms(300);
			gpio_bit_toggle(LED2_PORT, LED2_PIN);
			delay_1ms(300);
			gpio_bit_toggle(LED3_PORT, LED3_PIN);
			delay_1ms(300);
			gpio_bit_toggle(LED4_PORT, LED4_PIN);
			delay_1ms(300);
		}
		else
		{
			gpio_bit_reset(LED1_PORT, LED1_PIN);
			gpio_bit_reset(LED2_PORT, LED2_PIN);
			gpio_bit_reset(LED3_PORT, LED3_PIN);
			gpio_bit_reset(LED4_PORT, LED4_PIN);
		}
	}
}

四、实验成果

       实验符合预期,并为后期的学习奠定了基础。

 

五:附件

GPIO_EXTI.rar (346.23 KB, 下载次数: 4)

此帖出自GD32 MCU论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表