做为一个从事多年嵌入式的软件工程师,和大家分享一下在使用STM32时遇到的”坑“,其实后来发现是自己的能力不足。
1:在使用硬件IIC时:
STM32的硬件I2C在某些工作频率下(如100kHz和400kHz)可能会出现卡住的现象。这可能是由于硬件设计或驱动程序的限制所导致的。在读取或发送数据时,如果有其他中断事件干扰,也可能导致硬件I2C卡住。我当时在使用的时候在驱动IIC的OLED屏幕时候,就发现了有时候屏幕会有花屏的现象。
解决办法:
需要我们在实际应用中,尽量使用较低的工作频率,以减少卡住的风险。
确保在数据传输过程中没有其他中断事件的干扰。
如果可能的话,使用软件模拟I2C通信,以获得更灵活的控制和更好的兼容性。
2:在调试硬件SPI的时候,:
SPI通信中的时钟极性(CPOL)和时钟相位(CPHA)是两个关键参数。它们定义了时钟信号在空闲状态下的电平和数据采样的时机。当时是利用硬件的SPI读取两个芯片,一个是存储芯片(AT45DB041),一个是AD芯片(CS5530),由于这个两个芯片的时序不一致,一个是在上升沿读取数据,另外一个是在下降沿读取数据,当时也是调试好久才发现,时序不一致,当初也是刚毕业不久,也没有太多的工作经验,还以为是芯片损坏,现在想起来还是真的小白了。后来工作时间久了才发现,影响SPI通讯不正常的原因有很多,需要注意硬件连接、通信协议与时序、数据传输等方面。
就是在调试这两款SPI从机的时候,当时为了减少硬件的引脚,从而将省出的引脚复用其他的功能,从而导致了自己在软件调试时候遇到了不小的麻烦。当时都使用逻辑分析仪一点点的查出来的。
就是这些大大小小的“坑”,铺满了整个嵌入式的道路。