OpenVINOTM,给你看得见的未来!>>
电子产品世界 » 论坛首页 » 企业专区 » GD32 » GD32107C-EVAL按键\外部中断测试

共3条 1/1 1 跳转至

GD32107C-EVAL按键\外部中断测试

高工
2015-03-21 21:01:23    评分

继续体验GD32的外设功能,在GD32107C-EVAL上有3个按键可以供用户使用。

本次实验采用了其中的两个按键,KEY1 和 KEY2。通过原理图可以看出外部中断触发方式应该选用下降沿触发,分别有EXTI0和EXTI13

下面贴出初始化函数:

1、使能GPIOA,GPIOC,AFIO的时钟

2、将IO口配置成上拉输入

3、配置外部中断为下降沿触发

4、将EXTILINE0映射到PA0,EXTILINE13映射到PC13

5、配置中断优先级,使能中断

void  ButtonInit()
{
    
	  GPIO_InitTypeDef GPIO_InitStruct;
    EXTI_InitTypeDef EXTI_InitStruct;
    NVIC_InitTypeDef NVIC_InitStruct;	
	  RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA |  RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO,ENABLE );
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU ;
	  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
	  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	  GPIO_Init (GPIOA,&GPIO_InitStruct);
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
	  GPIO_Init (GPIOC,&GPIO_InitStruct);
	
	  GPIO_EXTILineConfig (GPIO_PortSourceGPIOA,GPIO_PinSource0);
	  GPIO_EXTILineConfig (GPIO_PortSourceGPIOC,GPIO_PinSource13);
	
	  EXTI_InitStruct.EXTI_Line = EXTI_Line0 | EXTI_Line13;
	  EXTI_InitStruct.EXTI_LineCmd = ENABLE;
	  EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt ;
	  EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;
	  EXTI_Init (&EXTI_InitStruct);
	 
	  NVIC_InitStruct.NVIC_IRQChannel =  EXTI0_IRQn;
		NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
		NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 2;
		NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;
	  NVIC_Init (&NVIC_InitStruct);
		
		NVIC_InitStruct.NVIC_IRQChannel = EXTI15_10_IRQn;
		NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
		NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 2;
		NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;
	  NVIC_Init (&NVIC_InitStruct);
}

 

中断服务函数:

void  EXTI0_IRQHandler()
{
    if(EXTI_GetITStatus(EXTI_Line0) == SET ) 
		{
        gLedStatusFlag = LED_ON;
			  EXTI_ClearITPendingBit (EXTI_Line0);
    }			
}

void  EXTI15_10_IRQHandler()
{
   if(EXTI_GetITStatus(EXTI_Line13) == SET ) 
	 {
        gLedStatusFlag = LED_OFF;
			  EXTI_ClearITPendingBit (EXTI_Line13);
   }
	 
}

 

主函数:

int main()
{
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	LedPinInit();
	ButtonInit();
	while(1)
	{
      if(gLedStatusFlag == LED_ON)
			{
          LedPowerSelect(LED_ON);
				  gLedStatusFlag = LED_NONE;
      }
			else if(gLedStatusFlag == LED_OFF)
			{
          LedPowerSelect(LED_OFF);
				  gLedStatusFlag = LED_NONE;
      }
			
	}
}

 

按下KEY1使LED亮起来,按下KEY2让LED熄灭,下面是效果图:

启动开发板程序运行:

按下KEY1

按下KEY2

GD32的性能和STM32相比,初步体验,也是完全不输给STM32。期待接下来一步步的体验,希望得到GD32带来的惊喜,呵呵O(∩_∩)O~




关键词: 按键     外部     中断     GD32107C-EVAL    

高工
2015-03-21 21:13:40    评分
2楼
用的什么编译环境?

专家
2015-03-22 00:15:30    评分
3楼
上面的代码是不受编译环境的影响的。

共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]