caizhiwei 发表于 2021-3-11 17:36

发现《hc32l13x_ddl_Rev1.9.2 Lite》驱动库RTC历程有一个BUG



   RTC的历程虽然简单,但是也发现了一个小bug. 打算做一个万年历的,发现注释和写进去的数值不对。



因为时间读出来是bcd的,读出来需要转换,写了一个接口分享给大家:
/*把bcd码转换成十进制 exp: 0x56 -> 56*/
static uint8_t bcd_to_dec(uint8_t bcd_num)                       
{
        return ((((bcd_num & 0xf0)>>4)*10) + (bcd_num&0x0f));
}


/**
*************************************************************************
** \brief : 年月日周为10进制,不需要转换
**
**
** \param 1 : stcReadTime, 保存时间结构体
**
** \retval :en_result_t                              
**************************************************************************/
en_result_t Rtc_ReadDateTime_dec(stc_rtc_time_t *pstcTimeDate)
{               
        Rtc_ReadDateTime(pstcTimeDate);       
        pstcTimeDate->u8Hour = bcd_to_dec(pstcTimeDate->u8Hour);
        pstcTimeDate->u8Minute = bcd_to_dec(pstcTimeDate->u8Minute);
        pstcTimeDate->u8Second = bcd_to_dec(pstcTimeDate->u8Second);
        return Ok;       
}


看了手册,说是可以自动计算每月的天数,闰年等。闰年这个接口怎么实现?这方面打算自己写几个接口。

caizhiwei 发表于 2021-3-11 17:43

更正后运行结果:
收←◆Date = 2021-5-6
Time = 23:59:59

收←◆Date = 2021-5-6
Time = 23:59:59

收←◆Date = 2021-5-6
Time = 23:59:59

收←◆Date = 2021-5-7
Time = 0:0:0

收←◆Date = 2021-5-7

caizhiwei 发表于 2021-3-11 17:59

突然发现楼主的截图中还有另外一个bug,大家要不要一起来找茬?哈哈

luhailiang 发表于 2021-3-11 18:04

我记得这种注释与代码不一致的地方挺多的,特别是时钟的设置那里

luhailiang 发表于 2021-3-11 18:15

caizhiwei 发表于 2021-3-11 17:59
突然发现楼主的截图中还有另外一个bug,大家要不要一起来找茬?哈哈

RtcInitStruct.rtcAmpm = RtcPm;                     //12小时制
明明是24小时。。。

真爱吴迪迪 发表于 2021-3-11 18:36

为什么你这么厉害,可以发现这个bug,我却没有发现呢?

caizhiwei 发表于 2021-3-11 19:32

luhailiang 发表于 2021-3-11 18:15
RtcInitStruct.rtcAmpm = RtcPm;                     //12小时制
明明是24小时。。。

亮哥,果然是牛啊

xyz549040622 发表于 2021-3-11 22:33

楼主看的很详细呀,支持一下。

caizhiwei 发表于 2021-3-12 08:41

xyz549040622 发表于 2021-3-11 22:33
楼主看的很详细呀,支持一下。

官方的库,烂得一塌糊涂,和ST相比差了一大截

martinhu 发表于 2021-3-12 10:11

本帖最后由 martinhu 于 2021-3-12 10:24 编辑

是楼主没看懂手册和例子,
用户手册说的很明确了,RTC用的是BCD码存储,比如0x19代表的就是19年,下一年就是0x20,代表20年,

建议楼主再读读手册和例子!!!

读取的时候也要按照BCD的方式去理解。不要翻译成十进制……



caizhiwei 发表于 2021-3-12 10:53

martinhu 发表于 2021-3-12 10:11
是楼主没看懂手册和例子,
用户手册说的很明确了,RTC用的是BCD码存储,比如0x19代表的就是19 ...

真是对你无语了,你是销售没有验证就没有发言权,时间至几个字写的清清楚楚,你没看到吗?
手册我反反复复看了很多遍的

caizhiwei 发表于 2021-3-12 10:54

martinhu 发表于 2021-3-12 10:11
是楼主没看懂手册和例子,
用户手册说的很明确了,RTC用的是BCD码存储,比如0x19代表的就是19 ...

建议你先把进制搞清楚,时分秒是bcd,年月日不是bcd,请看手册哦

martinhu 发表于 2021-3-12 11:09

caizhiwei 发表于 2021-3-12 10:54
建议你先把进制搞清楚,时分秒是bcd,年月日不是bcd,请看手册哦

请楼主认真读读这句,还说自己看过很多遍手册
请问谁在胡扯?????

caizhiwei 发表于 2021-3-12 11:19


十进制:

请网友看我框出来的有啥不同吗?搞技术的都懂,只有楼上的代理销售不懂,可悲啊,还私下多次让我删帖!!
私下让我删帖的都是小人。

caizhiwei 发表于 2021-3-12 11:22

华大能否做大做强,需要正视自己的错误;态度很重要;
话说,本帖子中,还有另一个bug,(12小时制);虽然是个小bug,但是你们华大承认不承认?是你们的态度问题。
已结贴

martinhu 发表于 2021-3-12 13:04

caizhiwei 发表于 2021-3-12 11:19
十进制:

请网友看我框出来的有啥不同吗?搞技术的都懂,只有楼上的代理销售不懂,可悲啊,还私下多次让 ...

这里的0:99,还是个位最多是9,十位最多是9,但是个位占bit0~3,十位占bit4~7,还是BCD码。
不信你用十进制往整个寄存器写个10看看,读出来是10年还是00年??
顺便说一下,我真不是销售,也不是代理,这论坛好多人都认识我。

caizhiwei 发表于 2021-3-12 13:18

martinhu 发表于 2021-3-12 13:04
这里的0:99,还是个位最多是9,十位最多是9,但是个位占bit0~3,十位占bit4~7,还是BCD码。
不信你用十 ...

我也懒得和你争了,浪费时间,你也别私信我删帖了。
对与错,真与假,它总在那里。

caizhiwei 发表于 2021-3-12 14:49

更新了,哈哈:
用了time.h中的结构体,很好用

caizhiwei 发表于 2021-3-12 14:51

66的,接下来要去研究RTC补偿了

YF22 发表于 2021-3-12 15:07

楼主可以先提升一下自己的技术能力,看不懂得可以积极提问,而不是觉得自己看不懂的就是错误的
页: [1] 2
查看完整版本: 发现《hc32l13x_ddl_Rev1.9.2 Lite》驱动库RTC历程有一个BUG