硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2245|回复: 12
收起左侧

STM32进入STOP模式,用LTIM和RTC都能唤醒,但是只有几十秒的唤醒时间是准的,长点的时间根本就不对

[复制链接]

7

主题

30

回帖

51

积分

初级会员

积分
51
发表于 2020-2-25 10:34:43 | 显示全部楼层 |阅读模式
STM32进入STOP模式,用LTIM和RTC都能唤醒,但是只有设置几十秒的唤醒时间是准的,长点的时间根本就不对,低功耗定时器用               
if (HAL_LPTIM_TimeOut_Start_IT(&hlptim2, 0, 20000) != HAL_OK)   
{  
    //Error_Handler(__FILE__, __LINE__);   
}

配置定时,超过60秒,唤醒时间就不对


用RTC用这个函数
if (HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 40000, RTC_WAKEUPCLOCK_RTCCLK_DIV16) != HAL_OK)
{
    Error_Handler();
}        
超过2分钟也是不行,

低功耗定时器时钟是1khz,RTC是0.5Khz,帮忙给看看怎么回事,谢谢

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2020-2-25 10:53:52 | 显示全部楼层
帮你用我们H7的LPTIM低功耗例子测试了下,128秒没问题。
简单计数。

QQ截图20200225110122.png
回复

使用道具 举报

7

主题

30

回帖

51

积分

初级会员

积分
51
 楼主| 发表于 2020-2-25 11:00:16 | 显示全部楼层
eric2013 发表于 2020-2-25 10:53
帮你用我们H7的LPTIM低功耗例子测试了下,128秒没问题。
简单计数,忽略1-2秒的误差。

也是用的if (HAL_LPTIM_TimeOut_Start_IT(&hlptim2, 0, 20000) != HAL_OK)   
{  
    //Error_Handler(__FILE__, __LINE__);   
}这个函数吗
回复

使用道具 举报

7

主题

30

回帖

51

积分

初级会员

积分
51
 楼主| 发表于 2020-2-25 11:01:53 | 显示全部楼层
eric2013 发表于 2020-2-25 10:53
帮你用我们H7的LPTIM低功耗例子测试了下,128秒没问题。
简单计数,忽略1-2秒的误差。

例程方便上传下吗,好奇怪,我那个好像有点问题
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2020-2-25 11:05:39 | 显示全部楼层
ZHANGHAO 发表于 2020-2-25 11:00
也是用的if (HAL_LPTIM_TimeOut_Start_IT(&hlptim2, 0, 20000) != HAL_OK)   
{  
    //Error_Handler ...

是的,此贴下载即可:

https://forum.anfulai.cn/forum.p ... &extra=page%3D1

回复

使用道具 举报

7

主题

30

回帖

51

积分

初级会员

积分
51
 楼主| 发表于 2020-2-25 11:19:26 | 显示全部楼层
eric2013 发表于 2020-2-25 11:05
是的,此贴下载即可:

https://forum.anfulai.cn/forum.php?mod=viewthread&tid=86980&extra=page%3D1

谢谢,我去下载看看
回复

使用道具 举报

7

主题

30

回帖

51

积分

初级会员

积分
51
 楼主| 发表于 2020-2-25 17:07:54 | 显示全部楼层
eric2013 发表于 2020-2-25 11:05
是的,此贴下载即可:

https://forum.anfulai.cn/forum.php?mod=viewthread&tid=86980&extra=page%3D1

我对比了下程序,发现我的在进入STOP模式的时候我调用了HAL_SuspendTick();,而你的没有调用,我把这个函数去了,发现无法进入STOP模式,这是为什么
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2020-2-25 17:28:01 | 显示全部楼层
ZHANGHAO 发表于 2020-2-25 17:07
我对比了下程序,发现我的在进入STOP模式的时候我调用了HAL_SuspendTick();,而你的没有调用,我把这个函 ...

不清楚你那里怎么回事。
回复

使用道具 举报

7

主题

30

回帖

51

积分

初级会员

积分
51
 楼主| 发表于 2020-2-26 09:50:31 | 显示全部楼层
eric2013 发表于 2020-2-25 17:28
不清楚你那里怎么回事。

使用LSI和LSE给Lptim,对定时时间有影响吗,我看到你还有很多例程用的全是LSE,而我用的LSI
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2020-2-26 10:17:34 | 显示全部楼层
ZHANGHAO 发表于 2020-2-26 09:50
使用LSI和LSE给Lptim,对定时时间有影响吗,我看到你还有很多例程用的全是LSE,而我用的LSI

1、没有很多,主要是LPTIM和LPUART。
2、LSI的温飘比较大,不适合用到RTC等场合。
3、LSE是32768,LSI的话,不同芯片不同,一般30K到40K。


回复

使用道具 举报

7

主题

30

回帖

51

积分

初级会员

积分
51
 楼主| 发表于 2020-2-26 13:15:29 | 显示全部楼层
eric2013 发表于 2020-2-26 10:17
1、没有很多,主要是LPTIM和LPUART。
2、LSI的温飘比较大,不适合用到RTC等场合。
3、LSE是32768,LSI ...

谢谢,我找到为什么定不了长时间的原因了,我一直把uint32_t Timeout,这个值增大,但是只能到FFFF,为什么只有4个F,32位不是8个F吗,我现在分频到1K,那要是定时一天,根本没法实现,你定时2分钟是怎么实现的,仅仅增加这个timeout值吗,还是怎么实现的
回复

使用道具 举报

7

主题

30

回帖

51

积分

初级会员

积分
51
 楼主| 发表于 2020-2-26 13:22:57 | 显示全部楼层
eric2013 发表于 2020-2-26 10:17
1、没有很多,主要是LPTIM和LPUART。
2、LSI的温飘比较大,不适合用到RTC等场合。
3、LSE是32768,LSI ...

那个一起的例程上定时的8秒,这个好实现,但是更长,怎么实现
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2020-2-26 13:30:06 | 显示全部楼层
ZHANGHAO 发表于 2020-2-26 13:22
那个一起的例程上定时的8秒,这个好实现,但是更长,怎么实现

设置分频。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 06:35 , Processed in 0.048297 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表