USART是不能唤醒STM32的Stop mode吗?

  • 羊吃狼
  • LV0工程师
  • |      2014-06-11 17:08:17
  • 浏览量 5807
  • 回复:9
 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输入又错误!!!
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:9
-12大风 2015-03-23
谢谢分享!
0   回复
举报
发布
羊吃狼 2014-06-12
谢谢了,再试试把
0   回复
举报
发布
羊吃狼 2014-06-12
这个已经够清晰了。之前也用RXD试过,可能是我弄错了。我再试试把,我的疑惑是回复MCU时钟后,同时要不要屏蔽RXD的外部中断输入,不然当有数据时,它会不定时的产生中断?
0   回复
举报
发布
羊吃狼 2014-06-12

我是想只要USART有数据来了就唤醒,试了单独用RXD,但是没试成

0   回复
举报
发布
羊吃狼 2014-06-12
前面的都没有问题,就是单独用RXD作为唤醒,失败了!可能是我哪里弄错了
0   回复
举报
发布
supermu 2014-06-12

深夜还在苦命的路过,要认真看手册哦

注意看stop 模式下不是any interrupt,是要EXIT;所以你之前用按键成功了

PS:楼上有怎么设置的提示

0   回复
举报
发布
Eagleson 2014-06-11

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端口当串口接收端口使用即可

0   回复
举报
发布
Cigoy 2014-06-11

另:最好能再了解一下uart通信的原理

uart唤醒RX和TX是不是合适,还是需要使用流控等辅助管脚来唤醒

0   回复
举报
发布
gtrjolin1986 2014-06-11
谁帮忙看下!
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子