查看: 936|回复: 0

GD32F207ZE小红板之中断检测按键控制LED小灯

[复制链接]
  • TA的每日心情
    奋斗
    2016-7-25 19:32
  • 签到天数: 17 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2016-1-11 09:08:37 | 显示全部楼层 |阅读模式
    分享到:
    这个板子很小真可谓是口袋板,经过一番装驱动和一些资料的学习,加上以前玩过STM32的板子,感觉这个板子简直就是STM32的双胞胎兄弟嘛,基本上一样,以前玩过STM32的很容易就上手这块板子。好了废话不多说,下面就说说我这次的小测试吧!这次的测试是用中断检测按键控制LED的点亮和熄灭,也是基于库函数开发的。
            首先得新建一个工程,工程的建立方法很多人已经分享,这个我就不多说了,我就大概说下我的工程结构吧
           上面的DOC是说明文档,DRIVER是自己编写的相应的外设驱动程序,Lib是官方提供的库文件,MDK是保存项目工程,STARTUP是启动的相关文件,USER是用户编写的应用程序。
    要想用中断控制就要配置按键的引脚为外部事件触发中断模式,同时配置相应的GPIO为输入模式以及中断优先级的配置。代码如下:
    void Key_Interrupt_Configuration(void){                        GPIO_InitPara GPIO_InitStructure;       EXTI_InitPara EXTI_InitStructure;       NVIC_InitPara NVIC_InitStructure;              RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_AF ,ENABLE);        /* Configure PD14\15 pin */       GPIO_InitStructure.GPIO_Pin = GPIO_PIN_14|GPIO_PIN_15;       GPIO_InitStructure.GPIO_Mode = GPIO_MODE_IN_FLOATING;       GPIO_Init(GPIOD, &GPIO_InitStructure);        /* Connect EXTI Line14 to PD14 pin */       GPIO_EXTILineConfig(GPIO_PORT_SOURCE_GPIOD, GPIO_PINSOURCE15);                         /* Connect EXTI Line15 to PD15 pin */       GPIO_EXTILineConfig(GPIO_PORT_SOURCE_GPIOD, GPIO_PINSOURCE14);        /* Configure EXTI Line0 and its interrupt to the lowest priority*/       EXTI_InitStructure.EXTI_LINE = EXTI_LINE14|EXTI_LINE15;       EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;       EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;       EXTI_InitStructure.EXTI_LINEEnable = ENABLE;                        EXTI_Init(&EXTI_InitStructure);                      NVIC_InitStructure.NVIC_IRQ = EXTI15_10_IRQn;       NVIC_InitStructure.NVIC_IRQPreemptPriority = 0;       NVIC_InitStructure.NVIC_IRQSubPriority = 1;       NVIC_InitStructure.NVIC_IRQEnable = ENABLE;       NVIC_Init(&NVIC_InitStructure);}       这些库函数和ST的库函数基本上是一致的,很容易理解。
    接下来是配置LED的GPIO为推挽输出模式,代码如下:
    void GPIO_Configuration(void){    GPIO_InitPara GPIO_InitStructure;    RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_GPIOD ,ENABLE);    GPIO_InitStructure.GPIO_Pin = GPIO_PIN_11 | GPIO_PIN_12| GPIO_PIN_13;    GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT_PP;    GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;    GPIO_Init(GPIOD,&GPIO_InitStructure);}这些配置完成后就可以写中断服务子程序了,方法就是检测中断标志位,如果检测到标志位被置位则执行相应的操作,之后就清中断,很简单代码如下:<pre class="syntax">void EXTI15_10_IRQHandler(void){                int count = 0xffff;        if (EXTI_GetIntBitState(EXTI_LINE14) != RESET)       {             while(count--);             if (EXTI_GetIntBitState(EXTI_LINE14) != RESET)             {                                                                                 LED1(1);                                                                                LED3(0);                    EXTI_ClearIntBitState(EXTI_LINE14);                                  }       }         if (EXTI_GetIntBitState(EXTI_LINE15) != RESET)       {             while(count--);             if (EXTI_GetIntBitState(EXTI_LINE15) != RESET)             {                                                                                 LED3(1);                                                                                LED1(0);                    EXTI_ClearIntBitState(EXTI_LINE15);                                  }       }}
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-12-19 19:45 , Processed in 0.116032 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.