IIC的按键板

代码:soft_check_self的时候主动发送也就是去读IIC读0X8F,返回值如果是154那就是好的按键板

uint8_t cy3116_verification( void )
{
    uint8_t id =0;
    
    cy3116_read(tranPort,DEVICE_ADDR<<1,0x8f ,&id , 1);
    
    if( id != 154)
    {
        return FALSE;
    }
    
    return TRUE;
}

看datasheet:

 

继续看IIC函数:

 cy3116_read(tranPort,DEVICE_ADDR<<1,0x8f ,&id , 1);

static uint8_t cy3116_read(void* port,uint8_t slaveAdr,uint16_t subAdr,uint8_t *buff,uint16_t bufLen)

第一个参数是:指定STM32里面的哪一路IIC的

第二个参数是:器件的地址#define DEVICE_ADDR               (0x37u)//-----------------------------U代表无符号整数

为什么<<1?

第三个参数是:器件内部的地址,已经知道了ID号是0x8f

后面2个是一个数组。

 

现在分析问题2

参考以前的代码:

 _I2C_send_byte((__HTK_DEVICE_ADDR<<1)|0) )         // 发送器件地址+写命令

 _I2C_send_byte((__HTK_DEVICE_ADDR<<1)|1) )         // 发送器件地址+读命令

所以你明白了  这个器件和以前的是读写是反的!!!!

 

那么最后一个问题是:地址怎么确定的?

找了这个 默认值的地方 55就是0x37吧

 

 

 

看看

void touch_key_config( void )
{
    uint8_t saveCmd = 0x02;
    uint8_t resert = 0xFF;

    if( cy3116_verification() != TRUE)
    {
        log_err("触摸芯片加载错误\n");
        return;
    }
    HAL_IWDG_Refresh(&hiwdg);
    cy3116_write(tranPort , DEVICE_ADDR ,0x00,CY8CMBR3116_config,128);
    sys_delay(100);
    HAL_IWDG_Refresh(&hiwdg);
    cy3116_write(tranPort , DEVICE_ADDR ,0x86,&saveCmd,1);
    sys_delay(100);
    HAL_IWDG_Refresh(&hiwdg);
    cy3116_write(tranPort , DEVICE_ADDR ,0x86,&resert,1);
    sys_delay(100);
    HAL_IWDG_Refresh(&hiwdg);
}

    cy3116_write(tranPort , DEVICE_ADDR ,0x00,CY8CMBR3116_config,128);
    cy3116_write(tranPort , DEVICE_ADDR ,0x86,&saveCmd,1);

写了很多信息进去。地址看上面的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值