GD32 Flash操作优化与USB时钟要求解析

需积分: 5 11 下载量 80 浏览量 更新于2024-08-06 收藏 198KB PDF 举报
本文档主要介绍了关于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平台上稳定运行。