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

请问,硬件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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版