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

    文章

    148

    浏览量

    2380
  • Air105
    +关注

    关注

    0

    文章

    48

    浏览量

    424
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    串口通信基石:Air8000下Modbus RTU串口初始化详解!

    串口初始化是Modbus RTU通信稳定可靠的关键起点。本篇深入剖析Air8000开发板串口参数配置、初始化代码实现及调试要点,结合mast
    的头像 发表于 10-28 16:33 1440次阅读
    <b class='flag-5'>串口</b><b class='flag-5'>通信</b>基石:<b class='flag-5'>Air</b>8000下Modbus RTU<b class='flag-5'>串口</b>初始化详解!

    基于FPGA开发板TSP的串口通信设计

    本文详细介绍基于Terasic FPGA开发板TSP(又名C5P和OSK)和其板载CP2102N USB-UART桥接芯片的串口通信系统设计与实现。系统采用Verilog HDL编写UART
    的头像 发表于 10-15 11:05 4142次阅读
    基于FPGA<b class='flag-5'>开发板</b>TSP的<b class='flag-5'>串口</b><b class='flag-5'>通信</b>设计

    基于FPGA开发板DE23-Lite的串口通信设计

    DE23-Lite开发板提供了一个UART通信接口(物理接口是下图的Type C接口),用户能够通过主机与Agilex 3 FPGA进行串口通信
    的头像 发表于 10-15 10:57 3969次阅读
    基于FPGA<b class='flag-5'>开发板</b>DE23-Lite的<b class='flag-5'>串口</b><b class='flag-5'>通信</b>设计

    Air780EGH串口通信优化:硬件电路设计核心要素剖析

    要充分发挥Air780EGH的串口通信效能,硬件电路设计必须精准把控核心要素。下面将深入分析UART接口的电平标准、流控信号配置、波特率适配及调试串口管理,为优化
    的头像 发表于 08-11 15:44 536次阅读
    <b class='flag-5'>Air</b>780EGH<b class='flag-5'>串口</b><b class='flag-5'>通信</b>优化:硬件电路设计核心要素剖析

    Air8101多网融合战略升级:Air780EPM模块助力4G联网落地

    应用迈向新高度。 本文将分享Air8101核心通过外挂Air780EPM整机开发板,实现4G联网的功能示例。   一、硬件准备工作   1.1  所需硬件
    的头像 发表于 06-23 16:53 366次阅读
    <b class='flag-5'>Air</b>8101多网融合战略升级:<b class='flag-5'>Air</b>780EPM模块助力4G联网落地

    多功能+高扩展能力加持,Air8000开发板最新资料

    ”,尤其适合需要通信、控制、数据采集的场景,如:远程监控、智能终端等。 一、开发板主要配置 Air8000开发板基于
    的头像 发表于 06-09 14:18 510次阅读
    多功能+高扩展能力加持,<b class='flag-5'>Air</b>8000<b class='flag-5'>开发板</b>最新资料

    技术篇——Air8000开发板,一站式满足多功能高扩展开发需求!

    朋友们,Air8000开发板“多功能集成+高扩展性”,尤其适合需要通信、控制、数据采集的场景,如:远程监控、智能终端等。 一、开发板主要配置
    的头像 发表于 06-04 15:59 442次阅读
    技术篇——<b class='flag-5'>Air</b>8000<b class='flag-5'>开发板</b>,一站式满足多功能高扩展<b class='flag-5'>开发</b>需求!

    【评测试用】合众HZ-T536开发板免费试用体验

    【评测试用】合众HZ-T536开发板免费试用体验
    的头像 发表于 05-27 08:05 685次阅读
    【评测<b class='flag-5'>试用</b>】合众HZ-T536<b class='flag-5'>开发板</b>免费<b class='flag-5'>试用</b>体验

    Air780EPM 模块串口电路设计硬件指导

    串口作为Air780EPM模块的核心通信接口,承担着设备控制、数据传输及外设交互等关键功能,在物联网终端、智能设备、工业自动化等场景中不可或缺。 一、概述  
    的头像 发表于 03-07 17:56 596次阅读
    <b class='flag-5'>Air</b>780EPM 模块<b class='flag-5'>串口</b>电路设计硬件指导

    双雄:当Modbus协议插上4G翅膀,工业通信迎来降维打击

    1979年诞生的Modbus协议,曾是工业设备的 “通用手语” ——通过RS-485串口在1200米内传递数据,如同车间里的摩尔斯电码。   但面对现代工业的跨地域联网、多协议融合需求,传统
    的头像 发表于 03-04 16:44 779次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b>双雄:当Modbus协议插上4G翅膀,工业<b class='flag-5'>通信</b>迎来降维打击

    Air8201,助力武装押运枪支定位

    Air8201 工业引擎 ,主打AirTrack超低功耗定位。 导入了众多位置服务场景,以往的文章都有谈及,本期主要讲武装押运枪支定位场景。   一、行业痛点 在武装押运场景中,枪支实时定位需满足三
    的头像 发表于 02-26 14:27 393次阅读
    <b class='flag-5'>合</b><b class='flag-5'>宙</b><b class='flag-5'>Air</b>8201,助力武装押运枪支定位

    3.5英寸高清智能串口屏 8位MCU并口通信的COG裸屏 或带驱动232串口通信的智能屏

    3.5英寸高清智能串口屏 8位MCU并口通信的COG裸屏 或带驱动232串口通信的智能屏
    的头像 发表于 02-18 14:49 763次阅读
    3.5英寸高清智能<b class='flag-5'>串口</b>屏 8位MCU并口<b class='flag-5'>通信</b>的COG裸屏 或带驱动<b class='flag-5'>板</b>232<b class='flag-5'>串口</b><b class='flag-5'>通信</b>的智能屏

    Air8000工业引擎:多IO多功能,即将量产

    科技近日宣布,其工业引擎Air8000即将进入量产阶段。这款引擎集成了4G、Wi-Fi、BLE、GNSS、Gsensor及电源管理等多项功能,专为工业应用而设计,展现了强大的场景解决能力
    的头像 发表于 01-07 14:56 2888次阅读

    掌握4G模组PWM|技术精要

    今天要讲的是4G模组PWM的技术精要,以常用的Air724UG为例做出示例分享给大家。
    的头像 发表于 12-14 09:40 1718次阅读
    掌握4G模组PWM|技术精要

    掌握4G模组SPI|技术指南

    本次我要分享的是4G模组SPI的技术指南,以Air724UG为例,学完本章帮你实现技术提升。
    的头像 发表于 12-14 09:38 1942次阅读
    掌握4G模组SPI|技术指南