wanyisq 发表于 2018-8-30 08:47:30

STM8L RTC计时的问题

我在使用STM8L做内部RTC做时钟的时候,发现了一个问题。时钟计时计到了超过24时。昨天下午我设置了一个初始时间,今天早上8:19的时候读取STM8内部RTC时间显示的是 2018.8.2932:19:05时间计时到了32时,RTC不应该是满24,自动切换的吗

す疯Ⅱ恒す 发表于 2018-8-30 09:18:48

估计是BCD码的问题,切换一下应该就可以了。

wudianjun2001 发表于 2018-8-30 09:22:59

估计是压缩BCD码的处理问题,这个注意处理一下

wanyisq 发表于 2018-8-30 09:39:59

楼上两位,请说具体一点。意思是格式选择BCD就可以避免还是需要注意其他什么。该怎么处理

andeyqi 发表于 2018-8-30 13:17:50

BCD码(Binary-Coded Decimal‎)亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。按照这个这个规则32对应的是20点。以下是标准库的转换源码。
02741 /**
02742   * @briefConvert from 2 digit BCD to Binary.
02743   * @paramValue: BCD value to be converted.
02744   * @retval Converted word
02745   */
02746 static uint8_t RTC_Bcd2ToByte(uint8_t Value)
02747 {
02748   uint8_t tmp = 0;
02749   tmp = ((uint8_t)(Value & (uint8_t)0xF0) >> (uint8_t)0x4) * 10;
02750   return (tmp + (Value & (uint8_t)0x0F));
02751 }


iyumi 发表于 2018-8-30 15:13:06

学习了

feixiang20 发表于 2018-8-31 01:15:51

bcd码也叫8421码就是将十进制的数以8421的形式展开成二进制,大家知道十进制是0~9十个数组成,这十个数每个数都有自己的8421码:  0=0000   1=0001   2=0010   3=0011   4=0100   5=0101   6=0110   7=0111   8=1000   9=1001
所以24的bcd码为:0010 0100

wanyisq 发表于 2018-8-31 09:04:42

谢谢大家 我查了代码我是选了BIN格式的RTC 出的这个问题   而且当时的32时是 早上8点

lynnlbf 发表于 2019-7-17 21:34:11

wanyisq 发表于 2018-8-31 09:04
谢谢大家 我查了代码我是选了BIN格式的RTC 出的这个问题   而且当时的32时是 早上8点 ...

您好!请问您是怎么设置BIN格式和BCD格式的?datasheet上好像写的都是BCD格式。

lynnlbf 发表于 2019-7-17 21:36:07

wanyisq 发表于 2018-8-31 09:04
谢谢大家 我查了代码我是选了BIN格式的RTC 出的这个问题   而且当时的32时是 早上8点 ...

我碰到的问题和你的是一样,也是早上8点变32点,不知道如何设置,请赐教,谢谢!
页: [1]
查看完整版本: STM8L RTC计时的问题