2.软件移植注意事项
2.1系统方面的注意事项
2.1.1 HSE相关内容修改
在V3.x的库,启动时间宏定义在xxx32f10x.h头文件中;
在V3.0以前的库,其启动时间宏定义在xxx32f10x_rcc.c中(HSEStartUp_TimeOut);
修改前:
//#define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500) /*!< Time out for HSE start up */
修改后:
#define HSE_STARTUP_TIMEOUT ((uint16_t)0xFFFF) /*!< Time out for HSE start up */
修改原因:
GD和STM32的晶振部分电路设计有一定的差异,两者对外部高速晶振的参数要求也不一样,
修改HSE_STARTUP_TIMEOUT宏定义可以保证晶振正常起振。当然你会在应用中发现有一些应用
不修改也能照常跑,这是由于晶振的参数差异造成了,为了保证程序的正常运行还是修改该宏定义。
2.1.2 代码执行速度方面的修改
GD32采用专利技术,提高了相同工作频率下的代码执行速度,带来了高性能的使用体验。这样一些
在ST下面编写的程序如While或者是For循环的延时,移植到GD上面来肯定相应的延时会变短。所以
如果客户的应用有用到这种延时方法的得根据实际情况进行一定的调整。GD的代码执行速度比ST
更快,那么在客户的应用中如果有一些判断的结构不够严谨也可能会导致问题。
案例1:
客户在软件中编写了一个延时函数如下:
void delay(void)
{
U8 I;
For(i=0;i<75;i++);
}
通过实测相同的这一段代码:
ST执行该函数的延时时间是7.4us
GD执行该函数的延时时间是5.4us。
如果客户的应用对时间要求比较严格请不要忽略GD代码执行速度的问题,参数需要做一定的调整。
案例2:
客户采用IO模拟I2C他的查应答函数的编写如下
#define SDA_Status() GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)
Void CheckACK(void)
{
cAcknowledge=TRUE
if(SDA_Status())
{
cAcknowledge=FalSE;
}
}