大神们看过来。。。求解串口数据问题《8
时间:10-02
整理:3721RD
点击:
- void USART_Send_IRdata2(void)
- {
- u16 i,j;
- u8 tmpL,tmpH,sum=0;
-
- USART1_Send_Byte(0xAA); //start byte
- USART1_Send_Byte(0xAA); //start byte
- USART1_Send_Byte(129); //data length
-
- for(i=0;i<4;i++) //row
- {
- for(j=0;j<16;j++) // column
- {
- tmpL=IMAGE[i][j];
- tmpH=IMAGE[i][j] >> 8;
- USART1_Send_Byte(tmpL);
- USART1_Send_Byte(tmpH);
- sum = tmpL + tmpH + sum;
- }
- }
-
- USART1_Send_Byte(sum+0xAA+0xAA+129);
- }
AA AA 81 B6 02 B4 02 BD 02 B7 02 AD 02 B7 02 B7 02 B4 02 B4 02 B8 02 BA 02 B2 02 B6 02 B0 02 AC 02 A1 02 BE 02 B8 02 B4 02 B4 02 B2 02 BB 02 BA 02 BB 02 B8 02 B9 02 BD 02 B8 02 B5 02 B6 02 B2 02 B4 02 C5 02 BD 02 B1 02 B9 02 B7 02 B7 02 BC 02 B9 02 B4 02 BD 02 B9 02 B6 02 BB 02 B8 02 BB 02 B3 02 B6 02 BA 02 BF 02 B6 02 B8 02 BD 02 BB 02 BD 02 B8 02 BA 02 B7 02 BD 02 B4 02 B9 02 B5 02 BC 02 2A
-------
1、我戳着手指数了下除掉开头的AA AA 81剩下的字串不含空格刚好258个,这个129的校验数*2才刚好一样,这个×2是潜规则?2、从B6 02看,tmpL=0xB6,tmpH=0x02,那么是否将tmpH<<8+tmbL=0x2B6这个数就是原始的数据?要不要0x2B6/2?
应该跟IMAGE[i][j]的原数据对照,才知道接收到的是否正确,另外从
for(i=0;i<4;i++) //row
{
for(j=0;j<16;j++) // column
{
来计算,应该是发送4X16X2=128个,加上最后的校验位是129个字节,如果真接收到多一倍的数据,那么要不就是发送出错,要不就是接收出错。
是的,我弄错了。
2、从B6 02看,tmpL=0xB6,tmpH=0x02,那么是否将tmpH<<8+tmbL=0x2B6这个数就是原始的数据?要不要0x2B6/2?
这个问题怎么看?
是的,我弄错了。
2、从B6 02看,tmpL=0xB6,tmpH=0x02,那么是否将tmpH<<8+tmbL=0x2B6这个数就是原始的数据?要不要0x2B6/2?
这个问题怎么看?
你还没明白,数据是否正确需要看数组IMAGE[i][j]的原数据。
第一个问题,接收到的数据个数问题,这里
for(i=0;i<4;i++) //row
{
for(j=0;j<16;j++) // column
{
共循环4X16=64次,每次发送tmpL,tmpH两个字节,所以总共发送数据个数是64X2=128个,接收到258个那就是有错误的。
第二个问题,从B6 02看,tmpL=0xB6,tmpH=0x02,认为数据是tmpH<<8+tmbL=0x2B6,那你是否确定数组IMAGE[i][j]中的数据高字节的数据都是0x02呢。
没有IMAGE[i][j]的原始数据,无法讨论接收到的数据是否正确,是否应该再做二次数据处理