新手入门
- 积分
- 14
- 金钱
- 14
- 注册时间
- 2018-5-25
- 在线时间
- 0 小时
|
1金钱
[mw_shl_code=applescript,true]void I2C_Slave_Achieve(void)
{
//初始化数据变量的数量
hTxNumData = 0;
hRxNumData = 0;
BSP_LED_On(LED3); //亮灯
//从机接收来自主机的请求
// HAL_I2C_Slave_Receive_IT里的三个参数:
// @param hi2c:指向包含指定I2C的配置信息的I2C_HandleTypeDef结构的指针。
// @param pData:指向数据缓冲区的指针
// @param Size:要发送的数据量
while(HAL_I2C_Slave_Receive_IT(&I2CxHandle, (uint8_t*)&bTransferRequest, 1)!= HAL_OK)
{
BSP_LED_Off(LED3); //=======我都还没请求数据,程序好像也不会进来这里灭灯
}
/*在开始新的通信传输之前,需要检查外设的当前状态;
如果它很忙,则需要等待当前传输的结束才能启动新传输。
为简单起见,此示例仅等待传输结束
但应用程序可能在传输操作正在进行时执行其他任务。*/
while(HAL_I2C_GetState(&I2CxHandle) != HAL_I2C_STATE_READY)
{
}
//主机请求读操作
//从机接收要写入的数据的数量
while(HAL_I2C_Slave_Receive_IT(&I2CxHandle, (uint8_t*)&hTxNumData, 2)!= HAL_OK);
//忙等待
while(HAL_I2C_GetState(&I2CxHandle) != HAL_I2C_STATE_READY)
{
}
//从机将aTxBuffer发送给主机
while(HAL_I2C_Slave_Transmit_IT(&I2CxHandle, (uint8_t*)aTxBuffer, RXBUFFERSIZE)!= HAL_OK);
while(HAL_I2C_GetState(&I2CxHandle) != HAL_I2C_STATE_READY)
{
}
}[/mw_shl_code]
设计的STM32L053作为I2C从机,当其他主机请求时,判断所请求的寄存器地址,再发送相应的数据个主机。
参考的是官方的例程,有个疑问,就是为什么从机响应时,没有判断寄存器地址呢?那这样我该如何判断所请求的是哪个数据呢?
|
|