串口问题,了解串口或串口高手必进
新 唐 的 ARM M0 核,在 处理 串口 时 发现 一个 问题,很 困惑!
当 串口 收一个 字节,就 发一个 字节的时 候串 口没问题!
当 串口 直接 发 送一串 字符串,字符串的长度 不超过1 0个bye,没问题!
当串 口发送比 较长的字 串时,串口 助手 只能接收 到一部分! 例如 以下 程序:
发送:abcd efgh ijklmn opqrstu wxyz1234567890\n
却只能接收到:abcd efghi jklmnop
当调试 程序,单步走的 时候 可以完全 发出去,全速 的情况 下就会 少一部分,波特率 设为9600 或者115200 情况都一样,求高手 指点!
ARM 单片机 串口 串口通信
// 发送 调用 函数
void UART_Send_String(char part,char* string)
{
switch(part)
{
case 0:
while(*string)
{
_UART_SENDBYTE(UART0,*string);
string++;
}
break;
case 1:
while(*string)
{
_UART_SENDBYTE(UART1,*string);
string++;
}
break;
}
}
//以 下在 main 程序 中:
while(1)
{
//_UART_SENDBYTE(UART0,0x10);
//UART_Send_String(0,a);
for(i=0;i<999;i++)
for(j=0;j<999;j++);
P4->DOUT = 0x0ul;
for(i=0;i<999;i++)
for(j=0;j<999;j++);
P4->DOUT = 0x7ul<<1;
UART_Send_String(1,"abcdefghijklmnopqrstuvwxyz1234567890\n");
}
/*---------------------------------------------------------------------*/
/* Function: DrvUART_Write */
/* */
/* Parameter: */
/* u32Port -[in] UART Channel: UART_PORT0 / UART_PORT1 /UART_PORT2 */
/* pu8RxBuf -[in] Specify the buffer to send the data to transmission FIFO. */
/* u32ReadBytes -[in] Specify the byte number of data. */
/* Returns: */
/* E_SUCCESS */
/* */
/* Description: */
/* TThe function is to write data to TX buffer to transmit data by UART */
/* Note: */
/* In IrDA Mode, the BAUD RATE configure MUST to use MODE # 0 */
/*---------------------------------------------------------------------*/
int32_t DrvUART_Write(E_UART_PORTu32Port,uint8_t*pu8TxBuf, uint32_t u32WriteBytes)
{
uint32_t u32Count, u32delayno;
UART_T * tUART;
tUART = (UART_T *)((uint32_t)UART0 + u32Port);
for (u32Count=0; u32Count<u32WriteBytes; u32Count++)
{
u32delayno = 0;
while (tUART->FSR.TE_FLAG !=1) /* Wait Tx empty and Time-out manner */
{
u32delayno++;
if ( u32delayno >= 0x40000000 )
return E_DRVUART_ERR_TIMEOUT;
}
tUART->DATA = pu8TxBuf[u32Count];/* Send UART Data from buffer */
}
return E_SUCCESS;
}