GD32与STM32软件移植指南:USART与执行速度差异分析

需积分: 5 11 下载量 115 浏览量 更新于2024-08-06 收藏 198KB PDF 举报
"本文主要介绍了在USART通信方面GD32国产芯片与ST产品的一些差异,以及在软件移植过程中需要注意的事项。重点讨论了USART连续发送数据时存在的IDLE位差异和GD32的代码执行速度优化对延时函数的影响。" 在射频识别(RFID)领域,理解不同芯片的特性是非常重要的,尤其是在使用USART(通用同步/异步收发传输器)进行连续数据传输时。标题提及的"USART方面的说明"主要关注的是GD32 MCU在连续发送数据时与ST产品的区别。GD32在USART连续发送时会多出一个IDLE位,这不会影响大多数客户的应用,但会影响连续发送的数据传输时间。IDLE位在USART协议中通常用于标识数据帧结束和下一个数据帧开始之间的空闲状态,因此增加的IDLE位可能导致总传输时间略微增加。 软件移植注意事项是GD32与STM32之间迁移程序时的关键点。首先,针对HSE(外部高速时钟)的启动时间宏定义,原定义在V3.x库的xxx32f10x.h头文件中,而在V3.0以前的库中则在xxx32f10x_rcc.c中。由于GD32与STM32在晶振电路设计上的差异,需要将HSE_STARTUP_TIMEOUT宏定义修改为更大的值,如0xFFFF,以确保GD32的晶振能正常启动。虽然某些情况下不修改也能运行,但为了程序的稳定性,建议进行修改。 此外,GD32采用的专利技术提升了相同工作频率下的代码执行效率,这意味着GD32的程序执行速度比STM32快。这对包含延时函数的代码有直接影响。例如,一个简单的For循环延时函数在GD32上执行时间会比在STM32上短。在案例1中,GD32执行给定的延时函数所需时间仅为5.4us,而STM32需要7.4us。因此,如果应用程序对时间精度有较高要求,需要调整延时函数以适应GD32的快速执行速度。 另一个案例展示了在IO模拟I2C通信时可能出现的问题。当使用GPIO读取SDA状态并检查应答时,代码在STM32上可能正常运行,但在GD32上可能出现异常。这可能是由于GD32的快速执行导致I2C通信的应答检测时机不准确。在这种情况下,需要重新评估和调整检测逻辑,以确保在GD32上正确处理I2C通信。 移植STM32应用到GD32时,需要注意USART的差异、HSE启动时间的调整以及代码执行速度的变化,以确保软件在新的硬件平台上能正确、稳定地运行。