开源,STM32口线模拟I2C程序

2019-12-31 19:20发布

<p> 在STM32的I2C上摔了一跤,测试了官方提供的几个例程和库,都有不同缺陷,也无法弥补:</p><br><p> 1、查询方式,在连续读数据的过程中不能中断</p><br><p> 2、DMA方式类似,在同一DMA中I2C的级别必须最高,否则同1.</p><br><p> 3、中断方式也不能有更高优先级中断I2C,否则同1.</p><br><p> 鉴于以上原因,无奈的口线模拟了I2C。(仅仅代表个人看法,欢迎指正)</p><br><p> 附件中的项目文件已经过测试,为感谢OUR这几年的帮助,先开源这个小程序。</p><br><p>链接:&nbsp;https://pan.baidu.com/s/1by6r7jLqoLJuGR8bl6Sk4A&nbsp;提取码:&nbsp;jfkn&nbsp;复制这段内容后打开百度 {MOD}手机App,操作更方便哦</p><p><br></p>
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
96条回答
ground
1楼-- · 2020-01-01 14:43
用口线模拟就是为了防止连读或连写的时候出现错误。DMA和中断是不能用了,但是提高了可靠性。
做产品嘛,还是可靠至上,再说I2C没必要很好的实时性。
clever0725
2楼-- · 2020-01-01 20:31
liujun6037
3楼-- · 2020-01-01 21:38
STM32的IIC确实麻烦,最近做毕业设计的时候,搞了两天,硬件IIC可以读24C16和CD3315可就是读写不了TEA5767,那个郁闷啊!(毕业设计要交了,急)。无奈第三天开始自己模拟IIC....
ma9801
4楼-- · 2020-01-02 00:11
 精彩回答 2  元偷偷看……
bowei181
5楼-- · 2020-01-02 00:53
感觉还是用IO模拟的好用,移植性也好。
hcdragon
6楼-- · 2020-01-02 04:12
在页写的时候应该是有bug的,如果写入的地址不是页开始,那么,
    NumOfPage   =  length / I2C_PageSize;     //要写入的页数
    NumOfSingle =  length % I2C_PageSize;     //不足一页的个数
这个判断就是不正确的。

如I2C_PageSize=8,WriteAddress=6,length=4,就会执行到
      if(NumOfPage== 0)   //数据小于一页
      {
        I2C_BufferWrite(pBuffer,NumOfSingle,WriteAddress,DeviceAddress);   //写少于一页的数据
      }
此时,NumOfSingle=4,即从地址6连续写入4个字节,超过页大小了。

一周热门 更多>