查看: 2538|回复: 0

玩GD32F450那些事之工程模板+按键中断

[复制链接]
  • TA的每日心情
    开心
    2017-6-17 09:42
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2017-4-19 16:36:15 | 显示全部楼层 |阅读模式
    分享到:


                       玩GD32F450那些事之工程模板+按键中断


    一、三个坑你跳了吗?
          介绍工程模板和按键中断前发发牢骚,说说遇到的三坑:板收到两天了,第一天算是跳坑里了,第一个坑就是这CH340驱动不起来,各种驱动各种安装,搞了一下午。哈哈哈,直到晚上才发现我确实是跳坑里了。原来这数据线居然是坏的,不过咱们群主“飞飞”第一时间给我解决了,感谢哦!可是没多久又进入了第二个坑,居然我们这历程代码默认是焊接了外部晶振的,写了个流水灯,代码一直卡死在外部晶振没法正常起震的死循环中。亲爱的历程提供者,190你提供历程可是使用内部晶振,这次你咋换风格了。。。,好吧,还好这GD的固件库写的很清晰,注释一行,去掉一行注释就解决问题了。对了还有坑就是,我的keil是Version:5.22,这也给我留了一坑,就是最新版的CMSIS5.0.0中间是缺少啥文件吗?编译时报错,提示缺少“core_cmInstr.h”文件,后面没有办法将CMSIS  5.0换成了4.5.0才编译通过。各位伙计们,这些坑我算是全跳,你们就直接过吧。。。
    坑二解决截图

    坑三解决截图


    二、工程环境搭建

    2.1、下载资源

    2.2、安装驱动

    2.3、安装GD32F4库

    2.4新建文件夹

    2.5从固件库(GD32F4xx_Firmware_Library_V1.2)中拷贝文件下面文件到Libraries中

    2.6新建工程,选择芯片型号


    2.7配置项目


    三、代码

           该代码实现的功能是小红板上,三个按键控制三个LED灯(LD4,LD5,LD6),当按键按下时相应的LED灯就该灯的明暗状态,其中B2(LD5)是按键查询方式,B3(LD4)和B4(LD6)是中断方式。
    3.1、LED引脚配置
    void Led_gpio_config(void){/* enable the led clock */ rcu_periph_clock_enable(RCU_GPIOB);rcu_periph_clock_enable(RCU_GPIOD);/* configure led GPIO port PB3 PB4 */ // gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_3);// gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_3);// GPIO_BC(GPIOB) = GPIO_PIN_3;gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_4|GPIO_PIN_3);gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_4|GPIO_PIN_3);GPIO_BC(GPIOB) = GPIO_PIN_4|GPIO_PIN_3;/* configure led GPIO port PD7 */ gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_7);gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_7);GPIO_BC(GPIOD) = GPIO_PIN_7;}3.2、按键引脚配置
    void BT_gpio_config(void){/* enable the BT clock */ rcu_periph_clock_enable(RCU_GPIOA);rcu_periph_clock_enable(RCU_GPIOE);rcu_periph_clock_enable(RCU_SYSCFG);/* configure BT GPIO port PE0 PE1*/ gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_NONE,GPIO_PIN_0|GPIO_PIN_1); /* configure BT GPIO port PA0 */ gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE,GPIO_PIN_0); }
    3.3、中断配置
    void BT_exit_config(void){/* PE0 中断配置*/nvic_irq_enable(EXTI0_IRQn, 2U, 0U);/* connect key EXTI line to key GPIO pin */syscfg_exti_line_config(EXTI_SOURCE_GPIOE, EXTI_SOURCE_PIN0);/* configure key EXTI line */exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_FALLING);exti_interrupt_flag_clear(EXTI_0);/* PE1 中断配置*/nvic_irq_enable(EXTI1_IRQn, 2U, 1U);/* connect key EXTI line to key GPIO pin */syscfg_exti_line_config(EXTI_SOURCE_GPIOE, EXTI_SOURCE_PIN1);/* configure key EXTI line */exti_init(EXTI_1, EXTI_INTERRUPT, EXTI_TRIG_FALLING);exti_interrupt_flag_clear(EXTI_1);}
    3.4中断函数
    void EXTI0_IRQHandler (void){if (RESET != exti_interrupt_flag_get(EXTI_0)) {GPIO_TG(GPIOB) = GPIO_PIN_4;exti_interrupt_flag_clear(EXTI_0);}}void EXTI1_IRQHandler (void){if (RESET != exti_interrupt_flag_get(EXTI_1)) {GPIO_TG(GPIOB) = GPIO_PIN_3;exti_interrupt_flag_clear(EXTI_1);}}
    3.5主函数
    int main(void){systick_config();Led_gpio_config(); BT_gpio_config();//配置引脚BT_exit_config();//配置中断while (1){delay_1ms(500);/* check whether the button is pressed */if(RESET == gpio_input_bit_get(GPIOA,GPIO_PIN_0)){delay_1ms(1);/* check whether the button is pressed */if(RESET == gpio_input_bit_get(GPIOA,GPIO_PIN_0)){GPIO_TG(GPIOD) = GPIO_PIN_7;}}}}
    四、效果示意图

    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-11-19 18:29 , Processed in 0.107159 second(s), 17 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.