[N32WBxxx] 按键不会产生中断

[复制链接]
 楼主| viayfy 发表于 2025-7-30 22:31 | 显示全部楼层 |阅读模式
pi, IO, GPIO, gp, ni, ST
本帖最后由 viayfy 于 2025-7-30 22:37 编辑

使用PA0,PA1,PB8,PB9,PB10组成一个2*3的键盘矩阵,参考例程配置后,按键时无法产生中断,是怎么回事?初始化配置流程软件是;
void KEYSCAN_Configuration(uint8_t key_mask, uint8_t mode, uint8_t dts, uint8_t wts, bool int_en)
{
    /* KEYSCAN CLK EN */
    RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA | RCC_APB2_PERIPH_GPIOB | RCC_APB2_PERIPH_AFIO, ENABLE);
    RCC->LSCTRL |= RCC_LSCTRL_KEYSCANEN;
     /* config GPIO */
    GPIO_InitStruct(&GPIO_InitStructure);
    if(key_mask == KEY_65)
    {
        GPIO_InitStructure.Pin =     GPIO_PIN_0 | GPIO_PIN_1;        
    }
    else if(key_mask == KEY_44)
    {
        GPIO_InitStructure.Pin =     GPIO_PIN_0 | GPIO_PIN_1;
    }
    else
    {
        GPIO_InitStructure.Pin = GPIO_PIN_0 | GPIO_PIN_1 ;
    }
   
    GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_OD;
    GPIO_InitStructure.GPIO_Alternate = GPIO_AF5;
    GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
   
    GPIO_InitStructure.Pin = 0; //deinit
    if(key_mask == KEY_65 ||key_mask == KEY_44)
    {
        GPIO_InitStructure.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10;        
    }
    else
    {
        GPIO_InitStructure.Pin =  GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10;
    }
   
    GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_OD;
    GPIO_InitStructure.GPIO_Alternate = GPIO_AF5;
    GPIO_InitPeripheral(GPIOB, &GPIO_InitStructure);

//GpioKeypadInit(GPIOA,GPIO_PIN_0 | GPIO_PIN_1);   
//GpioKeypadInit(GPIOB,GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10);   
    /* config KEYSCAN */
    KEYSCAN_InitStructure.Mask = key_mask;
    KEYSCAN_InitStructure.Mode = mode;
    KEYSCAN_InitStructure.Wts = wts;
    KEYSCAN_InitStructure.Dts = dts;
    KEYSCAN_InitStructure.Int_en = int_en;
    KEYSCAN_Init(&KEYSCAN_InitStructure);
    /* config intterrupt */

    if(int_en)
    {
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Line = EXTI_LINE13;
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
        EXTI_InitPeripheral(&EXTI_InitStructure);

        
        NVIC_DisableIRQ(KEYSCAN_IRQn);
        /* Enable the KEYSCAN Interrupt */
       NVIC_InitStructure.NVIC_IRQChannel                   = KEYSCAN_IRQn;
       NVIC_InitStructure.NVIC_IRQChannelPriority           = 3;
       NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;
       NVIC_Init(&NVIC_InitStructure);
        
        ModuleIrqRemoval(KEYSCAN_IRQn);
        ModuleIrqRegister(KEYSCAN_IRQn,KEYSCAN_IRQHandler);

    APP_DEBUG("Keypad INT init,%x\r\n",KEYSCAN->KEYCR);
}
    /* Enable KEYSCAN */
    KEYSCAN_Enable(ENABLE);
}

协议运行后,调用初始化函数:    KEYSCAN_Configuration(KEY_44,MODE_PRESS_TRIG, DTS_10MS, WTS_0MS, INT_EN);


probedog 发表于 2025-7-31 14:55 | 显示全部楼层
中断线配置错误?

评论

按例程配置的,矩阵键盘占用EXIT13  发表于 2025-7-31 19:51
powerantone 发表于 2025-7-31 14:55 | 显示全部楼层
NVIC优先级设置不当?
stormwind123 发表于 2025-7-31 14:56 | 显示全部楼层
硬件连接问题或软件冲突?
dffzh 发表于 2025-7-31 15:51 | 显示全部楼层
可以先测试与按键相连的GPIO引脚的输入波形,看按键按下后引脚电平是否会发生变化,以此先排除硬件问题。

评论

[url=home.php?mod=space&uid=2728380]@dffzh[/url] :感谢,型号是:N32WB031KEQ6-2  发表于 2025-8-5 19:59
[url=home.php?mod=space&uid=3297256]@viayfy[/url] :具体是哪款MCU?  发表于 2025-8-1 16:24
[url=home.php?mod=space&uid=3297256]@viayfy[/url] :方便的话,发我V信,帮你线下看一下。  发表于 2025-8-1 15:55
[url=home.php?mod=space&uid=2728380]@dffzh[/url] :还没解决,觉得是软件上哪个地方设置的问题  发表于 2025-8-1 15:44
[url=home.php?mod=space&uid=3297256]@viayfy[/url] :所以现在解决了吗?  发表于 2025-8-1 14:59
测量了波形,按键时有波形的,键盘工作在低功耗模式  发表于 2025-8-1 11:01
 楼主| viayfy 发表于 2025-7-31 19:53 | 显示全部楼层
stormwind123 发表于 2025-7-31 14:56
硬件连接问题或软件冲突?

初始化后键盘控制寄存器、键盘低频时钟等读出来都对的
chenjun89 发表于 2025-8-6 07:54 来自手机 | 显示全部楼层
矩阵键盘一般都是用的扫描模式来检测
market911 发表于 2025-8-20 19:09 | 显示全部楼层
chenjun89 发表于 2025-8-6 07:54
矩阵键盘一般都是用的扫描模式来检测

电池供电,工作在低功耗模式,希望按键时产生中断后再读取数据
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

7

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

1

主题

7

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部