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);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>