记录调试时遇到的1/坑:
STM32下载不进去程序的原因可能之一!!!
事情是这样的:
本来flash存的是12字节的收数据,由于临时增加了2个字节的存储,参数传进来多了2个字节,但是!函数STMFLASH_WriteBytes内部的局部变量数组并没有给到宽裕的空间。程序编译不报错,编译完也能愉快得下载,但是!下完以后程序跑不正常了,想再下程序,死活下不进去了!
解决: STMFLASH_WriteBytes函数内部的wbuf长度改大
看代码:
void STMFLASH_WriteBytes(u32 WriteAddr,u8 *pBuffer,u16 NumToWrite)
{
uint16_t wbuf[8];//如果参数NumToWrite=16,然而wbuf长度是7 ,程序编译不报错,
//下完程序发现再次下载就下不进去Le!!!! 【wbuf长度改大解决!】
uint8_t i;
if(WriteAddr<STM32_FLASH_BASE||(WriteAddr>=(STM32_FLASH_BASE+1024*STM32_FLASH_SIZE)))return;//非法地址
for(i=0;i<NumToWrite/2;i++)
{
wbuf[i] = (pBuffer[i*2]<<8)|pBuffer[i*2+1];
}
FLASH_Unlock(); //解锁
FLASH_ErasePage(WriteAddr);//擦除这个扇区
STMFLASH_Write_NoCheck(WriteAddr,wbuf,NumToWrite/2);
FLASH_Lock();//上锁
}