[STM8] stm8l i2c addr问题

[复制链接]
4869|7
 楼主| wojiademao 发表于 2011-3-16 23:22 | 显示全部楼层 |阅读模式
我用STM8L I2C通讯,起始位能正常发送,能读取SB标志位,但发送器件地址后,在寄存器上能看到ADDR和TXE都置位了(表明已发送成功并收到正确应答),但去读这个标志时,只能读到TXE为1,ADDR为0了,不知道为什么?请大虾帮忙,谢谢!
香水城 发表于 2011-3-17 18:15 | 显示全部楼层
要看你怎么读了?

请看STM8参考手册,先后读出SR1和SR3寄存器后,ADDR位被自动清除。你在调试器上看到时,调试器已经执行了读出操作,这样当然随后你的程序就读不到了。
 楼主| wojiademao 发表于 2011-3-17 23:20 | 显示全部楼层
谢谢香主!
    再请教一个问题:I2C在通信时,这时BUSY=1,如果我这时不发停止位想停止通信,就用了swrst复位I2C,然后再初始化I2C,再通信,不知道这种方式是否推荐?(我试过这种方式,但感觉起始位会发送不成功)
香水城 发表于 2011-3-18 10:30 | 显示全部楼层
不推荐
hsbjb 发表于 2011-3-18 11:08 | 显示全部楼层
不推荐楼主用这种方式
 楼主| wojiademao 发表于 2011-3-18 14:07 | 显示全部楼层
那如果busy一直为1,那只能通过复位MCU来解决问题了?
swrst功能不是没啥作用了?
谢谢!
香水城 发表于 2011-3-18 14:27 | 显示全部楼层
busy一直为1的原因很多,如果是外部I2C设备造成,你复位MCU也没有用。
yang521sq 发表于 2013-6-11 22:27 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

27

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部