查看: 4259|回复: 1

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

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

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2017-4-18 17:21:43 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 沙漠之风 于 2017-4-18 18:01 编辑

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

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

    5.png
    坑三解决截图
    7.png


    二、工程环境搭建
    2.1、下载资源
    1.png
    2.2、安装驱动
    2.png
    2.3、安装GD32F4库
    3.png
    2.4新建文件夹
    19.png
    2.5从固件库(GD32F4xx_Firmware_Library_V1.2)中拷贝文件下面文件到Libraries中
    18.png
    2.6新建工程,选择芯片型号
    4.png

    2.7配置项目
    20.png 16.png 14.png 13.png 15.png 21.png

    三、代码

         该代码实现的功能是小红板上,三个按键控制三个LED灯(LD4,LD5,LD6),当按键按下时相应的LED灯就该灯的明暗状态,其中B2(LD5)是按键查询方式,B3(LD4)和B4(LD6)是中断方式。
    3.1、LED引脚配置
    1. void Led_gpio_config(void)
    2. {
    3. /* enable the led clock */
    4. rcu_periph_clock_enable(RCU_GPIOB);
    5. rcu_periph_clock_enable(RCU_GPIOD);
    6. /* configure led GPIO port PB3 PB4 */
    7. // gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_3);
    8. // gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_3);
    9. // GPIO_BC(GPIOB) = GPIO_PIN_3;
    10. gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_4|GPIO_PIN_3);
    11. gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_4|GPIO_PIN_3);
    12. GPIO_BC(GPIOB) = GPIO_PIN_4|GPIO_PIN_3;
    13. /* configure led GPIO port PD7 */
    14. gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_7);
    15. gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_7);
    16. GPIO_BC(GPIOD) = GPIO_PIN_7;

    17. }
    复制代码
    3.2、按键引脚配置
    1. void BT_gpio_config(void)
    2. {
    3. /* enable the BT clock */
    4. rcu_periph_clock_enable(RCU_GPIOA);
    5. rcu_periph_clock_enable(RCU_GPIOE);
    6. rcu_periph_clock_enable(RCU_SYSCFG);
    7. /* configure BT GPIO port PE0 PE1*/
    8. gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_NONE,GPIO_PIN_0|GPIO_PIN_1);
    9. /* configure BT GPIO port PA0 */
    10. gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE,GPIO_PIN_0);
    11. }
    复制代码
    3.3、中断配置
    1. void BT_exit_config(void)
    2. {
    3. /* PE0 中断配置*/
    4. nvic_irq_enable(EXTI0_IRQn, 2U, 0U);
    5. /* connect key EXTI line to key GPIO pin */
    6. syscfg_exti_line_config(EXTI_SOURCE_GPIOE, EXTI_SOURCE_PIN0);
    7. /* configure key EXTI line */
    8. exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
    9. exti_interrupt_flag_clear(EXTI_0);

    10. /* PE1 中断配置*/
    11. nvic_irq_enable(EXTI1_IRQn, 2U, 1U);

    12. /* connect key EXTI line to key GPIO pin */
    13. syscfg_exti_line_config(EXTI_SOURCE_GPIOE, EXTI_SOURCE_PIN1);

    14. /* configure key EXTI line */
    15. exti_init(EXTI_1, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
    16. exti_interrupt_flag_clear(EXTI_1);
    17. }
    复制代码
    3.4中断函数
    1. void EXTI0_IRQHandler (void)
    2. {
    3. if (RESET != exti_interrupt_flag_get(EXTI_0)) {
    4. GPIO_TG(GPIOB) = GPIO_PIN_4;
    5. exti_interrupt_flag_clear(EXTI_0);
    6. }
    7. }
    8. void EXTI1_IRQHandler (void)
    9. {
    10. if (RESET != exti_interrupt_flag_get(EXTI_1)) {
    11. GPIO_TG(GPIOB) = GPIO_PIN_3;
    12. exti_interrupt_flag_clear(EXTI_1);
    13. }
    14. }
    复制代码
    3.5主函数
    1. int main(void)
    2. {
    3. systick_config();
    4. Led_gpio_config();
    5. BT_gpio_config();//配置引脚
    6. BT_exit_config();//配置中断

    7. while (1){

    8. delay_1ms(500);
    9. /* check whether the button is pressed */
    10. if(RESET == gpio_input_bit_get(GPIOA,GPIO_PIN_0)){
    11. delay_1ms(1);

    12. /* check whether the button is pressed */
    13. if(RESET == gpio_input_bit_get(GPIOA,GPIO_PIN_0)){
    14. GPIO_TG(GPIOD) = GPIO_PIN_7;
    15.                           }
    16.                      }
    17.              }
    18. }
    复制代码

    四、效果示意图
    9.png 10.png 11.png

    五、代码分享
          此处收两个铜板哈哈,有进才有动力嘛!!!
    KEY.rar (7.38 MB, 下载次数: 11, 售价: 2 与非币)
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2016-10-8 20:34
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2017-4-27 20:51:36 | 显示全部楼层
    core_cmInstr.h在KEIL的安装目录里有:D:\Keil_v5\ARM\PACK\ARM\CMSIS\5.0.0-Beta4
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-4-27 08:06 , Processed in 0.131960 second(s), 19 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.