这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 企业专区» 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 跳转至

回复

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