完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在使用STM32F103的I2C去读取AT24C08,用一下代码,循环执行OK的,但是单步调试就不能读到我想要的数据。
请问在收到EV6并清除以后,STM32是发送2次9个时钟呢还是1次呢? 程序代码如下: /* Send STRAT condition a second time */ I2C_GenerateSTART(I2C2, ENABLE); /* Test on EV5 and clear it */ while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT)); /* Send EEPROM address for read */ I2C_Send7bitAddress(I2C2, EEPROM_ADDRESS, I2C_Direction_Receiver); /* Test on EV6 and clear it */ while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)); 我用示波器去看,执行到这一步的时候会读到2个数据 总18个时钟。即便我只需要读一个8字节的数据,都会跳出来18个时钟。是什么问题呢? |
|
相关推荐
7个回答
|
|
官方3.5库中I2C直接有这个程序(支持24C02一直到24C64),建议你可以研究一下,库中的我产品中用过了,没问题。
|
|
|
|
可以先研究下库中的历程
|
|
|
|
这个问题我曾遇到过,楼主的硬件上拉电阻是多少?4.7K吗?
IIC库这个函数有些奇怪的。特别是判断输入事件,因为程序要读取状态寄存器的,所以会出现问题。 ST的I2C_EE库的出现可能是为了弥补这个问题,不过它牺牲了最高优先级,在多中断中不太好用。 为了保证IIC通信稳定性,在大多数情况下,会优先采用软件模拟方式。 |
|
|
|
如果可以调试的话,最好用uart打印出来,你如果单步调试有问题很有可能是因为时序打乱了。
|
|
|
|
移植下库中的历程比较好
|
|
|
|
一般我的I2C采用的是模拟的方式,硬件的好像总是死在while循环中
|
|
|
|
经测试,STM32的I2C需要采用模拟方式。硬件库的I2C遇到中断就会死掉。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1020 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
996 浏览 2 评论
2102 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1202 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1621 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 15:07 , Processed in 0.803083 second(s), Total 85, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号