0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【合宙Air105开发板试用体验】合宙Air105串口通信如何判断收发数据的正确与否-不外传的秘籍

开发板试用精选 来源:开发板试用 作者:电子发烧友论坛 2022-12-01 11:21 次阅读
本文来源电子发烧友社区,作者:8888811111, 帖子地址:https://bbs.elecfans.com/jishu_2289335_1_1.html

air105开发板有5组uart,见1.png,2.png:
其中uart0被开发板系统占用为调试端口,uart0是不可以用作串口通信的,这点说明书没有说明,试了很多次,浪费了很多时间,即使将波特率改成系统调试的1500000也不行,见3.png,在此提供给大家,希望大家免走弯路。
进行串口通信前必须将开发板的开关拨至“串口”的位置,见4.png。
目前,大家使用的串口接收程序,大多是开发板将收到的串口数据原封不动地再发回去,以检验口传输数据正确与否,见5.png。
这种方式对数据流量小的情况还勉强凑合,对于数据量大的场合就勉为其难了。下面给大家介绍工业级的串口校验程序GetCRC16,一般不外传,机会难得,请收藏。
使用时,pc端只需将需发送的数据及数据长度传给GetCRC16(),然后将GetCRC16()的返回值附加在数据的最后。接收端,如air105开发板,接收到数据后,再用GetCRC16()计算接收到的数据(不含最后16位)的CRC16值,并与接收到数据的最后16位比较,若相同,表示数据接收正确。否则,要求pc端重发数据。程序如下:
unsigned int GetCRC16(unsigned char*ptr,unsigned char len)

{
unsigned int index;
unsigned char crch = 0xFF;
unsigned char crcl = 0xFF;
unsigned char TabH[] = {
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01,0xC0, 0x80, 0x41,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
};
unsigned charTabL[] = {/*原为: unsigned char code TabL[]*/
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,
0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,
0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,
0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,
0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,
0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,
0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,
0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,
0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,
0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,
0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,
0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,
0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,
0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,
0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,
0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49,0x89, 0x4B, 0x8B,
0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,
0x43, 0x83, 0x41, 0x81, 0x80, 0x40
};

while(len--)
{
index = crch ^ *ptr++;
crch = crcl ^ TabH[index];
crcl = TabL[index];
}

return ((crch<<8) | crcl);
}












air105开发板有5组uart,见1.png,2.png:
其中uart0被开发板系统占用为调试端口,uart0是不可以用作串口通信的,这点说明书没有说明,试了很多次,浪费了很多时间,即使将波特率改成系统调试的1500000也不行,见3.png,在此提供给大家,希望大家免走弯路。
进行串口通信前必须将开发板的开关拨至“串口”的位置,见4.png。
目前,大家使用的串口接收程序,大多是开发板将收到的串口数据原封不动地再发回去,以检验口传输数据正确与否,见5.png。
这种方式对数据流量小的情况还勉强凑合,对于数据量大的场合就勉为其难了。下面给大家介绍工业级的串口校验程序GetCRC16,一般不外传,机会难得,请收藏。
使用时,pc端只需将需发送的数据及数据长度传给GetCRC16(),然后将GetCRC16()的返回值附加在数据的最后。接收端,如air105开发板,接收到数据后,再用GetCRC16()计算接收到的数据(不含最后16位)的CRC16值,并与接收到数据的最后16位比较,若相同,表示数据接收正确。否则,要求pc端重发数据。程序如下:
unsigned int GetCRC16(unsigned char*ptr,unsigned char len)
{
unsigned int index;
unsigned char crch = 0xFF;
unsigned char crcl = 0xFF;
unsigned char TabH[] = {
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01,0xC0, 0x80, 0x41,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
};
unsigned charTabL[] = {/*原为: unsigned char code TabL[]*/
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,
0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,
0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,
0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,
0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,
0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,
0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,
0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,
0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,
0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,
0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,
0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,
0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,
0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,
0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,
0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49,0x89, 0x4B, 0x8B,
0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,
0x43, 0x83, 0x41, 0x81, 0x80, 0x40
};

while(len--)
{
index = crch ^ *ptr++;
crch = crcl ^ TabH[index];
crcl = TabL[index];
}

return ((crch<<8) | crcl);
}


5.png
4.png
3.png
2.png
1.png



声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 合宙通信
    +关注

    关注

    0

    文章

    146

    浏览量

    1719
  • Air105
    +关注

    关注

    0

    文章

    48

    浏览量

    290
收藏 人收藏

    评论

    相关推荐

    RNDIS网卡应用看这篇!Air780EP低功耗4G模组AT开发示例

    ** ​ 1.1 硬件准备 EVB_Air780EP开发板一套,包括天线、SIM卡; USB线 WIN10以上PC电脑 1.2 软件准备 串口
    的头像 发表于 09-30 06:59 430次阅读
    RNDIS网卡应用看这篇!<b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>780EP低功耗4G模组AT<b class='flag-5'>开发</b>示例

    低功耗4G模组AIR780EX ——开发板使用说明

    EVB-AIR780EX 开发板通信推出的基于 Air780EX 模组所
    的头像 发表于 09-11 11:55 550次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>低功耗4G模组<b class='flag-5'>AIR</b>780EX ——<b class='flag-5'>开发板</b>使用说明

    4G模组Air780E开发板使用手册

    开发板Air780E使用说明
    的头像 发表于 09-09 18:22 574次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>4G模组<b class='flag-5'>Air</b>780E<b class='flag-5'>开发板</b>使用手册

    Air780E硬件设计手册02

    低功耗4G模组Air780E硬件设计介绍
    的头像 发表于 09-06 12:02 372次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>780E硬件设计手册02

    LuatOS开发板Core_Air780EP使用说明

    Core-Air780EP 开发板通信推出的基于 Air780EP 模组所
    的头像 发表于 09-03 17:38 476次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>LuatOS<b class='flag-5'>开发板</b>Core_<b class='flag-5'>Air</b>780EP使用说明

    低功耗4G模组Air700EAQ——开发板使用说明

    低功耗4G模组Air700EAQ——开发板使用说明
    的头像 发表于 08-30 17:14 1019次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>低功耗4G模组<b class='flag-5'>Air</b>700EAQ——<b class='flag-5'>开发板</b>使用说明

    Air700EAQ硬件设计手册——应用接口2

    Air700EAQ硬件设计的详细介绍
    的头像 发表于 08-27 14:23 357次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>700EAQ硬件设计手册——应用接口2

    LuatOS开发板使用手册——Air700ECQ

    LuatOS开发板使用说明——Air700ECQ
    的头像 发表于 08-23 16:28 507次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>LuatOS<b class='flag-5'>开发板</b>使用手册——<b class='flag-5'>Air</b>700ECQ

    Air700ECQ硬件设计手册——应用接口3

    Air700ECQ硬件设计手册——应用接口部分介绍
    的头像 发表于 08-22 18:34 383次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>700ECQ硬件设计手册——应用接口3

    Air700ECQ硬件设计手册——应用接口2

    Air700ECQ硬件设计手册——应用接口部分。本文介绍了Air700ECQ的应用接口中的开关机,串口,USB接口,USB下载模式和
    的头像 发表于 08-22 15:06 359次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>700ECQ硬件设计手册——应用接口2

    Air700ECQ硬件设计手册——应用接口1

    Air700ECQ硬件设计手册——应用接口1
    的头像 发表于 08-21 18:46 317次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>700ECQ硬件设计手册——应用接口1

    | Air780EP首版LuatOS固件发布,新品模组内测抢先体验

    07日,Air780EP首版LuatOS固件发布。 软件支持已就绪,开发板还会远吗?
    的头像 发表于 12-11 12:20 2673次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b> | <b class='flag-5'>Air</b>780EP首版LuatOS固件发布,新品模组内测抢先体验

    基于Air001的迷你RGB灯环

    问题来了,你会亲手做来送给最爱的TA吗?基于Air001的迷你RGB灯环-开源分享-本项目以Ai
    的头像 发表于 11-25 08:04 1233次阅读
    基于<b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>001的迷你RGB灯环

    基于Air32的手持示波器

    兼容主流F103,仅需3.8元的Air32系列超值国产MCU,性能强、开发快,不少行业客户已广泛应用于量产项目,相比市场主流F103每盘可省数万元!你知道吗,工程师朋友们极为喜爱的
    的头像 发表于 11-21 08:04 785次阅读
    基于<b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>32的手持示波器

    来了!基于Air32的手持示波器

    兼容主流F103,仅需 3.8元的 Air32系列 超值国产MCU,性能强、开发快,不少行业客户已广泛应用于量产项目,相比市场主流F103每盘可省数万元! 你知道吗,工程师朋友们极
    的头像 发表于 11-20 12:15 2086次阅读