if(EXTI_GetITStatus(EXTI_Line10) != RESET)
{
LED1 = 0;
SystemInit();
delay_init(72);
printf(" USART WAKEUP stop mode testing ");
}
EXTI_ClearITPendingBit(EXTI_Line10);
//
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource10);
EXTI_InitStructure.EXTI_Line=EXTI_Line10;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
今天捣鼓了一天了,一直没有捣鼓通USART唤醒Stop mode.但是手册上说Any interrupt都能唤醒MCU。然后又试过单独一个RXD作为外部事件来唤醒,但是还是没成!之前通过按键成功控制了,但是到了USART就行不同了。当我单独将RXD作为唤醒引脚时,USART输入又错误!!!
if(EXTI_GetITStatus(EXTI_Line10) != RESET)
{
LED1 = 0;
SystemInit();
delay_init(72);
printf(" USART WAKEUP stop mode testing ");
}
EXTI_ClearITPendingBit(EXTI_Line10);
//
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource10);
EXTI_InitStructure.EXTI_Line=EXTI_Line10;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
今天捣鼓了一天了,一直没有捣鼓通USART唤醒Stop mode.但是手册上说Any interrupt都能唤醒MCU。然后又试过单独一个RXD作为外部事件来唤醒,但是还是没成!之前通过按键成功控制了,但是到了USART就行不同了。当我单独将RXD作为唤醒引脚时,USART输入又错误!!!
我是想只要USART有数据来了就唤醒,试了单独用RXD,但是没试成
深夜还在苦命的路过,要认真看手册哦
注意看stop 模式下不是any interrupt,是要EXIT;所以你之前用按键成功了
PS:楼上有怎么设置的提示
1、SLEEP 模式:很容易实现,可以由中断唤醒,但省电较少。这时候要配合时钟的关闭来节电:不需要用到的外设关闭时钟,要用到时才打开。例如USART:要发送数据前,把USART的时钟使能,数据包发送完成后,立即关闭时钟。
2、STOP 模式:需要外部中断唤醒。RTC报警唤醒给该模式带来了更加灵活的应用。但应用中有一个问题需要注意:在ADC数据采样的应用场合。如果使用STOP模式,假设采样率为200HZ,5毫秒唤醒一次启动ADC 采样,通过测试STOP唤醒的周期并不是很固定(可能是唤醒后需要恢复时钟设置,唤醒后自动使用内部的HSI时钟做为系统时钟),造成采样周期不是很固定,对滤波不利,例如工频陷波。
1、STM32进入STOP模式后,当串口接收到数据时,需要唤醒STM32。
进入STOP模式前、退出STOP模式后,需要怎么进行设置?
答案:
进入stop模式前,将串口的RxD设置为外部中断输入。
在stop模式时,RxD端口接收到数据时(有上升沿或下降沿时),产生中断。
中断服务程序中,恢复MCU的时钟,再将RxD端口当串口接收端口使用即可
另:最好能再了解一下uart通信的原理
uart唤醒RX和TX是不是合适,还是需要使用流控等辅助管脚来唤醒