我想在SDA线路上提取I2C通信的内容/序列,而不使用示波器解密信号,所以我想知道是否可以通过STM32CUBEIDE调试完成它?
谢谢
发布于 2022-06-20 11:05:01
不是直接的,也不是整个交流。您可以将发送/接收的数据输出到连接到ST-Link的UART。不要忘记,您必须将数据字节(例如) 0x34转换为" 0x34“字符串,以便UART能够从终端读取数据字节(否则,终端将用代码0x34显示ASCII字符,甚至可能是不可见的),因此必须进行一些数据转换,这是您需要实现的整个功能,这个站点上有多种解决方案来解决这个问题,或者您可以想出自己的解决方案。
您将无法完全跟踪通信,就像看到波形一样。您将无法看到开始和停止位和地址通信物理,但您可以看到I2C状态寄存器,它将有各种标志。您可以使用断点并在I2C中看到标志,但请记住,使用断点进行跟踪通信是非常困难和有限的。您可以在中间破坏数据包,在程序暂停时破坏时间等等。注意你放置断点的地方。您还将无法验证您从主到从发送的数据是否实际被发送到I2C行(因为您可以成功地将其发送到UART,但是您不知道I2C是否发送出去,I2C状态寄存器中的标志就是全部)。但是,通过将数据重定向到UART,您可以完全验证从从服务器传入的数据。
为了访问I2C标志,在STM32CubeIDE中运行调试,当您处于调试模式并处于断点时,转到右上角(默认面板)的特殊功能寄存器(SFR)选项卡,找到您的I2C接口,展开它并找到SR (状态寄存器)或ISR (中断和状态寄存器),两者以存在者为准。您应该有不同的0和1,它们表示外围设备的某些状态(例如,行空闲、繁忙、传输完成、溢出错误等)。
https://stackoverflow.com/questions/72683903
复制相似问题