查看: 3355|回复: 2

[项目] GD32F207ZE小红板之中断检测按键控制LED小灯

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

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2016-1-7 21:50:42 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 dhbking 于 2016-1-7 22:00 编辑

      放假中小红板就到了,一回来就急冲冲的去取快递。下面晒图

    GD32F207

    GD32F207


    上电后板子的电源灯亮瞎了我的眼,这光太强烈了。估计是限流电阻太小,建议GD以后的板子可以把电阻换大些!
             这个板子很小真可谓是口袋板,经过一番装驱动和一些资料的学习,加上以前玩过STM32的板子,感觉这个板子简直就是STM32的双胞胎兄弟嘛,基本上一样,以前玩过STM32的很容易就上手这块板子。好了废话不多说,下面就说说我这次的小测试吧!这次的测试是用中断检测按键控制LED的点亮和熄灭,也是基于库函数开发的。
       首先得新建一个工程,工程的建立方法很多人已经分享,这个我就不多说了,我就大概说下我的工程结构吧

    工程模板

    工程模板


    上面的DOC是说明文档,DRIVER是自己编写的相应的外设驱动程序,Lib是官方提供的库文件,MDK是保存项目工程,STARTUP是启动的相关文件,USER是用户编写的应用程序。
      要想用中断控制就要配置按键的引脚为外部事件触发中断模式,同时配置相应的GPIO为输入模式以及中断优先级的配置。代码如下:
    1. void Key_Interrupt_Configuration(void)
    2. {
    3.                         GPIO_InitPara GPIO_InitStructure;
    4.       EXTI_InitPara EXTI_InitStructure;
    5.       NVIC_InitPara NVIC_InitStructure;
    6.       
    7.       RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_AF ,ENABLE);

    8.       /* Configure PD14\15 pin */
    9.       GPIO_InitStructure.GPIO_Pin = GPIO_PIN_14|GPIO_PIN_15;
    10.       GPIO_InitStructure.GPIO_Mode = GPIO_MODE_IN_FLOATING;
    11.       GPIO_Init(GPIOD, &GPIO_InitStructure);

    12.       /* Connect EXTI Line14 to PD14 pin */
    13.       GPIO_EXTILineConfig(GPIO_PORT_SOURCE_GPIOD, GPIO_PINSOURCE15);
    14.                         /* Connect EXTI Line15 to PD15 pin */
    15.       GPIO_EXTILineConfig(GPIO_PORT_SOURCE_GPIOD, GPIO_PINSOURCE14);

    16.       /* Configure EXTI Line0 and its interrupt to the lowest priority*/
    17.       EXTI_InitStructure.EXTI_LINE = EXTI_LINE14|EXTI_LINE15;
    18.       EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    19.       EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
    20.       EXTI_InitStructure.EXTI_LINEEnable = ENABLE;
    21.                         EXTI_Init(&EXTI_InitStructure);
    22.       
    23.         
    24.       NVIC_InitStructure.NVIC_IRQ = EXTI15_10_IRQn;
    25.       NVIC_InitStructure.NVIC_IRQPreemptPriority = 0;
    26.       NVIC_InitStructure.NVIC_IRQSubPriority = 1;
    27.       NVIC_InitStructure.NVIC_IRQEnable = ENABLE;
    28.       NVIC_Init(&NVIC_InitStructure);
    29. }
    复制代码
      这些库函数和ST的库函数基本上是一致的,很容易理解。
    接下来是配置LED的GPIO为推挽输出模式,代码如下:
    1. void GPIO_Configuration(void)
    2. {
    3.     GPIO_InitPara GPIO_InitStructure;
    4.     RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_GPIOD ,ENABLE);

    5.     GPIO_InitStructure.GPIO_Pin = GPIO_PIN_11 | GPIO_PIN_12| GPIO_PIN_13;
    6.     GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT_PP;
    7.     GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
    8.     GPIO_Init(GPIOD,&GPIO_InitStructure);
    9. }
    复制代码
      这些配置完成后就可以写中断服务子程序了,方法就是检测中断标志位,如果检测到标志位被置位则执行相应的操作,之后就清中断,很简单代码如下:
    1. void EXTI15_10_IRQHandler(void)
    2. {
    3.                 int count = 0xffff;

    4.       if (EXTI_GetIntBitState(EXTI_LINE14) != RESET)
    5.       {
    6.             while(count--);
    7.             if (EXTI_GetIntBitState(EXTI_LINE14) != RESET)
    8.             {
    9.                                                                                 LED1(1);
    10.                                                                                 LED3(0);
    11.                     EXTI_ClearIntBitState(EXTI_LINE14);
    12.                      
    13.             }
    14.       }
    15.   
    16.       if (EXTI_GetIntBitState(EXTI_LINE15) != RESET)
    17.       {
    18.             while(count--);
    19.             if (EXTI_GetIntBitState(EXTI_LINE15) != RESET)
    20.             {
    21.                                                                                 LED3(1);
    22.                                                                                 LED1(0);
    23.                     EXTI_ClearIntBitState(EXTI_LINE15);
    24.                      
    25.             }
    26.       }
    27. }
    复制代码
      需要注意的一点是这里的中断服务子程序的函数名不能写错,它必须和启动文件中的中断函数名一致否则会出现中断无法实现的情况。如果不记得所用中断的函数名,可以从启动文件中找到。到这程序基本上就完成了,再设置下载选项将程序下载进单片机中,通过按键即可控制LED的亮灭,下面附上我的工程模板
    GD32F207ZE.rar (7.85 MB, 下载次数: 17)
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2016-1-8 09:42:07 | 显示全部楼层
    感谢分享,期待作品
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-11-19 16:39
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2016-1-8 10:23:55 | 显示全部楼层
    分享的不错,可以将文章一并发到经验频道,获取双重奖励哟http://jingyan.eeboard.com/
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-12-24 20:20 , Processed in 0.143936 second(s), 22 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.