关于接收数据的uart

1后/0新
914049483
离线
最后一次见到:1年2周前
已加入:2014-11-17 08:07
关于接收数据的uart

我做了一个测试,手机把数据发送到DA14580设备上,显示在串口调试助手中,这个没有问题。
但计算机通过uart向DA14580设备发送数据,DA14580设备在串行调试助手中接收并打印后,数据会出错

void uart\u init\u func(uint8\u t baudr,uint8\u t mode)//uart init
{
SetBits16(CLK_PER_REG,UART1_ENABLE,1);//为UART 1启用时钟

SetWord16(UART\u LCR\u REG,0x80);//设置访问DLH和DLL寄存器的位等于SetBits16(UART\u LCR\u REG,UART\u DLAB,1);
#如果0
SetWord16(UART_IER_DLH_REG,(UART_BAUDRATE_115K2&0xFF>>8));//设置高字节
SetWord16(UART_RBR_THR_DLL_REG,UART_BAUDRATE_115K2&0xFF);//设置低字节
#其他
SetWord16(UART_IER_DLH_REG,(UART_BAUDRATE_9K6&0xFF>>8));//设置高字节
SetWord16(UART_RBR_THR_DLL_REG,UART_BAUDRATE_9K6&0xFF);//设置低字节
#结束
设置字16(UART\U LCR\U REG,3);
SetBits16(UART_MCR_REG,UART_SIRE,0);//正常模式为0,IRDA模式为1
SetWord16(UART_IIR_FCR_REG,1);//启用fifo
SetBits16(UART_IER_DLH_REG,ERBFI_dlh0,1);//IER访问,对可用数据启用中断
NVIC启用IRQ(UART\U IRQn);
NVIC->ICPR[UART\u IRQn]=1;
}

void UART\u Handler\u func(void)//UART接收处理程序
{
uint32国际直拨电话;
idd=0x0F&GetWord32(UART\u IIR\u FCR\u REG);
如果(idd!=无需支付)
{
交换机(idd)
{
案例UART\U超时:
如果((uart_环境错误检测==UART\u ERROR\u DETECT\u ENABLED)(&UART\u fifo\u err\u getf())
{
uart_rec_error_isr();
}
中断;
收到的案例和可用案例:
uart_rec_data_avail_isr();//接收数据处理
中断;

箱门空:
uart_thr_empty_isr();
中断;

违约:
中断;
}
}
}

静态无效uart\U rec\U data\U avail\U isr(无效)//
{
while(uart\u data\u rdy\u getf())
{
//读取FIFO中接收到的数据
uart_rev_buf[rev_buf_index]=uart_rxdata_getf()//

//更新rev\u buf\u索引
rev_buf_index++;

//检查uart\ U rev\ U buf是否已满
如果(rev\u buf\u index==2)
{
rev\u buf\u index=0;
uart_write(uart_rev_buf,2,NULL);//打印函数
uart\u rev\u buf[0]=0;
uart\u rev\u buf[1]=0;
}
}
}