打印

stm32 i2c 400k中断方式的问题

[复制链接]
4594|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
haov000|  楼主 | 2011-9-19 10:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
stm32 i2c采用中断方式接收发送,在实现接收时是按照发送起始+从器件地址+从器件内部寄存器地址+重新发送起始+从器件地址+接收数据实现的,就是标准的i2c从器件的接收方式,但是用在400Khz的时候,i2c的接收总是一次正确一次错误,依次循环,但是当我改成100kh或者是其他频率的时候就能总是接收正确,不知道有没有人遇到过,还请香主或高人解答,谢谢!
沙发
香水城| | 2011-9-19 16:02 | 只看该作者
I2C为400kHz时,PCLK1的频率需要时10MHz的整数倍,没有特殊需要不要使用400kHz的频率。

STM32_I2C_400KHz.GIF (20.79 KB )

STM32_I2C_400KHz.GIF

使用特权

评论回复
板凳
airwill| | 2011-9-20 11:34 | 只看该作者
奇怪了.
I2C 协议对频率的要求, 没有精度上的要求, 因为设备都是在 SCK 上升沿就开始发送数据, SCK  的下降沿锁存数据的(边沿触发类型).
为啥要这么高的精度, 为啥要 10Mhz 的整数倍呢?

使用特权

评论回复
地板
haov000|  楼主 | 2011-9-20 16:05 | 只看该作者
2# 香水城
这个问题解决了,是因为在接收的最后多产生了一次停止条件,但是现在把多了的那个停止条件去了之后,400khz的可以正常接收,但是在更改频率的时候有的可以有的不可以,由于我使用了i2c的标准接收模式,从stm32勘误手册中得知,在产生重复起始条件时,频率只能在400khz或者是低于88khz,但是低于88khz的我试验着有些可以有些不可以,而且大部分是不行的,不知道是什么原因,还请香主解释一下,我是用的i2c的中断方式

使用特权

评论回复
5
haov000|  楼主 | 2011-9-20 16:06 | 只看该作者
3# airwill
我也是有此疑问,不知道什么原因,但是我现在试验着不是10M的整数倍也可以

使用特权

评论回复
6
haov000|  楼主 | 2011-9-23 13:56 | 只看该作者
问题找到了,是因为在产生起始条件后还会不断的进入中断I2C_EVENT_MASTER_BYTE_TRANSMITTED,有时还会进入0x00030000,需要在进入中断后做额外的处理

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

132

帖子

1

粉丝