查看: 4940|回复: 4

【GPIO】exit2 和 9 不触发中断 开发板上运行

[复制链接]

3

主题

10

帖子

53

积分

中级工程师

Rank: 2

积分
53
发表于 2020-7-30 09:18:20 | 显示全部楼层 |阅读模式
#include "key.h"

void GPIO_IRQHandler(void)
{
    if(SET == LL_EXTI_IsActiveFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_0))
    {
        DBG_print("0");
        LL_EXTI_ClearFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_0);
        if(LINE_0_N){}
        if(LINE_0_P){}
    }
    if(SET == LL_EXTI_IsActiveFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_1))
    {
        DBG_print("1");
        LL_EXTI_ClearFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_1);
        if(LINE_1_N){}
        if(LINE_1_P){}
    }
    if(SET == LL_EXTI_IsActiveFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_2))
    {
        DBG_print("2");
        LL_EXTI_ClearFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_2);
        if(LINE_2_N){}
        if(LINE_2_P){}
    }   
    if(SET == LL_EXTI_IsActiveFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_3))
    {
        DBG_print("3");
        LL_EXTI_ClearFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_3);
        if(LINE_3_N){}
        if(LINE_3_P){}
    }
    if(SET == LL_EXTI_IsActiveFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_4))
    {
        DBG_print("4");
        LL_EXTI_ClearFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_4);
        if(LINE_4_N){}
        if(LINE_4_P){}
    }
    if(SET == LL_EXTI_IsActiveFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_5))
    {
        DBG_print("5");
        LL_EXTI_ClearFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_5);
        if(LINE_5_N){}
        if(LINE_5_P){}
    }   
    if(SET == LL_EXTI_IsActiveFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_6))
    {
        DBG_print("6");
        LL_EXTI_ClearFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_6);
        if(LINE_6_N){}
        if(LINE_6_P){}
    }
    if(SET == LL_EXTI_IsActiveFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_7))
    {
        DBG_print("7");
        LL_EXTI_ClearFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_7);
        if(LINE_7_N){}
        if(LINE_7_P){}
    }
    if(SET == LL_EXTI_IsActiveFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_8))
    {
        DBG_print("8");
        LL_EXTI_ClearFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_8);
        if(LINE_8_N){}
        if(LINE_8_P){}
    }   
    if(SET == LL_EXTI_IsActiveFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_9))
    {
        DBG_print("9");
        LL_EXTI_ClearFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_9);
        if(LINE_9_N){}
        if(LINE_9_P){}
    }

}

void KEY_GPIO_Init(void)
{
    LL_GPIO_InitTypeDef GPIO_InitStruct = {0};

//    LL_RCC_Enable_SleepmodeExternalInterrupt();
//    LL_RCC_SetEXTIClockSource(LL_RCC_EXTERNAL_INTERRUPT_SAMPLING_CLOCK_SELECT_LSCLK);
    LL_RCC_SetEXTIClockSource(LL_RCC_EXTERNAL_INTERRUPT_SAMPLING_CLOCK_SELECT_HCLK);
    LL_RCC_Group1_EnableOperationClock(LL_RCC_OPERATION1_CLOCK_EXTI);

    GPIO_InitStruct.Pin = LINE_0_PIN;
    GPIO_InitStruct.Mode = LL_GPIO_MODE_INPUT;
    GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
    GPIO_InitStruct.Pull = ENABLE;
    LL_GPIO_Init(LINE_0_GPIO, &GPIO_InitStruct);

    LL_EXTI_SetTrigEdge(GPIO_COMMON, LL_GPIO_EXTI_LINE_0, LL_GPIO_EXTI_TRIGGER_NONE);
    LL_GPIO_SetExitLine0(GPIO_COMMON, LL_GPIO_EXTI_LINE_0_PA0);
//    LL_GPIO_SetExitLine0(GPIO_COMMON, LL_GPIO_EXTI_LINE_0_PA1);
//    LL_GPIO_SetExitLine0(GPIO_COMMON, LL_GPIO_EXTI_LINE_0_PA2);
//    LL_GPIO_SetExitLine0(GPIO_COMMON, LL_GPIO_EXTI_LINE_0_PA3);
    LL_EXTI_EnableDigitalFilter(GPIO_COMMON, LL_GPIO_EXTI_LINE_0);
    LL_EXTI_SetTrigEdge(GPIO_COMMON, LL_GPIO_EXTI_LINE_0, LL_GPIO_EXTI_TRIGGER_BOTHEDGE);
    LL_EXTI_ClearFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_0);

    GPIO_InitStruct.Pin = LINE_1_PIN;
    GPIO_InitStruct.Mode = LL_GPIO_MODE_INPUT;
    GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
    GPIO_InitStruct.Pull = ENABLE;
    LL_GPIO_Init(LINE_1_GPIO, &GPIO_InitStruct);


    LL_EXTI_SetTrigEdge(GPIO_COMMON, LL_GPIO_EXTI_LINE_1, LL_GPIO_EXTI_TRIGGER_NONE);
    LL_GPIO_SetExitLine1(GPIO_COMMON, LL_GPIO_EXTI_LINE_1_PA4);
//    LL_GPIO_SetExitLine1(GPIO_COMMON, LL_GPIO_EXTI_LINE_1_PA5);
//    LL_GPIO_SetExitLine1(GPIO_COMMON, LL_GPIO_EXTI_LINE_1_PA6);
//    LL_GPIO_SetExitLine1(GPIO_COMMON, LL_GPIO_EXTI_LINE_1_PA7);
    LL_EXTI_EnableDigitalFilter(GPIO_COMMON, LL_GPIO_EXTI_LINE_1);
    LL_EXTI_SetTrigEdge(GPIO_COMMON, LL_GPIO_EXTI_LINE_1, LL_GPIO_EXTI_TRIGGER_BOTHEDGE);
    LL_EXTI_ClearFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_1);

    GPIO_InitStruct.Pin = LINE_2_PIN;
    GPIO_InitStruct.Mode = LL_GPIO_MODE_INPUT;
    GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
    GPIO_InitStruct.Pull = DISABLE;
    LL_GPIO_Init(LINE_2_GPIO, &GPIO_InitStruct);

    LL_EXTI_SetTrigEdge(GPIO_COMMON, LL_GPIO_EXTI_LINE_2, LL_GPIO_EXTI_TRIGGER_NONE);
//    LL_GPIO_SetExitLine2(GPIO_COMMON, LL_GPIO_EXTI_LINE_2_PA8);
//    LL_GPIO_SetExitLine2(GPIO_COMMON, LL_GPIO_EXTI_LINE_2_PA9);
    LL_GPIO_SetExitLine2(GPIO_COMMON, LL_GPIO_EXTI_LINE_2_PA10);
//    LL_GPIO_SetExitLine2(GPIO_COMMON, LL_GPIO_EXTI_LINE_2_PA11);
    LL_EXTI_EnableDigitalFilter(GPIO_COMMON, LL_GPIO_EXTI_LINE_2);
    LL_EXTI_SetTrigEdge(GPIO_COMMON, LL_GPIO_EXTI_LINE_2, LL_GPIO_EXTI_TRIGGER_BOTHEDGE);
    LL_EXTI_ClearFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_2);

    GPIO_InitStruct.Pin = LINE_3_PIN;
    GPIO_InitStruct.Mode = LL_GPIO_MODE_INPUT;
    GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
    GPIO_InitStruct.Pull = ENABLE;
    LL_GPIO_Init(LINE_3_GPIO, &GPIO_InitStruct);


    LL_EXTI_SetTrigEdge(GPIO_COMMON, LL_GPIO_EXTI_LINE_3, LL_GPIO_EXTI_TRIGGER_NONE);
    LL_GPIO_SetExitLine3(GPIO_COMMON, LL_GPIO_EXTI_LINE_3_PA12);
//    LL_GPIO_SetExitLine3(GPIO_COMMON, LL_GPIO_EXTI_LINE_3_PA13);
//    LL_GPIO_SetExitLine3(GPIO_COMMON, LL_GPIO_EXTI_LINE_3_PA14);
//    LL_GPIO_SetExitLine3(GPIO_COMMON, LL_GPIO_EXTI_LINE_3_PA15);
    LL_EXTI_EnableDigitalFilter(GPIO_COMMON, LL_GPIO_EXTI_LINE_3);
    LL_EXTI_SetTrigEdge(GPIO_COMMON, LL_GPIO_EXTI_LINE_3, LL_GPIO_EXTI_TRIGGER_BOTHEDGE);
    LL_EXTI_ClearFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_3);

    GPIO_InitStruct.Pin = LINE_4_PIN;
    GPIO_InitStruct.Mode = LL_GPIO_MODE_INPUT;
    GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
    GPIO_InitStruct.Pull = ENABLE;
    LL_GPIO_Init(LINE_4_GPIO, &GPIO_InitStruct);


    LL_EXTI_SetTrigEdge(GPIO_COMMON, LL_GPIO_EXTI_LINE_4, LL_GPIO_EXTI_TRIGGER_NONE);
//    LL_GPIO_SetExitLine4(GPIO_COMMON, LL_GPIO_EXTI_LINE_4_PB0);
//    LL_GPIO_SetExitLine4(GPIO_COMMON, LL_GPIO_EXTI_LINE_4_PB1);
    LL_GPIO_SetExitLine4(GPIO_COMMON, LL_GPIO_EXTI_LINE_4_PB2);
//    LL_GPIO_SetExitLine4(GPIO_COMMON, LL_GPIO_EXTI_LINE_4_PB3);
    LL_EXTI_EnableDigitalFilter(GPIO_COMMON, LL_GPIO_EXTI_LINE_4);
    LL_EXTI_SetTrigEdge(GPIO_COMMON, LL_GPIO_EXTI_LINE_4, LL_GPIO_EXTI_TRIGGER_BOTHEDGE);
    LL_EXTI_ClearFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_4);


    GPIO_InitStruct.Pin = LINE_9_PIN;
    GPIO_InitStruct.Mode = LL_GPIO_MODE_INPUT;
    GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
    GPIO_InitStruct.Pull = ENABLE;
    LL_GPIO_Init(LINE_9_GPIO, &GPIO_InitStruct);

    LL_EXTI_SetTrigEdge(GPIO_COMMON, LL_GPIO_EXTI_LINE_9, LL_GPIO_EXTI_TRIGGER_NONE);
//    LL_GPIO_SetExitLine9(GPIO_COMMON, LL_GPIO_EXTI_LINE_9_PC4);
//    LL_GPIO_SetExitLine9(GPIO_COMMON, LL_GPIO_EXTI_LINE_9_PC5);
    LL_GPIO_SetExitLine9(GPIO_COMMON, LL_GPIO_EXTI_LINE_9_PC6);
//    LL_GPIO_SetExitLine9(GPIO_COMMON, LL_GPIO_EXTI_LINE_9_PC7);
    LL_EXTI_EnableDigitalFilter(GPIO_COMMON, LL_GPIO_EXTI_LINE_9);
    LL_EXTI_SetTrigEdge(GPIO_COMMON, LL_GPIO_EXTI_LINE_9, LL_GPIO_EXTI_TRIGGER_BOTHEDGE);
    LL_EXTI_ClearFlag(GPIO_COMMON, LL_GPIO_EXTI_LINE_9);

    NVIC_DisableIRQ(GPIO_IRQn);
    NVIC_SetPriority(GPIO_IRQn,2);
    NVIC_EnableIRQ(GPIO_IRQn);
}


微信截图_20200729173335.png
回复

使用道具 举报

154

主题

846

帖子

4624

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4624
发表于 2020-7-30 14:34:04 | 显示全部楼层
GPIO功能都验证过的,一个是开发板的相关引脚上有其他器件。一个是软件写错。
回复

使用道具 举报

3

主题

10

帖子

53

积分

中级工程师

Rank: 2

积分
53
 楼主| 发表于 2020-7-30 15:27:36 | 显示全部楼层
顾博文 发表于 2020-7-30 14:34
GPIO功能都验证过的,一个是开发板的相关引脚上有其他器件。一个是软件写错。 ...

引脚上确定没其他器件了的  用的开发板   软件代码贴上面了  参照的sleep的IO中断  不知道有没有问题 能帮忙看看吗
回复

使用道具 举报

3

主题

10

帖子

53

积分

中级工程师

Rank: 2

积分
53
 楼主| 发表于 2020-7-30 16:33:46 | 显示全部楼层
原理图。
1596097849(1).png
回复

使用道具 举报

154

主题

846

帖子

4624

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4624
发表于 2020-8-3 08:56:14 | 显示全部楼层
功能好的,仔细看看你的程序,还有开发板的跳帽是不是短接了,程序头文件.h里的中断引脚是否正确
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表