你好,从代码和输出的时间格式来看,这个错乱问题大概率出在数据读写的位序/格式匹配和初始化时序上,分享两个排查方向:
1. 数据格式与位序问题
DS1302是BCD码存储时间(比如“年”存的是0x25而不是十进制25),如果代码里直接把读取到的字节转成十进制输出,就会出现“2055”(0x55转十进制)这类异常值。建议加BCD转十进制的函数
2. 初始化与时序延迟
DS1302的CE、SCLK引脚初始化后,建议在读写前加1-2us的延迟(STM32主频高,可能时序过快导致通信错误)。另外检查 DS1302_CE_PIN 的电平切换逻辑:读写时CE必须先置高,完成后再置低。