ctang 发表于 2017-9-28 14:45:01

求I2C从机代码

已经有I2C主机代码,无论硬件还是软件模拟的用起来都还可以。在这里求I2C从机的代码,硬件最好是用HAL库的,因为我用的是L0系列的板子。软件模拟的也可以。
下面是我现在勉强用的硬件I2C从机代码,有个问题是,RxBuffer只能接收到一个字节的,即使把接收长度修改成其他。用示波器看了时序什么的都是对的。
//    /*##-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){ };
}

MrJiu 发表于 2017-9-28 15:21:06

CubeMX不可以配置么?

ctang 发表于 2017-9-28 15:28:05

MrJiu 发表于 2017-9-28 15:21
CubeMX不可以配置么?

上面代码就是来自官方例程。CubeMX配置的,只有Init,没有例程详细。

斜阳__ 发表于 2017-9-28 16:34:16

帮顶   

MrJiu 发表于 2017-9-29 09:37:32

ctang 发表于 2017-9-28 15:28
上面代码就是来自官方例程。CubeMX配置的,只有Init,没有例程详细。

从机大家用的都不多,估计很难有!!!!

奏奏奏 发表于 2017-9-29 11:10:21

https://www.stmcu.org.cn/module/forum/thread-610058-1-1.html
请参考我之前发的分享贴子
因为用CubeMX配置的,很容易移植到L0系列上,有主机与从机的通讯源代码

ctang 发表于 2017-9-29 13:42:26

奏奏奏 发表于 2017-9-29 11:10
https://www.stmcu.org.cn/module/forum/thread-610058-1-1.html
请参考我之前发的分享贴子
因为用CubeMX配置的 ...

我下载了你的代码,看了下。里面是的I2C从机发送代码,一次发送一个字节的数据。

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

我目前用CubeMX还是官方例程,实验的结果是I2C从机只能接收到一次性一个字节,而且接收不到读写请求控制位。
页: [1]
查看完整版本: 求I2C从机代码