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

    文章

    160

    浏览量

    2560
  • Air105
    +关注

    关注

    0

    文章

    48

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Air8000W +AI开发APP 诗词闯关(SCCG)开发指南

    本篇旨在讲述在引擎 Air8000W开发诗词闯关 app(SCCG)项目的详细过程。 诗词闯关 app,是一款使用 AirUI 轻量化图形开发
    的头像 发表于 05-11 15:30 131次阅读
    <b class='flag-5'>Air</b>8000W +AI<b class='flag-5'>开发</b>APP 诗词闯关(SCCG)<b class='flag-5'>开发</b>指南

    Air8101诗词闯关APP 开发指南

    本篇旨在讲述在引擎 8101 开发诗词闯关 app(SCCG)项目的详细过程。 诗词闯关 app,是一款使用 AirUI 轻量化图形开发框架,基于工业引擎
    的头像 发表于 05-11 14:17 95次阅读
    <b class='flag-5'>Air</b>8101诗词闯关APP  <b class='flag-5'>开发</b>指南

    Air6208 硬件参数与应用场景详解

    Air6208支持4.3寸SPI 触摸屏+30万像素摄像头,搭配合AirUI图形框架,应用于屏显交互、视频采集场景。
    的头像 发表于 04-09 12:01 222次阅读

    LuatOS:485 总线硬件设计要点与 exmodbus 库开发实战

    在工业物联网通信开发中,485 总线与 Modbus 协议的组合应用十分常见。本文以 Air780EHV 系列模组为实例,围绕 Luat
    的头像 发表于 03-19 17:57 294次阅读
    LuatOS:485 总线硬件设计要点与 exmodbus 库<b class='flag-5'>开发</b>实战

    猛!MCU模组:Air1601/1602双星出击!

    在嵌入式开发中,你是否曾面临这样的困境:高清UI渲染依赖昂贵高端芯片、图像处理卡顿、多网通信协同复杂、工业级稳定设计繁琐……Air160
    的头像 发表于 02-13 14:05 1038次阅读
    猛!<b class='flag-5'>合</b><b class='flag-5'>宙</b>MCU模组:<b class='flag-5'>Air</b>1601/1602双星出击!

    高效接入语音交互:模组音频方案如何选?

    本文特别分享4G模组选型与硬件设计要点,为开发者提供实用参考。 一、模组音频支持概况 从主芯片是否原生支持音频功能来看,4G模组大致可分为两类: 1.1 主芯片支持音频功能 比如:经典老
    的头像 发表于 02-08 14:59 1043次阅读
    高效接入语音交互:<b class='flag-5'>合</b><b class='flag-5'>宙</b>模组音频方案如何选?

    Air780EPM开发板为例:FFT应用示例核心要点全解析

    Air780EPM开发板FFT应用的核心要点。   01. FFT示例功能   本demo是FFT(快速傅里叶变换)测试,支持Q15定点和F32浮点两种实现方式。 主要功能: 生成200Hz正弦波测试信号; 使用Q15定点FFT算法处理
    的头像 发表于 12-16 15:28 553次阅读
    以<b class='flag-5'>Air</b>780EPM<b class='flag-5'>开发板</b>为例:FFT应用示例核心要点全解析

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

    串口初始化是Modbus RTU通信稳定可靠的关键起点。本篇深入剖析Air8000开发板串口参数配置、初始化代码实现及调试要点,结合mast
    的头像 发表于 10-28 16:33 1859次阅读
    <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 4966次阅读
    基于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 5001次阅读
    基于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 967次阅读
    <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 793次阅读
    <b class='flag-5'>Air</b>8101多网融合战略升级:<b class='flag-5'>Air</b>780EPM模块助力4G联网落地

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

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

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

    朋友们,Air8000开发板“多功能集成+高扩展性”,尤其适合需要通信、控制、数据采集的场景,如:远程监控、智能终端等。 一、开发板主要配置
    的头像 发表于 06-04 15:59 834次阅读
    技术篇——<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 1333次阅读
    【评测<b class='flag-5'>试用</b>】合众HZ-T536<b class='flag-5'>开发板</b>免费<b class='flag-5'>试用</b>体验