CH554 UART0 怎么改更高的波特率(115200),主频要怎么改?用的5V短接还是3.3V?还有什么要改的?
CH554以57600 波特率打开串口,USB转TTL以10ms速度一直发送10字节数据包,发送200左右数据包后CH554不处理,需要串口,USB都断电重启才能恢复,是CH554串口接收缓存满导致的吗?有什么方法重置吗?
CH554 UART0 怎么改更高的波特率(115200),主频要怎么改?用的5V短接还是3.3V?还有什么要改的?
CH554以57600 波特率打开串口,USB转TTL以10ms速度一直发送10字节数据包,发送200左右数据包后CH554不处理,需要串口,USB都断电重启才能恢复,是CH554串口接收缓存满导致的吗?有什么方法重置吗?
您好,
设置波特率115200可以设置主频为24M,选择合适的模式和分频系数。要注意的是,主频要到达24M必须5V供电电路。
测试57600不会存在发送几秒后异常的情况。可以将您说的不处理问题详细描述一下。测试直接接收数据串口回传是否会有问题。
while(1)
{
RecvChar = CH554UART0RcvByte();
CH554UART0SendByte(RecvChar);
if (nRecvLen == 0 && RecvChar == 0x7E)
{
RecvData[nRecvLen] = RecvChar;
nRecvLen = nRecvLen +1;
}
else if (nRecvLen == 1)
{
nRecvSum = RecvChar;
RecvData[nRecvLen] = RecvChar;
nRecvLen = nRecvLen +1;
}
else if (nRecvLen > 100)
{
memset(RecvData,0,255);
nRecvSum = 0;
nRecvLen = 0;
RecvChar = 0;
}
else if (nRecvLen > 1 && nRecvLen < nRecvSum)
{
RecvData[nRecvLen] = RecvChar;
nRecvLen = nRecvLen +1;
if (nRecvLen >= nRecvSum && nRecvSum != 0)
{
DealRecvData();
memset(RecvData,0,255);
nRecvSum = 0;
nRecvLen = 0;
RecvChar = 0;
}
}
}
extern void DealRecvData()
{
if(CheckCRC() == 1)
{
if(RecvData[2] == 0x01)
{
HIDData[0]= 0x02;
HIDData[1]= RecvData[3];
? HIDData[2]= 0x00;
HIDData[3]= RecvData[4];
HIDData[4]= RecvData[5];
HIDData[5]= RecvData[6];
HIDData[6]= RecvData[7];
HIDData[7]= 0x00;
HIDData[8]= 0x00;
HIDData[9]= 0x00;
HIDData[10]= 0x00;
HIDData[11]= 0x00;
HIDData[12]= 0x00;
HIDData[13]= 0x01;? ??
CH554UART0SendByte(11);
Enp1IntIn();
}
else if (RecvData[2] == 0x02)
{
HIDData[0]= 0x02;
HIDData[1]= RecvData[3];
? HIDData[2]= 0x00;
HIDData[3]= RecvData[4];
HIDData[4]= RecvData[5];
HIDData[5]= RecvData[6];
HIDData[6]= RecvData[7];
HIDData[7]= RecvData[8];
HIDData[8]= 0x01;
HIDData[9]= RecvData[9];
HIDData[10]= RecvData[10];
HIDData[11]= RecvData[11];
HIDData[12]= RecvData[12];
HIDData[13]= 0x02;
CH554UART0SendByte(21);
Enp1IntIn();
}
}
}
接收串口消息,模拟触摸,运行十几秒触摸没反应了,如果串口消息发送慢点(20ms) 能处理过来
问题找到了,长度赋值的时候有时会漏字节,整个都跳过就行了