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

使用CubeMX库解决STM32L151低功耗RTC唤醒

[复制链接]
DemonA 提问时间:2017-12-8 15:04 /
最近这几天一直在做L151芯片的低功耗,想用RTC  wakeup唤醒。具体思路是这样子的,设置2S定时器,定时器到了之后进入低功耗模式(sleep,standby,stop模式),串口一用来指示作用。RTCwakeup时间到之后进行唤醒,重复这样的工作。现在进入不了低功耗,只有在stop模式下能进去,但是测得电流200-300uA太大了,不正常,所以请教各位。有之前做过的可以加我QQ1056750949,交流一下,感激不尽。这部分是主函数
int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();
       
        __HAL_RCC_PWR_CLK_ENABLE();
  /* USER CODE BEGIN SysInit */
       
  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_RTC_Init();
  MX_USART1_UART_Init();
  MX_TIM2_Init();

  /* USER CODE BEGIN 2 */
        HAL_TIM_Base_Start_IT(&htim2);

  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
         if(ReadTimer() == 2)
         {
                Clear_Timer();
                printf("Ready to Enter SLEEP Mode...\r\n");
                MX_GPIO_Init();                   // °ÑËùÓÐÒý½Å¹Ø±Õ
                HAL_PWREx_EnableUltraLowPower();
                HAL_PWREx_EnableFastWakeUp();       
                HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI);   // ½øÈëµÍ¹¦ºÄÍ£»úģʽ               
                //HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);       
                //HAL_PWR_EnterSTANDBYMode();         
                printf("Enter SLEEP Mode Failed...\r\n");
         }
          
          if(Wakeup_Set())
          {
                Clear_Wakeup();
                SystemClock_Config();             // ÖØÐÂÅäÖÃϵͳʱÖÓ
                MX_USART1_UART_Init();
                printf("Exit from SLEEP Mode...\r\n");
          }
  }


收藏 评论8 发布时间:2017-12-8 15:04

举报

8个回答
DemonA 回答时间:2017-12-8 15:08:31
RTC配置代码
void MX_RTC_Init(void)
{
  RTC_TimeTypeDef sTime;
  RTC_DateTypeDef sDate;

    /**Initialize RTC Only
    */
  hrtc.Instance = RTC;
  hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
  hrtc.Init.AsynchPrediv = 99;
  hrtc.Init.SynchPrediv = 369;
  hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
  hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
  hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
  if (HAL_RTC_Init(&hrtc) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

    /**Initialize RTC and set the Time and Date
    */
  if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR0) != 0x32F2){
  sTime.Hours = 0x9;
  sTime.Minutes = 0x30;
  sTime.Seconds = 0x30;
  sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
  sTime.StoreOperation = RTC_STOREOPERATION_RESET;
  if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

  sDate.WeekDay = RTC_WEEKDAY_MONDAY;
  sDate.Month = RTC_MONTH_JANUARY;
  sDate.Date = 0x1;
  sDate.Year = 0x0;

  if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

    HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR0,0x32F2);
  }
    /**Enable the WakeUp
    */
  if (HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 8200, RTC_WAKEUPCLOCK_RTCCLK_DIV16) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

}
DemonA 回答时间:2017-12-8 15:10:19
SOS在线等
waiman 回答时间:2017-12-8 21:07:57
这么大电流,通常是IO口没设置模拟输入,或者某个时钟没关掉
waiman 回答时间:2017-12-8 21:08:33
另外,禁用休眠调试功能
DemonA 回答时间:2017-12-15 08:54:45
谢谢各位,问题已经解决
DemonA 回答时间:2018-1-5 10:26:01
stop模式电流1UA,standby模式下电流更小

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2 结贴奖励

查看全部评分

Leeeeee 回答时间:2018-1-29 18:17:10
DemonA 发表于 2018-1-5 10:26
stop模式电流1UA,standby模式下电流更小

楼主怎么解决的,我最近也碰到了这个问题,端脚的模式也模拟输入了。。。
sidnge 回答时间:2019-6-1 17:12:32
楼主问题是则呢么解决的?可以指点下吗?
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版