硬汉嵌入式论坛

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

[RTC] 使用FreeRTOS,单片机RTC就慢了

[复制链接]

2

主题

11

回帖

17

积分

新手上路

积分
17
发表于 2023-12-6 14:38:59 | 显示全部楼层 |阅读模式
项目使用单片机:STM32H743IIT6
实时操作系统:FreeRTOS
问题:RTC越走越慢,每小时差2分钟
尝试操作:
1. 裸板程序:每天大概慢5秒
2. 裸板程序:使用精密校准操作后,5天大概差2秒
3. 加上项目FreeRTOS后,每小时大概差2分钟
求助,是不是我某些地方没有理解对,或者哪些操作会将RTC暂停?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106856
QQ
发表于 2023-12-6 15:29:45 | 显示全部楼层
内置RTC是环境热的时候走的快,环境冷后走的慢。

你加入FreeRTOS,是不是功耗大了很多,可以测测,算是一个问题的方向,可以看看。

RTC是独立的硬件,不受FreeRTOS影响的。
回复

使用道具 举报

8

主题

43

回帖

67

积分

初级会员

积分
67
发表于 2023-12-6 17:21:05 | 显示全部楼层
spi 通讯使用DMA进行发送,裸机没有问题,但是加上os后,就会无法收发,但是在os的环境下,使用polling模式又是正常的!
回复

使用道具 举报

8

主题

43

回帖

67

积分

初级会员

积分
67
发表于 2023-12-6 17:22:28 | 显示全部楼层
spi + dma我使用的是硬汉的驱动,这种情况大概是哪里会有问题呢
回复

使用道具 举报

2

主题

11

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2023-12-6 17:51:06 | 显示全部楼层
eric2013 发表于 2023-12-6 15:29
内置RTC是环境热的时候走的快,环境冷后走的慢。

你加入FreeRTOS,是不是功耗大了很多,可以测测,算是 ...

现在发现规律每到第12分和29分的时候,分钟的参数不增加,很奇怪,打印的变量是直接从RTC获取上来直接打印的,还是有规律的   不理解,之前为了校准RTC加了这两句代码,在裸板测试很好用,加到项目代码就出现偏差了。代码如下:
        //        //校准rtc,实测每24H,快1s.调用Hal函数
    HAL_RTCEx_SetSmoothCalib(&hrtc, RTC_SMOOTHCALIB_PERIOD_32SEC, RTC_SMOOTHCALIB_PLUSPULSES_SET, 20);
//        //本地RTC跑的更快,所以这里需要调慢
    HAL_RTCEx_SetSynchroShift(&hrtc, RTC_SHIFTADD1S_SET, 500);
回复

使用道具 举报

2

主题

11

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2023-12-6 17:51:27 | 显示全部楼层
eric2013 发表于 2023-12-6 15:29
内置RTC是环境热的时候走的快,环境冷后走的慢。

你加入FreeRTOS,是不是功耗大了很多,可以测测,算是 ...

现在发现规律每到第12分和29分的时候,分钟的参数不增加,很奇怪,打印的变量是直接从RTC获取上来直接打印的,还是有规律的   不理解,之前为了校准RTC加了这两句代码,在裸板测试很好用,加到项目代码就出现偏差了。代码如下:
        //        //校准rtc,实测每24H,快1s.调用Hal函数
    HAL_RTCEx_SetSmoothCalib(&hrtc, RTC_SMOOTHCALIB_PERIOD_32SEC, RTC_SMOOTHCALIB_PLUSPULSES_SET, 20);
//        //本地RTC跑的更快,所以这里需要调慢
    HAL_RTCEx_SetSynchroShift(&hrtc, RTC_SHIFTADD1S_SET, 500);
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106856
QQ
发表于 2023-12-7 08:23:44 | 显示全部楼层
TRX 发表于 2023-12-6 17:22
spi + dma我使用的是硬汉的驱动,这种情况大概是哪里会有问题呢

OS工程里面main函数里面先不开启OS,直接测试这个SPI DMA正常不。

正常后,再仅开启1个任务测试下。

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106856
QQ
发表于 2023-12-7 08:26:58 | 显示全部楼层
凡凡的草稿本 发表于 2023-12-6 17:51
现在发现规律每到第12分和29分的时候,分钟的参数不增加,很奇怪,打印的变量是直接从RTC获取上来直接打 ...

1、这个问题注意了吧。你应该注意了,要不裸机程序也会不正常。
使用STM32H7的RTC依然要先读时间,再读日期,这个老毛病在F4上就有
https://www.armbbs.cn/forum.php?mod=viewthread&tid=89912

2、先不做校准,这种方式测试正常不。



回复

使用道具 举报

3

主题

49

回帖

58

积分

初级会员

积分
58
发表于 2023-12-7 09:33:06 | 显示全部楼层
凡凡的草稿本 发表于 2023-12-6 17:51
现在发现规律每到第12分和29分的时候,分钟的参数不增加,很奇怪,打印的变量是直接从RTC获取上来直接打 ...

手册中有说,必须在获取时间后获取一下日期,才能解锁时间值!
Snipaste_2023-12-07_09-32-50.png
回复

使用道具 举报

8

主题

43

回帖

67

积分

初级会员

积分
67
发表于 2024-1-13 14:04:18 | 显示全部楼层
eric2013 发表于 2023-12-7 08:23
OS工程里面main函数里面先不开启OS,直接测试这个SPI DMA正常不。

正常后,再仅开启1个任务测试下。

最后尝试下来,发现是LVGL的控件内存给的不够了,将内存翻倍后到128k后,一切功能正常了,但是还是不清楚为什么会引起这样的问题
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106856
QQ
发表于 2024-1-14 10:04:05 | 显示全部楼层
TRX 发表于 2024-1-13 14:04
最后尝试下来,发现是LVGL的控件内存给的不够了,将内存翻倍后到128k后,一切功能正常了,但是还是不清楚 ...

不排除程序里面有其它潜在bug。
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2024-2-20 13:00:52 | 显示全部楼层
如果想时间准确,直接外挂一个RTC
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 20:28 , Processed in 0.325994 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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