在线时间227 小时
UID261364
注册时间2020-5-12
NXP金币0
该用户从未签到
金牌会员
 
- 积分
- 1367
- 最后登录
- 2024-12-31
|
成功搞定sht30后下一个8563,根据上面的方法先上最基本的驱动来自stm32,已经验证
void PCF8563_IIC_Write(UBYTE reg,UBYTE data)
{
uint8_t control[2]={0};
control[0] = reg;
control[1] = data;
HAL_I2C_Master_Transmit(&hi2c1,I2C_Addr, control,2,100);//注意这里是control后面是2
HAL_Delay(10);
}
UBYTE PCF8563_IIC_Read(UBYTE reg)
{
uint8_t control[1]={0};
control[0] = reg;
HAL_I2C_Master_Transmit(&hi2c1,I2C_Addr, control,1,100);//注意这里是control后面是1
uint8_t buf[1]={0};
HAL_I2C_Master_Receive(&hi2c1,I2C_Addr|0x01,buf,1,1000);
return buf[0];
}
使用824的驱动替换为如下,移魂大法
void PCF8563_IIC_Write(UBYTE reg,UBYTE data)
{
uint8_t control[2]={0};
control[0] = reg;
control[1] = data;
SetupXferRecAndExecute(I2C_Addr,control,3,NULL,0);//注意这里是control后面是3
myDelay(10);
}
//------------------------------------------------------------------//
UBYTE PCF8563_IIC_Read(UBYTE reg)
{
uint8_t control[1]={0};
uint8_t buf[1]={0};
control[0] = reg;
SetupXferRecAndExecute(I2C_Addr,control,2,NULL,0);
SetupXferRecAndExecute(I2C_Addr|0x01,buf,2,NULL,0);//注意这里是control后面是2
return buf[0];
}
上面的操作在sht30上面没有遇到问题,顺利读出数据,但是这次对8563没有起作用,我使用8563输出1HZ,来验证写是否正确
输出一直没有改变,意味着写失败,我为什莫把control后面+1,是发现824的驱动和32的参数意义好像有点区别,8563失败会不会是
芯片地址7位,还是8位的原因,请大侠拔刀,多谢
最佳答案
从ST移植过来的要注意,他的地址参数是7位地址左移了一位的,如0x30的7位地址变成了0x60。
再就是 uint8_t control[1]={0};uint8_t buf[1]={0};你只定义了1个字节,你发2个字节肯定是不对的。 ...
|
|