作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将 STM32F030RCT6 与 CubeMX 一起使用。设备是一个数据记录器,RTC 是不能失败的主要部分。在 Errata Sheet有一些关于 RTC 影子寄存器的东西。
我将CubeMX设置为不生成MX_RTC_Init()
函数,目前运行正常。 (我正在使用 LSE)
我需要根据 GSM 时间更新时间/日期,但是当我使用 HAL_SetDate()
将年份设置为 18 并在一小段延迟后我使用 HAL_GetDate()
,sDate.Year
给了我 20。除了Year
,其他值都是正确的。
我尝试过的:
HAL_GetDate
,然后是 HAL_SetDate
我没有任何进展,事情甚至变得更糟,例如 Month
= 56,Day
= 45 等
提前致谢。最好的问候。
最佳答案
WeekDay
必须设置为 0 到 7 之间的值我遇到了同样的问题。我发现问题是:未将值设置为 WeekDay
。在函数作用域中创建结构 RTC_DateTypeDef
时,字段 WeekDay
会获得一个随机值。我发现:值WeekDay
必须设置为0到7之间的值,如果超出这个范围,它可以改变年份。
在函数HAL_RTC_SetDate
中设置日期的代码:
if (Format == RTC_FORMAT_BIN)
{
assert_param(IS_RTC_YEAR(sDate->Year));
assert_param(IS_RTC_MONTH(sDate->Month));
assert_param(IS_RTC_DATE(sDate->Date));
datetmpreg = (((uint32_t)RTC_ByteToBcd2(sDate->Year) << 16U) | \
((uint32_t)RTC_ByteToBcd2(sDate->Month) << 8U) | \
((uint32_t)RTC_ByteToBcd2(sDate->Date)) | \
((uint32_t)sDate->WeekDay << 13U));
}
else
{
assert_param(IS_RTC_YEAR(RTC_Bcd2ToByte(sDate->Year)));
assert_param(IS_RTC_MONTH(RTC_Bcd2ToByte(sDate->Month)));
assert_param(IS_RTC_DATE(RTC_Bcd2ToByte(sDate->Date)));
datetmpreg = ((((uint32_t)sDate->Year) << 16U) | \
(((uint32_t)sDate->Month) << 8U) | \
((uint32_t)sDate->Date) | \
(((uint32_t)sDate->WeekDay) << 13U));
}
Date
占用0-7位(8位):两位BCD数字。Month
占用bits 8-12(5位):两个BCD数字,但左边的数字可以只有 0 或 1 -> 5 位就足够了。WeekDay
占用bits 13-15(3 bits):一个BCD数字,取值范围1-7 -> 3 bits就够了。Year
占用 16-24 位(9 位)。当 WeekDay
大于 7 时,MSB 为 1 并且与 Year
的 LSB 重叠并且可以更改它(如果 LSB 为 0)。
关于stm32 - HAL_SetDate 将年份设置为错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49264383/
我将 STM32F030RCT6 与 CubeMX 一起使用。设备是一个数据记录器,RTC 是不能失败的主要部分。在 Errata Sheet有一些关于 RTC 影子寄存器的东西。 我将CubeMX设
我是一名优秀的程序员,十分优秀!