当前位置:科技动态 > stm32转gd32的经验和陷阱(stm32移植gd32)

stm32转gd32的经验和陷阱(stm32移植gd32)

  • 发布:2023-10-10 16:37

stm32转gd32的经验和陷阱(stm32移植gd32)

1 {IMG_1: Ahr0Chm6ly93D3CUA2VPBDM0NS5JB20VEMJFDXNLCNMVDXBSB2FKLZIWMJMDCVMJAYZA3MJKWNJU3NJU3LMPWZW ==/}

STM32硬件I2C是不是一个陷阱

1。硬件I2C的CLK工作在50kHz及以下,任何情况下都不会卡顿。

2。硬件I2C的CLK工作在常用的100kHz和400KHz。一个小时内,甚至只有几十秒,有99%的概率会卡住。

3。硬件I2C的CLK工作在任意频率。在读取或发送数据时,绝对不允许其他中断事件打断其工作,否则肯定会卡住。只是时间问题。

综上所述,硬件I2C的稳定工作条件是:工作在50kHz及以下,并保证没有其他中断打断其工作。这仅适用于某些对速度要求不高的地方,例如EEPROM读取,而不能用于某些类型的AD芯片等高速设备。

如果您必须需要高速(400KHz),那么建议您使用GD32(GigaDevice),它是STM32的替代品。完全兼容STM32但解决了STM32的硬件I2C bug。经过我的实际测试,在400KHz下工作48小时没有任何错误。但仍需要注意的是,任何外部中断都不能打断I2C的工作。

关于ST推荐的I2C工作在DMA以及最高优先级中断,你可以根据自己的情况来使用,因为如果你使用ucos ii或者其他实时操作系统,那么这种设置最高优先级的方式就可以了绝对不推荐。如果你是裸机程序,任务数量不大,可以考虑这种DMA+中断的方式,否则肯定会出现问题。这只是测试时间长短的问题。

最后需要解释的是:

(1) 以上仅考虑最纯粹的硬件I2C代码。一些用软件来补偿的方法,比如在经常卡住的部分设置超时退出,不在本文讨论范围内,因为这个已经被破坏了。普通 I2C 协议。

(2)由于使用STM32的更高层次是使用中断来调度任务而不是等待死循环,而硬件I2C非常忌讳中断,所以随着你的编程和对操作系统理解的提高,你我会越来越觉得STM32硬件I2C是一个陷阱。

所以,STM32的硬件I2C确实是一个坑,正常运行的环境要求非常高。

GD32系列与STM32系列兼容吗?

基本上只需稍加调整即可通用。 GD32和STM32在各方面基本相似。

优点:

    核心为Cortex-M3的升级版本,兼容Cortex-M3,并实现了Flash的零等待技术。没有时间去取指令,代码执行效率更高。通俗地说,就是代码执行速度变快了。

    同样是XX32F103系列芯片,ST主频最高72MHz,GD可以达到108MHz,代码执行速度会更快。

    Flash和RAM容量更大。 STM32F103xx系列的Flash最大为512K,SRAM最大为64K,而GD32的Flash最大为1M(还有更高的,不过我没用过),SRAM更大的是96K,可以存储更多 代码越多(也可以当普通Flash来存储数据),就有更多的SRAM来存储大块数据。
    缺点:

    代码和在线调试感觉不是很顺利。在IAR开发环境中使用20针Jlink调试代码时,偶尔会调试失败,但多尝试几次可能会好一些。

    SWD调试效果很差,主要是硬件的抗干扰能力。在同一块电路板上,STM32的在线调试非常顺利,但GD32的频繁干扰导致代码无法烧录或调试。过程中发生了中断。

    Flash执行速度问题,前256K代码执行速度正常,256K之后的代码响应中断会很慢,所以开发时最好将中断函数放在前256K的地址中。

以上就是小编对stm32转gd32(stm32移植到gd32)的经验和陷阱以及相关问题的解答。我希望它对你有用!

相关文章

热门推荐