我是用STM32的串口控制WIFI,一开始的时候完全正常,直到一条数据里面的东西需要写入Flash,写入之后,串口收发出现异常,只要那一段的Flash没有被擦掉就一直异常,直到重新烧入程序,擦掉了那段Flash之后才可以正常,想问为什么?有什么原因。下面是Flash写入程序:
[mw_shl_code=c,true]#define CLI() __set_PRIMASK(1)
#define SEI() __set_PRIMASK(0)
#define StartAddress 0x08011800 [/mw_shl_code]
[mw_shl_code=c,true]
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
FLASHStatus = FLASH_ErasePage(StartAddress);
CLI();
if(FLASHStatus == FLASH_COMPLETE)
{
Data = Size_WIFI + WIFI_Name1[0]*256 + WIFI_Name1[1]*65536 + WIFI_Name1[2]*65536*256;
FLASHStatus = FLASH_ProgramWord(StartAddress+j,Data);
j+=4;
for(i=3;i<15;i=i+4)
{
Data = WIFI_Name1+WIFI_Name1[i+1]*256+WIFI_Name1[i+2]*65536+WIFI_Name1[i+3]*65536*256;
FLASHStatus = FLASH_ProgramWord(StartAddress+j,Data);
j+=4;
}
Data = Size_Password + WIFI_Password1[0]*256 + WIFI_Password1[1]*65536 + WIFI_Password1[2]*65536*256;
FLASHStatus = FLASH_ProgramWord(StartAddress+j,Data);
j+=4;
for(i=3;i<15;i=i+4)
{
Data = WIFI_Password1+WIFI_Password1[i+1]*256+WIFI_Password1[i+2]*65536+WIFI_Password1[i+3]*65536*256;
FLASHStatus = FLASH_ProgramWord(StartAddress+j,Data);
j+=4;
}
Data = Size_IP + IP1[0]*256 + IP1[1]*65536 + IP1[2]*65536*256;
FLASHStatus = FLASH_ProgramWord(StartAddress+j,Data);
j+=4;
for(i=3;i<15;i=i+4)
{
Data = IP1+IP1[i+1]*256+IP1[i+2]*65536+IP1[i+3]*65536*256;
FLASHStatus = FLASH_ProgramWord(StartAddress+j,Data);
j+=4;
}
Data = Size_Port + Port1[0]*256 + Port1[1]*65536 + Port1[2]*65536*256;
FLASHStatus = FLASH_ProgramWord(StartAddress+j,Data);
j+=4;
Data =Port1[3] + Port1[4]*256;
FLASHStatus = FLASH_ProgramHalfWord(StartAddress+j,Data);
}
FLASH_Lock();
SEI();[/mw_shl_code]
有没有人帮忙看一下的? |