你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

请问,硬件I2C主发送器和主接收器的转换问题

[复制链接]
buyadong 提问时间:2017-11-4 02:38 /
         在一个项目中遇到一个问题,项目中使用的I2C是非标准的I2C,没有地址字节,现在的折中方案是,使用要发送的数据的首字节作为地址进行发送。已经能够通讯一两包。但当首字节的第0位为1时(例如0xE3),后续字节无法发出。         研究许久,现在只有一个问题需要确认:  STM32F1硬件I2C 当主发送器发送了一个最后一位为1的地址字节时,是否是硬件自动检测写到DR寄存器中的Address字节的第0位,然后自动切换成主发送器或者主接收器?  如果这个过程是自动的,有其他办法解决遇到的问题吗?或者有什么其他办法能够实现硬件I2C发送任意首字节的数组吗?

         下面是我抓包的数据,显示了这个情况:
          QQ截图20171104023126.png
           程序当中,使用HAL库中的
           HAL_I2C_Master_Transmit_IT(&h_I2c, (uint16_t)i2c_cmdlist[0], &i2c_cmdlist[1], bytes - 1);

           且在HAL库的stm32f1xx_hal_i2c.c文件中的 I2C_Master_SB 函数中部分内容,如下,

  1. /* 修改了这里,用以匹配要发送最后一个bit为1的情况 */
  2. #ifndef USE_NO_ADDR_ADJ
  3.      /* Send slave 7 Bits address */
  4.     if(hi2c->State == HAL_I2C_STATE_BUSY_TX)
  5.    {
  6.        hi2c->Instance->DR = I2C_7BIT_ADD_WRITE(hi2c->Devaddress);
  7.    }
  8.    else
  9.    {
  10.       hi2c->Instance->DR = I2C_7BIT_ADD_READ(hi2c->Devaddress);
  11.    }
  12. #else
  13.    hi2c->Instance->DR = hi2c->Devaddress;
  14. #endif
复制代码

收藏 1 评论3 发布时间:2017-11-4 02:38

举报

3个回答
buyadong 回答时间:2017-11-4 20:00:52
有人研究过吗?
wenyangzeng 回答时间:2017-11-28 09:31:02
建议你每发送1个字节后就发送停止位。
无薪税绵 回答时间:2017-11-28 11:38:18
它的地址码,会不会是0xFF?

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版