suebillt 发表于 2014-12-15 12:28:50

LPC1788串口问题

用1788串口0打印如下
for(qwe=0;qwe<255;qwe++)
{
UART_SendByte((UART_ID_Type)0,'q');
}               
结果串口终端只显示16个,发现这个问题是测试其DMA接收问题,发32个数组其也只能发送16个字节。
查询了1788数据手册发现如图其FIFO只有16字节,这么坑爹啊!!

2fen 发表于 2014-12-15 13:31:40

楼主不知道有个东西叫缓冲队列吗?

2fen 发表于 2014-12-15 13:58:49

请楼主移步看一下:http://www.amobbs.com/thread-4788975-1-1.html

dushanwu522 发表于 2014-12-15 14:11:07

我使用的没有问题,如下:
void UART3_SendByte(uint8_t c)
{
   while(0==(LPC_UART3->LSR&(0x01<<6)));                //µÈ´ý´®¿Ú¿ÕÏÐ
   LPC_UART3->THR=c;                                                                //½«·¢ËÍ×Ö·ûдÈë·¢Ëͱ£³Ö¼Ä´æÆ÷
}

tiger5 发表于 2014-12-15 14:32:46

发送完再接着发。
你以为FIFO是无限制的吗?

tiger5 发表于 2014-12-15 14:33:06

我还发1024字节呢。





suebillt 发表于 2014-12-15 15:38:27

tiger5 发表于 2014-12-15 14:33
我还发1024字节呢。

用Printf是没有任何问题的

suebillt 发表于 2014-12-15 17:04:05

tiger5 发表于 2014-12-15 14:33
我还发1024字节呢。

我懂了,其实库函数下面还有个UART_Send((UART_ID_Type)0,DMADest_Buffer,32,BLOCKING);
每send一个Byte就FIFO清空一下,

tiger5 发表于 2014-12-16 08:38:45

suebillt 发表于 2014-12-15 17:04
我懂了,其实库函数下面还有个UART_Send((UART_ID_Type)0,DMADest_Buffer,32,BLOCKING);
每send一个Byte ...

FIFO触发中断字节可选择,你看一下数据手册。一般一次发不完,接着把字节放FIFO,再触发中断发送。
PRINTF是查询发送,等等寄存器发送完成,接着发。
页: [1]
查看完整版本: LPC1788串口问题