IAP程序,用外部SRAM做APP数据暂存,不知为何暂存到的数据与原APP数据不一样了

2019-07-20 04:52发布

IAP程序,用外部SRAM做APP数据暂存,把接收暂存到外部SRAM里的APP数据再串口发回来查看,发现与原APP数据有很多都不一样,是不是串口接收暂存到FSMC SRAM时写得太快导致数据丢失或出错,有什么解决办法没?
串口接收并暂存到外部SRAM程序:
void USART1_IRQHandler(void)
{
        u8 res;
#if SYSTEM_SUPPORT_OS                                 //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
        OSIntEnter();
#endif
        if(USART1->SR & BIT5)                //接收到数据
        {         
                res = USART1->DR;
                if(USART_RX_CNT < USART_REC_LEN)
                {
                        FSMC_SRAM_WriteBuffer(&res, USART_RX_CNT, 1);
                        USART_RX_CNT++;
                }
        }
#if SYSTEM_SUPPORT_OS                                 //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
        OSIntExit();                                                                                           
#endif
}

写外部SRAM程序:
void FSMC_SRAM_WriteBuffer(u8* pBuffer, u32 WriteAddr, u32 n)
{
        for(; n != 0; n--)  
        {
                if(WriteAddr < 0x80000)
                {
                        *(vu8*)(Bank1_SRAM2_ADDR + WriteAddr) = *pBuffer;
                }
                else if(WriteAddr > 0x7ffff)
                {
                        *(vu8*)(Bank1_SRAM3_ADDR + (WriteAddr-0x80000)) = *pBuffer;
                }
                WriteAddr++;
                pBuffer++;
        }
}

读取SRAM返回给串口:
applenth = USART_RX_CNT;
for(i = 0; i < applenth; i++)
{
        FSMC_SRAM_ReadBuffer(&data, i, 1);
        USART_Send_Byte(data);
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。