查看: 1030|回复: 1

[求助] 824 i2c pcf8563 驱动

[复制链接]

该用户从未签到

105

主题

190

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1367
最后登录
2024-12-31
发表于 2024-9-14 14:33:13 | 显示全部楼层 |阅读模式
成功搞定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个字节肯定是不对的。 ...
回复

使用道具 举报

  • TA的每日心情
    奋斗
    5 小时前
  • 签到天数: 2380 天

    连续签到: 89 天

    [LV.Master]伴坛终老

    84

    主题

    1万

    帖子

    3

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    22073
    最后登录
    2025-7-29
    发表于 2024-9-14 15:38:47 | 显示全部楼层
    从ST移植过来的要注意,他的地址参数是7位地址左移了一位的,如0x30的7位地址变成了0x60。

    再就是 uint8_t control[1]={0};uint8_t buf[1]={0};你只定义了1个字节,你发2个字节肯定是不对的。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-29 14:34 , Processed in 0.086633 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表