你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F071 STOP RTC 低功耗

[复制链接]
秦山asd 提问时间:2017-5-4 21:33 /
有哪位 可以发一份 RTC唤醒的  STOP模式的 代码给我吗?我调试的代码始终有问题,唤醒后 串口打印是始终有问题;/*************************************************************/
void RTC_Config(void)
{
                /* Enable the PWR clock */
                RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
                /* Allow access to RTC */
                PWR_BackupAccessCmd(ENABLE);
                RCC_LSICmd( ENABLE); //Æô¶¯LSI

                while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)
                { } /* Wait till LSi is ready */
               
                /* Select the RTC Clock Source */
               
               
               
                RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);//Ñ¡ÔñLSI×÷ΪRTCʱÖÓÔ´
                /* Enable the RTC Clock */
                RCC_RTCCLKCmd(ENABLE);//Æô¶¯RTC
                RTC_WakeUpCmd(DISABLE); //¹Ø±ÕRTC »½ÐѶ¨Ê±Æ÷!!!
               
                /* µÈ´ýRTC¼Ä´æÆ÷ͬ²½   µÈ´ýдRTC¼Ä´æÆ÷Íê³É */  
  RTC_WaitForSynchro();     

               
                RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);//»½ÐѶ¨Ê±Æ÷ʱÖÓ
                RTC_SetWakeUpCounter( 0x9c4); //¸øRTC WAKE UP TIMER¸³ÖØ×°Öµ
                RTC_WakeUpCmd( ENABLE); //Æô¶¯RTC »½ÐѶ¨Ê±Æ÷

}
/********RTC wake up interrupt NVIC ********/
void WKUP_NVIC_Config(void)
{
                EXTI_InitTypeDef EXTI_InitStructure;
                NVIC_InitTypeDef NVIC_InitStructure;

                /* Configure EXTI line 20 (connected to the RTC wakeup event) */
                EXTI_ClearITPendingBit(EXTI_Line20);
                EXTI_InitStructure.EXTI_Line = EXTI_Line20;
                EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
                EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
                EXTI_InitStructure.EXTI_LineCmd = ENABLE;
                EXTI_Init(&EXTI_InitStructure);
                /* NVIC configuration */
                NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
                NVIC_InitStructure.NVIC_IRQChannelPriority = 1;
                NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
                NVIC_Init(&NVIC_InitStructure);

                /* Enable peirodic wakeup interrupt */
                RTC_ITConfig(RTC_IT_WUT, ENABLE); //
                /* Clear the wakeup Pending Bit */
                RTC_ClearITPendingBit(RTC_IT_WUT);
}
/****** RTC periodic wake up interrupt service routine*******/


void RTC_IRQHandler(void)
{
                //printf("R ");
       
                if (RTC_GetITStatus(RTC_IT_WUT) != RESET)
                {
                        /* Clear RTC wake up interrupt pending bit */
                        RTC_ClearITPendingBit(RTC_IT_WUT);
                        /* Clear EXTI line20 pending bit */
                        EXTI_ClearITPendingBit(EXTI_Line20);
                }
               
                 if (PWR_GetFlagStatus(PWR_FLAG_WU) != RESET)
                {
                                PWR_ClearFlag(PWR_FLAG_WU);
                }
}



/**
  * @brief  Main program
  * @param  None
  * @retval None
  */
int main(void)
{
        u32 cnt=0;
  u32 i=0;
       
       
        USART_Config();
        for(i=0;i<10;i++)
        {
                printf("\r\n  OS  Æô¶¯  ¿ªÊ¼    \r\n");
                delay_ms(500);
        }
       
       

        printf("\r\n  ¿ªÊ¼ÅäÖà  \r\n");
       
        RTC_Config(); /* RTC Configuration */
        WKUP_NVIC_Config(); /* EXTI LINE 20 CONFIG */
       
        printf("\r\n  RTC  STOP ģʽ  ÅäÖÃÍê³É   \r\n");
       
        while(1)
        {
               
                PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
         
                SystemInit();
               
                printf("d ");
        }
       
        for(;;);

}


收藏 2 评论7 发布时间:2017-5-4 21:33

举报

7个回答
无薪税绵 回答时间:2017-8-8 12:34:49
唤醒后,串口也要重新初始化的。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

zhjb1 回答时间:2017-8-8 15:35:11
唤醒后,点亮个LED,再进入sleep。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

阿莫西林 回答时间:2017-8-8 18:57:17
我用072也有这问题。你要清一下标志位__HAL_UART_RESET_HANDLE_STATE(&huart1);

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

samhong 回答时间:2017-8-12 18:27:42
签到
zhao.zhao 回答时间:2017-8-13 12:35:36
RTC唤醒后,要重新配置系统时钟的,要不然时钟频率错了,波特率也就错了
秦山asd 回答时间:2017-8-21 08:31:07
zhao.zhao 发表于 2017-8-13 12:35
RTC唤醒后,要重新配置系统时钟的,要不然时钟频率错了,波特率也就错了

你好,感谢回复!  唤醒后我是重新配置了时钟的,但是串口我觉得不应该再次配置了,对应的寄存器都是内容保存的;  最后的我也没有找见问题具体出在哪里!  解决方案是:采用 CUBE软件自动生成的代码,然后按照一样的方法 添加 低功耗代码,然后就可以了,估计是 FREERTOS哪里有移植问题导致的吧  
zhao.zhao 回答时间:2017-8-21 14:53:19
一般串口的引脚要重新初始化,就是输入输出方式,串口的其他部分不能再次初始化,否则是可能不能收发的

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版