正点原子老师,您好,我现在做的是让板子的串口1持续接受数据并存到SD卡中的.txt文件中,下面是我的程序,是用第40个例程FATFS改的。但是现在只能往.txt文件里面写一行乱码,不知道怎么回事,请老师给看看。
[mw_shl_code=c,true]这个是主循环:
while(1)
{
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
res=f_open(&f_txt,"123.txt",FA_OPEN_ALWAYS | FA_WRITE);
f_write(&f_txt,USART_RX_BUF,len,(UINT*)&br);
f_lseek(&f_txt,len);
USART_RX_STA=0;
f_close(&f_txt);
}
}
下面是串口中断程序,接收到11,11表示接受完成。
void USART1_IRQHandler(void)
{
u8 Res;
#ifdef OS_TICKS_PER_SEC
OSIntEnter();
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志[/mw_shl_code]
[mw_shl_code=c,true] Res =USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据
if((USART_RX_STA&0x8000)==0)// 接受未完成
{
if(USART_RX_STA&0x4000)//接收到了11
{
if(Res!=0x11)USART_RX_STA=0;//接收错误重新开始[/mw_shl_code]
[mw_shl_code=c,true] else USART_RX_STA|=0x8000; //接收完成了 [/mw_shl_code]
[mw_shl_code=c,true] }
else //还没有收到11 [/mw_shl_code]
[mw_shl_code=c,true] {
if(Res==0x11)USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0 //接收数据错误重新开始接收 }
}
}
}
#ifdef OS_TICKS_PER_SEC
OSIntExit();
#endif
}
#endif
[/mw_shl_code]
|