最近一个项目RTC时钟用的DS3231M+这一款,但是在写驱动的时候遇到一点问题,导致读取的值完全不可用,硬件是h743,用的硬件I2C,上拉电阻已经配置了,读取部分的代码如下
[C] 纯文本查看 复制代码 #define I2C_PORT hi2c1
#define DS3231_ADDRESS 0xD0
#define Control_RES 0xE0
#define Second_RES 0x00
uint8_t DS3231ReadByte(uint8_t resaddr)
{
uint8_t data;
HAL_I2C_Mem_Read(&I2C_PORT, DS3231_ADDRESS, resaddr, I2C_MEMADD_SIZE_8BIT, &data, 1, HAL_MAX_DELAY);
return data;
}
void DS3231Write(uint8_t resaddr, uint8_t data)
{
HAL_I2C_Mem_Write(&I2C_PORT, DS3231_ADDRESS, resaddr, I2C_MEMADD_SIZE_8BIT, &data, 1, HAL_MAX_DELAY);
}
uint8_t BCD2HEX(uint8_t value)
{
return ((value >> 4) * 10) + (value & 0x0f);
}
uint8_t HEX2BCD(uint8_t value)
{
return (((value % 100) / 10) << 4) | (value % 10);
}
DS3231_Init(void)
{
uint8_t init_value = 0x00;
DS3231Write(Control_RES, init_value);
}
uint8_t DS3231_GetSecond(void)
{
return(BCD2HEX(DS3231ReadByte(Second_RES)));
}
这里是用秒的获取来当案例,但是当我把DS3231_GetSecond获取到的值打印出来的时候,不是0就是1,完全没有按照时间规律递增。
不知道我是哪里写错了,望大大指点
|