已经有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){ };
- }
复制代码
|
上面代码就是来自官方例程。CubeMX配置的,只有Init,没有例程详细。
从机大家用的都不多,估计很难有!!!!
请参考我之前发的分享贴子
因为用CubeMX配置的,很容易移植到L0系列上,有主机与从机的通讯源代码
评分
查看全部评分
我下载了你的代码,看了下。里面是的I2C从机发送代码,一次发送一个字节的数据。
但我想要解决的问题是:I2C从机接收代码,接收主机发来的是读请求还是写请求,接收主机连续发送多个字节数据。
我目前用CubeMX还是官方例程,实验的结果是I2C从机只能接收到一次性一个字节,而且接收不到读写请求控制位。