打印
[N32WBxxx]

按键不会产生中断

[复制链接]
400|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
中断线配置错误?

使用特权

评论回复
评论
viayfy 2025-7-31 19:51 回复TA
按例程配置的,矩阵键盘占用EXIT13 
板凳
powerantone| | 2025-7-31 14:55 | 只看该作者
NVIC优先级设置不当?

使用特权

评论回复
地板
stormwind123| | 2025-7-31 14:56 | 只看该作者
硬件连接问题或软件冲突?

使用特权

评论回复
5
dffzh| | 2025-7-31 15:51 | 只看该作者
可以先测试与按键相连的GPIO引脚的输入波形,看按键按下后引脚电平是否会发生变化,以此先排除硬件问题。

使用特权

评论回复
评论
dffzh 2025-8-1 16:24 回复TA
@viayfy :具体是哪款MCU? 
dffzh 2025-8-1 15:55 回复TA
@viayfy :方便的话,发我V信,帮你线下看一下。 
viayfy 2025-8-1 15:44 回复TA
@dffzh :还没解决,觉得是软件上哪个地方设置的问题 
dffzh 2025-8-1 14:59 回复TA
@viayfy :所以现在解决了吗? 
viayfy 2025-8-1 11:01 回复TA
测量了波形,按键时有波形的,键盘工作在低功耗模式 
6
viayfy|  楼主 | 2025-7-31 19:53 | 只看该作者
stormwind123 发表于 2025-7-31 14:56
硬件连接问题或软件冲突?

初始化后键盘控制寄存器、键盘低频时钟等读出来都对的

使用特权

评论回复
7
丙丁先生| | 2025-8-1 22:19 | 只看该作者
感谢分享

使用特权

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

本版积分规则

1

主题

6

帖子

0

粉丝