中级会员
 
- 积分
- 292
- 金钱
- 292
- 注册时间
- 2014-3-6
- 在线时间
- 31 小时
|
我最近在学习STM32,刚学习IAP的时候,用的是原子的《第四十八章 串口IAP实验》程序来实验。我加载APP程序小于55K的时候,即USART_REC_LEN,程序能够运行。现在我想加一个APP大概在150K字节左右的,我想用串口分包接收,边接收边往FLASH里写
u32 LEN=0;
void USART1_IRQHandler(void)
{
u8 res;
#ifdef OS_CRITICAL_METHOD //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了.
OSIntEnter();
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//接收到数据
{
res=USART_ReceiveData(USART1);
if(USART_RX_CNT<USART_REC_LEN)
{
USART_RX_BUF[USART_RX_CNT]=res;
USART_RX_CNT++;
}
else if(USART_RX_CNT>USART_REC_LEN)
{
if(LEN<USART_REC_LEN)
{
USART_RX_BUF[LEN]=res;
LEN++;
}
else if((LEN>=USART_REC_LEN)&&(LEN<2*USART_REC_LEN))
{
USART_RX_BUF[a-USART_REC_LEN]=res;
LEN++;
}
else
{
USART_RX_BUF[LEN-2*USART_REC_LEN]=res;
LEN++;
}
if(LEN==USART_REC_LEN)
{
iap_write_appbin(FLASH_APP1_ADDR,USART_RX_BUF,USART_REC_LEN);//写入地址FLASH_APP1_ADDR
}
if(LEN==2*USART_REC_LEN)
{
iap_write_appbin(FLASH_APP1_ADDR|USART_REC_LEN,USART_RX_BUF,USART_REC_LEN);//写入地址FLASH_APP1_ADDR + USART_REC_LEN
}
if(LEN==USART_RX_CNT)
{
iap_write_appbin(FLASH_APP1_ADDR|(2*USART_REC_LEN),USART_RX_BUF,USART_RX_CNT-2*USART_REC_LEN);//写入地址FLASH_APP1_ADDR + 2*USART_REC_LEN
LEN=0;
}
}
}
#ifdef OS_CRITICAL_METHOD //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了.
OSIntExit();
#endif
}
红色部分是我自己添加的,添加之后没办法运行APP,不知道是错在哪里,该怎么改呢?
希望各位大侠能给予指点
|
|