国民技术N32L40X进入Stop2

1.首先配置唤醒MCU的外部中断

void Exti_Pin_Config(void)
{
    EXTI_InitType EXTI_InitStructure;
    NVIC_InitType NVIC_InitStructure;
	GPIO_InitType GPIO_InitStructure;
	GPIO_InitStruct(&GPIO_InitStructure);
	
	RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA | RCC_APB2_PERIPH_AFIO, ENABLE);
	RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB | RCC_APB2_PERIPH_AFIO, ENABLE);
	RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOC | RCC_APB2_PERIPH_AFIO, ENABLE);
	
	GPIO_InitStructure.Pin        = GPIO_PIN_0;
	GPIO_InitStructure.GPIO_Pull  = GPIO_Pull_Up;
	GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Input;
	GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);

	GPIO_InitStructure.Pin        = GPIO_PIN_7;
	GPIO_InitStructure.GPIO_Pull  = GPIO_Pull_Up;
	GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Input;
	GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
	
	GPIO_InitStructure.Pin        = GPIO_PIN_8;
	GPIO_InitStructure.GPIO_Pull  = GPIO_Pull_Up;
	GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Input;
	GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
	
	GPIO_InitStructure.Pin        = GPIO_PIN_11;
	GPIO_InitStructure.GPIO_Pull    = GPIO_Pull_Up;
	GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Input;
	GPIO_InitPeripheral(GPIOB, &GPIO_InitStructure);
	
	GPIO_InitStructure.Pin        = GPIO_PIN_13;
	GPIO_InitStructure.GPIO_Pull    = GPIO_Pull_Up;
	GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Input;
	GPIO_InitPeripheral(GPIOC, &GPIO_InitStructure);

	GPIO_ConfigEXTILine(GPIOA_PORT_SOURCE, GPIO_PIN_SOURCE0);
	GPIO_ConfigEXTILine(GPIOA_PORT_SOURCE, GPIO_PIN_SOURCE7);
	GPIO_ConfigEXTILine(GPIOA_PORT_SOURCE, GPIO_PIN_SOURCE8);
	GPIO_ConfigEXTILine(GPIOB_PORT_SOURCE, GPIO_PIN_SOURCE11);
	GPIO_ConfigEXTILine(GPIOC_PORT_SOURCE, GPIO_PIN_SOURCE13);

    EXTI_InitStructure.EXTI_Line = EXTI_LINE0 | EXTI_LINE7 | EXTI_LINE8 | EXTI_LINE11 | EXTI_LINE13;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_InitPeripheral(&EXTI_InitStructure);

    NVIC_InitStructure.NVIC_IRQChannel                   = EXTI0_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 0x0D;
    NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
	
	NVIC_InitStructure.NVIC_IRQChannel                   = EXTI9_5_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 0x0D;
	NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	
	NVIC_InitStructure.NVIC_IRQChannel                   = EXTI15_10_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 0x0D;
	NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	
	EXTI_ClrStatusFlag(EXTI_LINE0 | EXTI_LINE7 | EXTI_LINE8 | EXTI_LINE11 | EXTI_LINE13);
}

2.配置进入Stop2模式函数

void Stop2_Mode_Init(void)
{
	Led_Rest_Low;
	printf("Stop2_Mode_Init \r\n");
	Exti_Pin_Config();
	
	RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_PWR, ENABLE);
	PWR_EnterSTOP2Mode(PWR_STOPENTRY_WFI,PWR_CTRL3_RAM1RET);

	NVIC_SystemReset();
}

3.中断响应函数要记得写一下

void EXTI0_IRQHandler(void)
{
	if (EXTI_GetITStatus(EXTI_LINE0) != RESET)
    {
		EXTI_ClrITPendBit(EXTI_LINE0);
		//printf("EXTI_LINE0\r\n");
    }
}

void EXTI9_5_IRQHandler(void)
{
	if (EXTI_GetITStatus(EXTI_LINE7) != RESET)
    {
		EXTI_ClrITPendBit(EXTI_LINE7);
		//printf("EXTI_LINE7\r\n");
    }
    else if (EXTI_GetITStatus(EXTI_LINE8) != RESET)
    {
		EXTI_ClrITPendBit(EXTI_LINE8);
		//printf("EXTI_LINE8\r\n");
    }
}

void EXTI15_10_IRQHandler(void)
{
    if (EXTI_GetITStatus(EXTI_LINE11) != RESET)
    {
		EXTI_ClrITPendBit(EXTI_LINE11);
		//printf("EXTI_LINE11\r\n");
    }
	else if (EXTI_GetITStatus(EXTI_LINE13) != RESET)
	{
		EXTI_ClrITPendBit(EXTI_LINE13);
		//printf("EXTI_LINE13\r\n");
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值