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

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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版