• 关于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



  • 相关阅读:
    [HDU 4828] Grids
    约瑟夫问题合集
    [POJ 1365] Prime Land
    [POJ 3270] Cow Sorting
    [POJ 1674] Sorting by Swapping
    SGU 188.Factory guard
    POJ 2942.Knights of the Round Table (双连通)
    POJ 1236.Network of Schools (强连通)
    POJ 2186.Popular Cows (强连通)
    POJ 1734.Sightseeing trip (Floyd 最小环)
  • 原文地址:https://www.cnblogs.com/emanlee/p/14264835.html
Copyright © 2020-2023  润新知