求I2C从机代码

2019-08-13 21:06发布

已经有I2C主机代码,无论硬件还是软件模拟的用起来都还可以。在这里求I2C从机的代码,硬件最好是用HAL库的,因为我用的是L0系列的板子。软件模拟的也可以。
下面是我现在勉强用的硬件I2C从机代码,有个问题是,RxBuffer只能接收到一个字节的,即使把接收长度修改成其他。用示波器看了时序什么的都是对的。
我目前用CubeMX还是官方例程,实验的结果是I2C从机只能接收到一次性一个字节,而且接收不到读写请求控制位。





想要解决的问题是:I2C从机接收代码,接收主机发来的是读请求还是写请求,接收主机连续发送多个字节数据。


[mw_shl_code=c,true]//    /*##-2- Slave receive request from master ################################*/
    while(HAL_I2C_Slave_Receive_IT(&hi2c1, (uint8_t*)&bTransferRequest, 1)!= HAL_OK){ }
   
    while (HAL_I2C_GetState(&hi2c1) != HAL_I2C_STATE_READY)
    {                /* Refresh IWDG: reload counter */
      if(HAL_IWDG_Refresh(&hiwdg) != HAL_OK)
      {
        /* Refresh Error */
      }
    }

    /* If master request write operation #####################################*/
    if (bTransferRequest == MASTER_REQ_WRITE)
    {
      /*##-3- Slave receive number of data to be read ########################*/
      while(HAL_I2C_Slave_Receive_IT(&hi2c1, (uint8_t*)®Address, 1)!= HAL_OK);      
      while (HAL_I2C_GetState(&hi2c1) != HAL_I2C_STATE_READY){ };
      
      /*##-4- Slave receives aRxBuffer from master ###########################*/
      while(HAL_I2C_Slave_Receive_IT(&hi2c1, (uint8_t*)aRxBuffer, 1)!= HAL_OK);
      while (HAL_I2C_GetState(&hi2c1) != HAL_I2C_STATE_READY){ };
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。