打印
[技术讨论]

新塘单片机外部中断唤醒失败

[复制链接]
1289|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
刘俊涛|  楼主 | 2022-1-4 11:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 刘俊涛 于 2022-1-4 11:57 编辑

使用的是新塘Nano 100LC2BN    用外部中断0(PB9)来唤醒深睡的MCU,发现NU-link仿真器在线仿真的时候可以正常唤醒,但是直接下载到程序后,唤醒不了(程序下载后可以运行)
//GPIO配置***********************************************************************************************
SYS->PB_H_MFP = SYS_PB_H_MFP_PB9_MFP_EXT_INT0;     //PB9接外部中断INT0

GPIO_SetMode(PB, BIT9, GPIO_PMD_INPUT);            //将PB9设为输入模式
       
GPIO_EnableEINT0(PB, 9, GPIO_INT_FALLING);          //下降沿触发中断. GPIO_INT_RISING   GPIO_INT_FALLING
NVIC_SetPriority(EINT0_IRQn, 1);                   //设置中断优先级
NVIC_EnableIRQ(EINT0_IRQn);                        //使能外部中断0向量

GPIO_SET_DEBOUNCE_TIME(GPIO_DBCLKSRC_HCLK, GPIO_DBCLKSEL_1);  //选择HCLK作为消抖时钟源
GPIO_ENABLE_DEBOUNCE(PB, BIT9);  //使能PB.9引脚的消抖功能


//中断函数***********************************************************************************************
void EINT0_IRQHandler(void)  //EINT0,指PB.9管脚上的外部信号中断。EINT0外部中断处理函数
{
    if(GPIO_GET_INT_FLAG(PB, BIT9))
    {
        PB->ISRC = BIT9;  //清除PB.9中断标志。ISRC写1=清除相应的未处理中断
        printf("PB.9 EINT0 occurred\r\n");
    }
}

//主程序***********************************************************************************************
int main()
{
        UART_WAIT_TX_EMPTY(UART0); //等待UART0发送完成
        CLK_PowerDown();       //MCU进入掉电模式

        while(1);
}









使用特权

评论回复

相关帖子

沙发
zhaolei2612| | 2022-1-4 15:40 | 只看该作者
上掉电模式设置程序。你怎么知道MCU进入深度掉电模式了?然后,外部中断函数这样写,应该是不会输出串口信息的。从深度休眠模式唤醒后,要重新初始化外设包括时钟。

使用特权

评论回复
板凳
呐咯密密| | 2022-1-5 15:42 | 只看该作者

新塘单片机外部中断唤醒失败

你是如何判定唤醒失败的?唤醒后MCU会以内部8M的时钟运行,在唤醒后需要进行系统的初始化。可能唤醒了你自己没发现

使用特权

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

本版积分规则

1

主题

1

帖子

0

粉丝