在一个项目中遇到一个问题,项目中使用的I2C是非标准的I2C,没有地址字节,现在的折中方案是,使用要发送的数据的首字节作为地址进行发送。已经能够通讯一两包。但当首字节的第0位为1时(例如0xE3),后续字节无法发出。 研究许久,现在只有一个问题需要确认: STM32F1硬件I2C 当主发送器发送了一个最后一位为1的地址字节时,是否是硬件自动检测写到DR寄存器中的Address字节的第0位,然后自动切换成主发送器或者主接收器? 如果这个过程是自动的,有其他办法解决遇到的问题吗?或者有什么其他办法能够实现硬件I2C发送任意首字节的数组吗? 下面是我抓包的数据,显示了这个情况: 程序当中,使用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个字节后就发送停止位。 |
它的地址码,会不会是0xFF? |