21ic问答首页 - 新塘单片机外部中断唤醒失败
新塘单片机外部中断唤醒失败
刘俊涛2022-01-04
本帖最后由 刘俊涛 于 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);
}
使用的是新塘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);
}
赞0
评论
2022-01-05
赞0
评论
2022-01-04
您需要登录后才可以回复 登录 | 注册