[原创] stm32 i2c控制io扩展芯片tca6416a验证

gaofeisz_sibet   2013-3-14 16:16 楼主
cpu:stm32f103cbt6
io扩展芯片:tca6416a
接口:i2c

论坛上对stm32硬件i2c的讨论很多,原因是stm32硬件i2c设计比较复杂,程序调试容易出错。
读tca6416a输入口状态类似读EEPROM,所以刚开始参考读EEPROM的代码,调试总是死在下面这个地方:
  1. /* Send TCA6416A address for write  */
  2. I2C_Send7bitAddress(I2C1, TCA6416A_ADDR, I2C_Direction_Transmitter);
  3. /* Test on EV6 and clear it */
  4. while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
跟论坛上很多人一样,折腾久了放弃硬件i2c,转向模拟i2c。
模拟i2c代码比较容易,看时序图写即可,可是调试始终出不来结果,master发送数据后得不到slave的应答,郁闷,怀疑硬件有问题。
检查芯片引脚是否虚焊,一切OK;
SCL、SDA需要加上拉电阻也注意了,加的10K的上拉电阻;
最后检查出的问题是:SDA的上拉电阻测出来2M,明明是103电阻,为啥测的是2M?没焊接好还是焊接坏了,不知道。
换了一个10K的电阻焊接上,模拟i2c测试OK。
不甘心用模拟i2c,还得试试硬件i2c,又花了半天时间,调调时钟频率及i2c速率,终于调试通过了。

遗留问题:
代码里有串口发送部分,当stm32里跑该程序的时候,下次debug调试的时候,点击调试按钮后,还没点击运行按钮,串口会自动发送0x00,
仅仅在点击调试按钮后或Download代码时串口会自动发送0x00,其它时候没出现这种情况,为什么?


[ 本帖最后由 gaofeisz_sibet 于 2013-3-14 16:21 编辑 ]

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复