本文档主要介绍了关于GD32国产芯片在Flash操作和USB配置方面的注意事项,以及软件移植过程中需关注的系统层面的修改。
在Flash操作方面,GD32的Flash执行速度快,但写操作较慢。为了优化性能,需要对以下几个函数进行修改:
1. `FLASH_EraseOptionBytes(void)`:用于擦除选项字节。
2. `FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data)`:用于编程选项字节数据。
3. `FLASH_EnableWriteProtection(uint32_t FLASH_Pages)`:启用Flash页面写保护。
4. `FLASH_ReadOutProtection(FunctionalState NewState)`:设置读出保护状态。
在这些函数执行关键操作(如写入KEY)后,需要添加`__nop()`指令或等待OPTWRE标志变为0的循环,以确保足够的等待时间。同时,需要调整擦除和编程的超时宏定义,增大它们的值以适应更长的等待时间。
对于Flash的起始地址,写操作必须从0x08000000开始,而读操作可以从0x00000000开始读取主Flash。若芯片容量大于256K,高速度区域的Flash操作会变慢,需要手动调整链接脚本,将速度敏感的部分放在256K之前。
在USB配置上,GD32有最小工作频率要求,即APB1分频后的时钟必须大于12MHz。例如,如果HCLK为56MHz,APB1的最大分频系数为4,则最小工作频率为14MHz。软件编程时应确保设置的USB时钟大于12MHz。
在软件移植时,需要注意以下几点:
1. HSE相关内容的修改:GD32与STM32的晶振启动时间不同,需要在对应的宏定义中调整HSE_STARTUP_TIMEOUT,以适应GD32的晶振参数,确保正常启动。
2. 代码执行速度:GD32的代码执行速度比STM32快,可能导致原有基于STM32的延时函数在GD32上运行时间缩短。因此,如果应用中有精确延时需求,需要重新计算或调整相关函数。
例如,一个简单的延时函数在GD32上执行时间可能比STM32短约25%。此外,如果应用中存在依赖于执行速度的判断逻辑,如模拟I2C的应答检测,也可能因为执行速度差异而在GD32上出现问题,需要进行代码优化。
GD32芯片在Flash管理和USB配置上有特定的需求,并且其代码执行速度的提升对软件移植提出了新的挑战。开发者需要根据这些特性对原有代码进行适应性修改,以确保在GD32平台上稳定运行。