智能车制作

标题: K60单片机如何用串口中断服务函数接收数据包? [打印本页]

作者: heyunfu01    时间: 2015-8-8 08:35
标题: K60单片机如何用串口中断服务函数接收数据包?
K60单片机如何用串口中断服务函数接收数据包?也就是一次性接收一帧数据,我看了K60教程,好像每次只能接收一个字节啊,如果我用的器件给单片机发送数据,一次性发送一个数据包,有包头和数据,而且定时发送,请问我要怎么接收呢?请大神指导!!!

作者: 好心的路人    时间: 2015-8-8 09:24
:):):):):)
作者: 泰庆电子    时间: 2015-8-8 10:35
一个字节一个字节的发丫
作者: heyunfu01    时间: 2015-8-8 16:54
好心的路人 发表于 2015-8-8 09:24

:(:(

作者: heyunfu01    时间: 2015-8-8 16:56
la9998372 发表于 2015-8-8 10:06
我帧头是0xaa 0xaa,帧尾是0x55 0x55,中间是三个字节的数据,这个程序就是专门负责解析数据包的

多谢大神,我仔细研究一下,感激不尽!

作者: heyunfu01    时间: 2015-8-8 16:57
泰庆电子 发表于 2015-8-8 10:35
一个字节一个字节的发丫

明白了,多谢

作者: 梦里看客    时间: 2015-8-9 09:07
:):)
作者: heyunfu01    时间: 2015-8-9 09:11
la9998372 发表于 2015-8-8 22:11
串口中断就是每来一个字节就触发一次,这个程序就是判断这次接收到的数据是我一帧数据包里的第几个。另外 ...

问题解决了,多谢

作者: huanghuispan    时间: 2016-3-15 14:58
这是我看的学长的程序,前面为什么要赋值0xAA,如果说是帧头的话我看后面又没有帧尾,那我觉得意义也不大啊。不如直接发送数组就可以了!
data_to_send[_cnt++]=temp1[0]>>8; data_to_send[_cnt++]=temp1[0];  不太明白他爸数据右移八位是为了什么?

void Data_Send(void)
{
        uint8 _cnt=0;
        data_to_send[_cnt++]=;         
        data_to_send[_cnt++]=0xAA;
        data_to_send[_cnt++]=0x02;
        data_to_send[_cnt++]=0;            
        data_to_send[_cnt++]=temp1[0]>>8;  
        data_to_send[_cnt++]=temp1[0];  
        data_to_send[_cnt++]=temp1[1]>>8;
        data_to_send[_cnt++]=temp1[1];
        data_to_send[_cnt++]=temp1[2]>>8;
        data_to_send[_cnt++]=temp1[2];
        data_to_send[_cnt++]=temp1[3]>>8;
        data_to_send[_cnt++]=temp1[3];
        data_to_send[_cnt++]=temp1[4]>>8;
        data_to_send[_cnt++]=temp1[4];
        data_to_send[_cnt++]=temp1[5]>>8;
        data_to_send[_cnt++]=temp1[5];
        data_to_send[_cnt++]=temp1[6]>>8;
        data_to_send[_cnt++]=temp1[6];
        data_to_send[_cnt++]=temp1[7]>>8;
        data_to_send[_cnt++]=temp1[7];
        data_to_send[_cnt++]=temp1[8]>>8;
        data_to_send[_cnt++]=temp1[8];

        data_to_send[3] = _cnt-4;
       
        uint8 sum = 0;
        for(uint8 i=0;i<_cnt;i++)
                sum += data_to_send[i];
        data_to_send[_cnt++] = sum;          //22个数据

        LPLD_UART_PutCharArr(UART3, data_to_send, _cnt);
}
作者: Miss.z    时间: 2016-7-10 17:21
huanghuispan 发表于 2016-3-15 14:58
这是我看的学长的程序,前面为什么要赋值0xAA,如果说是帧头的话我看后面又没有帧尾,那我觉得意义也不大啊 ...

要的是16位的,但是只能8位8位(一个字节)的发,移8位后在和没有移的加起来,就是16位的数据了(一个字)






欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2