Air001单片机I2C从机通信这样成功了?

注意:我们说的是从机问题

背景

众所周知,AIR001的I2C从机到现在一直没有解决。但是这个单片机便宜,在一些要求不是很高的情况下,这个单片机很合适,但是I2C通信无法正常使用,是一个头大的问题。在github和论坛里面都有相关的讨论,但是一直不得其姐。

KEIL

arduino环境下面,肯定是不得行的,于是想转战KEIL用HAL库来看看是否可行,但是也就是获取一次地址然后卡死,看了很多BLOG说应该是卡死在那里了,原因知道但是无法解决嘛。

  • 贼心不死,今天又准备在KEIL上寻求进展,误打误撞,本来应该写发送中断,写成了错误中断,然后就获取了地址,再次获取,又成功了。多次获取么有问题。
  • 读取值,也成功了。多次读取也没有问题。因为我把发送中断的内容写到了错误中断里面。也没有出现网上说的多次通信之后还是会卡死的问题,freq=100kHz。
  • 如果把接收中断也放到里面,是不是可以同时发送和接收呢?没试。
int x=0;
void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c)
{
	BSP_LED_Toggle(0);
	aTxBuffer[0]=x>>8;
	aTxBuffer[1]=x&0xFF;
	x++;
	HAL_I2C_Slave_Transmit_IT(&I2cHandle, (uint8_t *)aTxBuffer, DARA_LENGTH);
}

错误分析

  • 确实就是这I2C有问题,所以硬件触发了错误回调,错误回调正常执行,主机就能正常获取地址。
  • 而在回调里面发送数据,主机就可以正常读取数据。
  • 但是正常应该是发送回调和接收回调函数分别响应发送和接收,这里只有错误回调,就不知道主机的意图,发送和接收就比较混乱。
  • 通过以上方法可以实现通信,比如就是简单的从机根据主机需求返回数据,但是没有真正解决这个问题。

如果你有更好的解决方案,感谢你告诉我。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值