你试着换一种接收方式,采用核中断方式接收,每来一个字节接受一个,然后放到一个buffer里面,需要的时候再从这个buffer里面去读,以前我在BF548一个项目上也是这么做的
EX_INTERRUPT_HANDLER(UART1_RX_ISR)
{
while(*pUART1_LSR&0x1)
{
unsigned char tmp = *pUART1_RBR;
fifoctl(&g_rs232_priv, &tmp, WR);
}
}
int fifoctl(rs232_fifo * priv, unsigned char *data , const unsigned char flag)
{
if (flag == WR) {
priv->w_idx = (priv->w_idx + 1) % BUFSIZE;
/* Save it to buffer */
if (priv->w_idx == priv->r_idx){
/* Adjust read index since buffer is full */
/* Keep the latest one and drop the oldest one */
priv->r_idx = (priv->r_idx + 1) % BUFSIZE;
// printf("debug : write buffer, is full...\n");
}
priv->buffer[priv->w_idx] = *data;
}
else{
if ((priv->r_idx == priv->w_idx))
// printf("debug : read buffer, is empty...\n");
return 0;
else{
priv->r_idx = (priv->r_idx + 1) % BUFSIZE;
*data= priv->buffer[priv->r_idx];
}
}
return priv->w_idx-priv->r_idx + 1;
}