CH438Q芯片通信丢字节

----------------------------------------------------------------------------------------------------- 你好,我的板子有两个串口是好的,但是不能发的太快,否则会有错码,其他六个串口丢字节丢的很奇怪,奇字节丢或者偶字节丢数,或者是丢第一个字节,不知道怎么解决?FIFO已开,而且芯片发数发一会就会卡死,就发不出去了,但是可以接收数据。

你用的是什么型号的单片机,单片机的晶振是多少?FIFO设置为多少个字节?你现在这种情况很有可能是单片机处理速度不够造成的。


我用的是新华龙的单片机C8051F340,晶震设置的12MHZ,FIFO为112字节,这款单片机处理速度挺快的呀,怎么会这样?还有就是单片机收到数据后在主程序必须加55ms以上才可以把数据通过438芯片发出去,要不然就丢很多字节。


晶振设置12MHz?是外部输入晶振频率,还是串口的晶振设置?你现在接收数据没有问题,发送有问题,那应该是软件的处理上有问题,你在发送数据的时候是单个字节发送还是批量发送?如果用的批量传输,你用单个字节试试看。


12M是单片机自带的内部晶振,接收数据也会偶尔丢失字节,发送数据我用的是数据块批量发送,用单个字节发送的话丢的更多。不知道何解?


438这边寄存器初始化的时候你设置的晶振频率和波特率是多少?是不是连续用8个串口同时发送?如果是这样,你要在发送之后加延时来等待发送完成。


初始化时的晶振频率都是1.8432Mhz,波特率是用拨码开关设置的,可选择57600或者115200的。8个串口是接收到数据后同时发送的,容易丢数,我在接收到单片机串口数据后,有标志位时才开始发的数,在第一个串口发数之前加了55MS的延时,否则丢数非常厉害。之前在发送后加了个小延时,没什么改观。以为是单片机晶振太小,现在也换成外部晶振22,1184Mhz了,也没什么改观。


你现在用的是我们的开发板还是自己焊接的板子?用的是直接地址方式还是复用地址方式?如果是复用地址方式,那我们的例程是不能跟你的单片机很好的配合的,因为例程是针对普通的51,你现在的单片机指令周期要比普通的51快几倍,所以如果你是这样用的话,建议参照我们手册的时序图在发送和接收的时候加些延时。


我用的是自己设计的板子,外加工的,复用地址方式,应该不是时序图没处理好的问题,现在芯片每个串口初始化有个问题:有这句:WriteCH438Data( REG_FCR7_ADDR, BIT_FCR_RECVTG1 | BIT_FCR_RECVTG0 | BIT_FCR_FIFOEN ); 没有这句:WriteCH438Data( REG_IIR7_ADDR, BIT_IIR_FIFOENS1 | BIT_IIR_FIFOENS0 ); 的时候各个串口发送没有问题,接收数据有两个串口没问题,其他几个串口都在丢字节,有些是丢奇字节,有些丢偶字节,有些没有规律的丢字节。要是这两句在初始化的时候都有,那各个串口接收却都没问题了,但每个串口发送就固定丢偶字节的数据。


FCR是只写寄存器,第一句是设置FIFO触发级并开FIFO,你现在设置的是112字节,第二句就有问题了,IIR是只读寄存器,用于查询具体的中断状态,你不能这样操作,开FIFO功能,前一句就可以了,后面一句是错的;前面用拨码开关来设置波特率,有没有重新配置DLL和DLM这两个寄存器?你接收到数据,是把数据打印出来?我们网站上有51例程,你可以参考下。你可以用9600的波特率来试试,是不是数据量太大、太快造成的,毕竟你现在是8个串口同时收发。


只有登录才能回复,可以选择微信账号登录