zoukankan      html  css  js  c++  java
  • 关于stm32的iic为什么不稳定的讨论


    stm32的iic不稳定这种说法源于旧版的函数库,由于iic本身是飞利浦发明的,飞利浦拆分出来的nxp具有绝对的专利优势,为了规避这种专利问题,st对iic通讯有别出一格的设计,但旧版的函数库无法很好地处理这种设计,导致多中断的时候容易出问题。但新版的hal库基本解决这种问题,可以放心使用。

    没有不稳定这个说法,只是硬件I2C通信困难,因为STM32没有I2C协议的专利,一些技术细节与官方的I2C协议有所出入,因此做得很难用的样子,以防被对手控告侵权。

    这个硬件的IIC是没有问题的,只是ST的标准库去操作IIC有bug导致不稳定

    原来使用过硬件的IIC,非常不稳定,而且读取数据也有乱码,网上反馈是硬件的bug

    这个是STM32的一bai个bug。它只在特定的一小段时间内读外设的ACK信号,一旦错过了ack信号,后面所有的shu时序都乱了。ST建议所有涉及I2C的程序都采用DMA方式。

    加点针对性的bai的代码就可以了
    1.比如为了防止错过Ack信号的读取,可以加入循环发送并读Ack的步骤,也可以直接关中断,如果有资源用DMA最好了,收发数据以及标志位的相关处理和判断都自动处理。
    2.还有就是调试过程中,如果断点设在等待Ack前,会清除Ack信号
    ADDR: Address sent (master mode)/matched (slave mode)
    This bit is cleared by software reading SR1 register followed reading SR2
    Ack信号会在读SR1和SR2后被清除。调试器会读取SR1和SR2,所以设断点在等待Ack前会导致程序检测不到Ack信号

    一:不要用库,每一段START->ACK尽量写短,写简洁!
    二:降低I2C速度!我测试在10KHZ时很稳定,20KHZ非常少,不稳定,50KHZ几乎不稳定


    REF

    https://zhuanlan.zhihu.com/p/338377414
    https://www.icxbk.com/ask/detail/14916.html
    https://blog.csdn.net/whw8007/article/details/9162779



  • 相关阅读:
    软件体系架构复习要点
    Operating System on Raspberry Pi 3b
    2019-2020 ICPC North-Western Russia Regional Contest
    2019 ICPC ShenYang Regional Online Contest
    2019 ICPC XuZhou Regional Online Contest
    2019 ICPC NanChang Regional Online Contest
    2019 ICPC NanJing Regional Online Contest
    Codeforces Edu Round 72 (Rated for Div. 2)
    Codeforces Round #583 (Div.1+Div.2)
    AtCoder Beginning Contest 139
  • 原文地址:https://www.cnblogs.com/emanlee/p/14264835.html
Copyright © 2011-2022 走看看