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

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

3天内不再提示

CRC-16公式是什么?如何利用单片机去验证呢

通信工程师专辑 来源:通信工程师专辑 作者:了凡三训 2022-11-09 10:14 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、实验目的

1、完成CRC-16的程序编写

2、根据模板整改,实现函数调用

3、在程序中不可以出现长数组

4、利用单片机验证

二、CRC-16校验

CRC-16公式是什么?

94e074a0-5f59-11ed-8abf-dac502259ad0.png

上堂课提到了哦!

再来看看框图是什么样子?

94f535e8-5f59-11ed-8abf-dac502259ad0.png


每个小框都是一个寄存器

CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。

生成步骤如下:

1、将x的最高次幂为R的生成多项式G(x)转换成对应的R+1位二进制数。

2、将信息码左移R位,相当于对应的信息多项式C(x)*x的R次方。

3、用生成多项式(二进制数)对信息码做除,得到R位的余数。

4、将余数拼到信息码左移后空出的位置,得到完整的CRC码。

三、实验程序

1、调用函数

这里完成的是寄存器生成法,同样的根据模板,主要的是调用函数的编写。

调用函数首先要进行调用函数名的定义

function z = crc16(message)

接下来是寄存器的编写,一开始寄存器的初始值都为0,为了程序的简明,根据实验要求不可以出现长数组,只能出现一个数组。

a=zeros(1,16)

zeros函数是全零矩阵,所以满足要求。

根据公式和框图就可直接写出每个寄存器的等式,这时候就要注意框图中的箭头方向,最重要的是要在最前面先定义第一个寄存器。

第一个寄存器里的数据是第十六个寄存器和输入数据的第一个值的异或,尤为关键。后面的编写就比较简单,只要注意一一对应就好。同时crc是一个循环码,这里就要使用for循环。循环的次数由输入比特数决定。

函数的最后还要把完整的寄存器写上。

z=[a(16),a(15),a(14),a(13),a(12),a(11),a(10),a(9),a(8),a(7),a(6),a(5),a(4),a(3),a(2),a(1)];

2、主函数

在写主函数之前先要把调用的函数写上,后面的程序才能够使用。

在这里应用的是randi函数

randi是matlab中能产生均匀分布的伪随机整数的新函数。

主要语法:

randi(iMax)在开区间(0,iMax)生成均匀分布的伪随机整数
randi(iMax,m,n)在开区间(0,iMax)生成m*n型随机矩阵
randi([iMin,iMax],m,n)在开区间(iMin,iMax)生成m*n型随机矩阵

相似的还有rand函数和randn。

rand 生成均匀分布的伪随机数。分布在(0~1)之间

主要语法:

rand(m,n)生成m行n列的均匀分布的伪随机数
rand(m,n,'double')生成指定精度的均匀分布的伪随机数,参数还可以是'single'
rand(RandStream,m,n)利用指定的RandStream(我理解为随机种子)生成伪随机数
randn 生成标准正态分布的伪随机数(均值为0,方差为1)主要语法和rand函数一致。

dec2hex函数

功能:把一个十进制数转换成一个字符串形式表示的十六进制数。

语法格式:

str = dec2hex(d)把十进制整数d转换成16进制形式表示, 并存在一个字符串中。d必须是一个非负的比2^52次方小的整数。

str = dec2hex(d, n)指定十六进制数的位数,n就是指定的位数例如:dec2hex(255)ans =FF;dec2hex(255, 6)ans =0000FF

之后的程序就是将生成的数据写入指定的文件里面。

data_hex = dec2hex(data_16);

fid = fopen('data_hex.txt', 'wt');

fprintf(fid, '%s ', data_hex);

fclose(fid);

data_binary1=dec2bin(data_binary);

fid = fopen('data_bin.txt', 'wt');

fprintf(fid, '%s ', data_binary1);

fclose(fid);

result_hex = dec2hex(result_16);

fid = fopen('result_hex.txt', 'wt');

fprintf(fid, '%s ', result_hex);

fclose(fid);

3、单片机验证

单片机是利用串口接收数据,处理后回传给电脑

在MATLAB里直接写入1011001001011010,则有data_bin文件的1011001001011010,data_hex文件的B25A,result_hex文件的83D0。

传入单片机的数据是data_bin文件中的,相关的数据在单片机里进行运算,得到的如下图所示。

952c3070-5f59-11ed-8abf-dac502259ad0.jpg

MATLAB数据结果!

955426d4-5f59-11ed-8abf-dac502259ad0.png

两者的数据相同,也就验证了CRC校验程序正确。

小结:现在MATLAB程序已经能够熟练应用了,就是要多做才能熟练。但是单片机这块还是挺薄弱的,能够读懂程序但是不能完整的独立编写。单片机比MATLAB复杂多了,这是现在最大的感触。但是我想至少能读懂,能写一些,然后每次多会一点知识就好。还是要加油。


审核编辑:刘清

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

    关注

    6074

    文章

    45340

    浏览量

    663628
  • matlab
    +关注

    关注

    189

    文章

    3018

    浏览量

    237607
  • 寄存器
    +关注

    关注

    31

    文章

    5589

    浏览量

    129072
  • CRC-16
    +关注

    关注

    0

    文章

    5

    浏览量

    7735

原文标题:计算机通信与网络v2 实验课程(9)

文章出处:【微信号:gh_30373fc74387,微信公众号:通信工程师专辑】欢迎添加关注!文章转载请注明出处。

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    嵌入单片机定义及区别

    单片机,即嵌入式微控制器MCU,是嵌入系统的核心组成部分。除此之外,嵌入处理器还包括嵌入DSP处理器、嵌入式微处理器MPU、嵌入片上
    发表于 11-17 08:11

    单片机和嵌入,到底是什么关系?

    很多人初次接触嵌入开发时,都会听到一句话:“嵌入其实就是单片机。”可当你真正开始学习时,会发现嵌入单片机虽然经常“捆绑”在一起提,但
    的头像 发表于 11-14 10:28 589次阅读
    <b class='flag-5'>单片机</b>和嵌入<b class='flag-5'>式</b>,到底是什么关系?

    CRC校验的原理和应用

    )。 计算复杂度较高:涉及二进制多项除法,但可通过查表法(Lookup Table)优化。 长度灵活:常用 CRC-8、CRC-16CRC-32、
    发表于 11-14 06:48

    CRC校验的本质和物理意义

    校验的数学本质 1. 模2除法与多项表示 Modbus RTU采用的CRC-16算法基于多项除法运算,其核心特征包括: 生成多项:0x8005(标准表示)或0xA001(查表法优
    发表于 11-13 07:58

    8种常用的CRC算法分享

    CRC 计算单元可按所选择的算法和参数配置来生成数据流的 CRC 码。有些应用中,可利用 CRC 技术来验证数据的传输和存储的完整性。 8
    发表于 11-13 07:25

    浮思特 | ABOV 32位单片机的技术演进与行业应用解析

    随着科技的不断进步,单片机(MCU)已经从最初的8位和16位时代,逐步迈向了32位的时代。32位单片机的高性能和广泛适应性,使其成为未来嵌入系统和智能硬件的核心驱动力量。特别是在家电
    的头像 发表于 09-01 09:56 663次阅读
    浮思特 | ABOV 32位<b class='flag-5'>单片机</b>的技术演进与行业应用解析

    单片机用什么封装

    。深圳市安凯星科技有限公司在为拓邦、朗科、安徽龙多等客户开发方案时,会根据项目场景精准选择封装类型,确保性能与实用性平衡。 常见单片机封装类型及特点 DIP 封装:直插的经典之选 DIP(双列直插封装)是最基础的单片机封装
    的头像 发表于 08-01 13:47 896次阅读

    单片机的储存优点是什么

    单片机作为嵌入系统的核心,其储存系统是实现数据存储与程序运行的关键部分。与独立存储芯片相比,单片机的储存单元在集成度、功耗、可靠性等方面具备独特优势,这些优点使其能适应从消费电子到工业控制的多样化
    的头像 发表于 07-31 10:09 497次阅读

    怎么测单片机系统频率

    单片机系统频率是指单片机工作时的时钟频率,它直接影响单片机的运行速度和处理能力,准确测量系统频率对单片机应用开发、程序调试和性能优化具有重要意义。测量
    的头像 发表于 07-25 11:39 477次阅读

    单片机怎么驱动电机?

    在各类自动化设备和智能装置中,电机是重要的执行部件,而单片机作为控制核心,需要通过特定的方式驱动电机运转。单片机驱动电机并非直接连接即可,而是要根据电机类型和功率,搭配合适的驱动电路,才能实现稳定
    的头像 发表于 07-25 09:31 439次阅读

    单片机科普总结,建议收藏!

    单片机(MicrocontrollerUnit,MCU)作为嵌入系统的核心之一,在现代电子产品中无处不在。从智能家居、汽车电子,到工业控制、医疗设备,单片机支撑着无数智能化应用的发展。对于初学者
    的头像 发表于 04-07 11:58 4479次阅读
    <b class='flag-5'>单片机</b>科普总结,建议收藏!

    如何用单片ADC和DAC匹配改善电路

    我看了很多贵公司关于ADC和DAC改善的电路,比如在ADC采样前加电容电阻,DAC输出再加些电路什么的。那如果我用一些单片机或FPGA等片内的ADC和DAC又该如何该像你们所说的单片ADC和DAC一样匹配改善电路
    发表于 02-06 08:25

    什么是单片机的ADC接口

    在嵌入系统和工业自动化领域,单片机(Microcontroller)作为核心控制单元,承担着数据采集、处理和控制的重要任务。其中,模数转换器(Analog-to-Digital Converter
    的头像 发表于 02-03 11:27 3731次阅读

    AN4121-采用PIC16F单片机进行系统电源控制

    电子发烧友网站提供《AN4121-采用PIC16F单片机进行系统电源控制.pdf》资料免费下载
    发表于 01-21 14:42 0次下载
    AN4121-采用PIC<b class='flag-5'>16</b>F<b class='flag-5'>单片机</b>进行系统电源控制

    单片机Debug工具性能对比 单片机调试常用命令

    单片机(Microcontroller Unit, MCU)调试是嵌入开发中的一个重要环节,它帮助开发者发现和修复代码中的错误,优化程序性能。不同的单片机和开发环境可能使用不同的调试工具和命令
    的头像 发表于 12-19 09:56 2171次阅读