打印

GD32F303CC单片机外部中断卡死

[复制链接]
969|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
whx189958|  楼主 | 2020-11-3 18:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
引脚PA8,触摸模块中断引脚,外部下拉
代码:
static void gsl_gpio_config(void)
{
        rcu_periph_clock_enable(RCU_GPIOA);
        rcu_periph_clock_enable(RCU_AF);
        gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP,ENABLE);
        gpio_init(GPIOA,GPIO_MODE_IN_FLOATING,GPIO_OSPEED_10MHZ,GPIO_PIN_8);//PA8 INTÒý½Å
        gpio_init(GPIOA,GPIO_MODE_OUT_PP,GPIO_OSPEED_10MHZ,GPIO_PIN_15);//PA15 RESETÒý½Å
        gpio_bit_set(GPIOA,GPIO_PIN_15);
}

static void gsl_interrupt_config(void)
{
        nvic_priority_group_set(NVIC_PRIGROUP_PRE1_SUB3);
        nvic_irq_enable(EXTI5_9_IRQn,2U,0U);
        gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOA,GPIO_PIN_SOURCE_8);
        //exti_init(EXTI_8,EXTI_INTERRUPT,EXTI_TRIG_RISING);//×¢Êʹ˾äÅäÖóõʼ»¯¿ÉÒÔͨ¹ý
        exti_interrupt_flag_clear(EXTI_8);
}

void touch_config(void)
{
        gsl_gpio_config();
        gsl_interrupt_config();
        gsl_i2c_init();
        gpio_bit_reset(GPIOA,GPIO_PIN_15);
        SCI_Sleep(20);
        gpio_bit_set(GPIOA,GPIO_PIN_15);
        SCI_Sleep(20);//未注释中断初始化exti_init配置代码,程序卡死在此
        _GSLX680_clr_reg();
        _GSLX680_reset_chip();
        _GSLX680_load_fw();
        _GSLX680_startup_chip();
        _GSLX680_reset_chip();
        _GSLX680_startup_chip();
        _GSLX680_check_mem_data();
}
考虑到STM32单片机价格上涨,且采购周期长,想更换GD单片机,各种坑不说,网上资料又少,官方例程又少,本来一周时间更换,结果这个问题卡了一天 找硬件问题 找其它问题 找触摸模块问题  都没解决,求大佬帮忙解答下 第一次接触GD芯片 好郁闷

使用特权

评论回复
沙发
whx189958|  楼主 | 2020-11-3 18:36 | 只看该作者
exti_init(EXTI_8,EXTI_INTERRUPT,EXTI_TRIG_RISING);注释这句可以初始化 配置也是参考官方例程

使用特权

评论回复
板凳
lvben5d| | 2020-11-4 13:33 | 只看该作者
本帖最后由 lvben5d 于 2020-11-4 13:37 编辑

楼可以参考下EXAMPLE的初始化。不要担心,GD的芯片可以的,只是你还陌生。 引脚够用前提下,千万别把SWD 2个引脚复用普通IO,遗患无穷,(不得已用的话,得开个串口命令,可以掉电配置回SWD功能)exti_init(EXTI_8,EXTI_INTERRUPT,EXTI_TRIG_RISING);  这句话 是设置EXTI的中断模式  是上升沿触发, 你可以根据自己设置下降沿,边沿,低电平方式。 必须要设置哦!

使用特权

评论回复
地板
sonicll| | 2020-11-4 14:43 | 只看该作者
你写EXTI_8的中断服务函数了吗?我怀疑你的现象是没写中断服务函数,然后EXTI中断产生,程序跳进默认的中断服务函数了,默认的函数是个死循环

使用特权

评论回复
5
whx189958|  楼主 | 2020-11-4 16:59 | 只看该作者
sonicll 发表于 2020-11-4 14:43
你写EXTI_8的中断服务函数了吗?我怀疑你的现象是没写中断服务函数,然后EXTI中断产生,程序跳进默认的中断 ...

void EXTI5_9_IRQHanler(void)
{
        if(RESET != exti_interrupt_flag_get(EXTI_8))
        {
                exti_interrupt_flag_clear(EXTI_8);
                touch_flag = 1;
                GSLX680_Read(data);
        }
}
写了中断处理函数  这个中断处理函数根本进不去

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

0

粉丝