本帖最后由 伦理君 于 2018-10-22 18:49 编辑
大佬们,求助一个问题。
本人在探索者F4提供的例程——实验39 FATFS实验上进行了修改,读取串口的数据,再保存在CSV中。
但是在运行的时候出现了个问题,在串口传输的数据量低的时候,保存的数据会出现极个别的错误,大概几千组数据错误一个;在串口传输的数据量较大的时候,会出现近乎周期性的错误,11个数据错误一个。另一块板子发出的串口的数据是正确的。
数据量较大的时候——36Kb/s
数据量较小的时候——3.6Kb/s
这是为什么呀?
下面是我更改的地方
void USART1_IRQHandler(void) //串口1中断服务程序
{
u16 Res=0;
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
OSIntEnter();
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
Res =USART_ReceiveData(USART1); //读取接收到的数据
if((USART_RX_STA&0x8000)==0)//接收未完成
{
if(USART_RX_STA&0x4000)//接收到了0x0d
{
if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
else
{
USART_RX_STA|=0x8000;
}//接收完成了
}
else //还没收到0X0D
{
if(Res==0x0d)
{
USART_RX_STA|=0x4000;
LED1=~LED1;
}
else
{
if((USART_RX_STA%2)==0)
{
aRx_Buffer[USART_RX_STA/2]&=0x00FF;
aRx_Buffer[USART_RX_STA/2]|=(Res&0x00FF)<<8;
}
if((USART_RX_STA%2)==1)
{
aRx_Buffer[USART_RX_STA/2]&=0xFF00;
aRx_Buffer[USART_RX_STA/2]|=Res&0x00FF;
}
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1)) USART_RX_STA=0;//接收数据错误,重新开始接收
}
}
}
}
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
OSIntExit();
#endif
}
主函数的while循环
while(1)
{
if (f_mount(fs[0],"", 1) ==FR_OK)
{
if(f_open (&fil,"TempLog.csv", FA_OPEN_ALWAYS | FA_READ | FA_WRITE) ==FR_OK)
{
result = f_size(&fil);
res = f_lseek(&fil,result);
while(KEY0_FLAG) //开启保存
{
if(USART_RX_STA&0x8000) //串口接收完成判断
{
for(i=0;i<17;i++)
{
res= f_printf(&fil, "%d",aRx_Buffer ); //写入一个数据
res= f_write(&fil, &dh,1, (void *)&br);//写入逗号
// printf("%d ",aRx_Buffer);
}
res= f_write(&fil, &hh,1, (void *)&br);//写入换行
USART_RX_STA=0;//串口接收标志置0
LED0 =!LED0;
}
}
}
f_close(&fil);
}
f_mount(fs[0], "",1);
}
数据
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>