你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32 串口通信中的 CRC16校验的问题

[复制链接]
wuhong377 提问时间:2014-3-27 14:49 /
 #include
#include "hw_config.h"
 
        uint16_t adcx1,adcx2,temp1,temp2,crc_temp;
//        uint16_t crc16=0xffff;
        uint16_t Reg_CRC=0xffff;
        uint8_t uart1_buf[5];
        int count1=0;
        int Flag=0;
        uint8_t PX1[400];
        uint16_t PX2[30];
        uint8_t *p=PX1;
        uint16_t sum;
        int i,j,z,k;
        u8 table[5];
        uint8_t *p2=uart1_buf;
 
 
void Delay(void)
{
        int x,y;
        for(x=1000;x>0;x--)
                for(y=1000;y>0;y--);
}
 
 
 
 
int main(void)
{       
 
 
 
           SystemInit();                  /*系统初始化*/
        NVIC_Configuration();
        LED_Configuration();
        USART_Configuration();
        ADC_Configuration();
 
        while (1)
        {
 
 
                if(Flag==1)
                {
                       
                        if(uart1_buf[0]==0x03)
                        {
               
                                Uart1_PutString(p2 , 5);
//                                crc16=0xffff ;
//                                for(z=0;z 1) ^ 0xa001;
//                else 
//                        crc16 = crc16 >> 1;
//        }
//
//}
 
uint16_t  CRC16_Check(uint8_t *Pushdata,uint8_t length)
{
        uint16_t Reg_CRC=0xffff;
        int k, j;
        for(k=0;k1^0xA001;
                        else
                                Reg_CRC >>=1;
                }       
        }
        return (Reg_CRC);
}
 
 
 
这是我stm32中程序,我上位机用labview发送03 c8 c8 另加上这三个数的CRC16校验码 总共五个数值发给stm32下位机,下位机中判断第一位是否为03 和最后两位CRC校验码是否正确。判断正确之后再将ADC1采样的值发送给上位机。 这里上位机03 C8 C8 的CRC16校验的结果是 D7 96(先低位再高位)。而我下位机的程序无论是用uint16_t  CRC16_Check(uint8_t *Pushdata,uint8_t length)这个函数还是用
                         for(z=0;z
收藏 评论8 发布时间:2014-3-27 14:49

举报

8个回答
wkuang 回答时间:2014-3-27 21:56:17

RE:stm32 串口通信中的 CRC16校验的问题

1、网上有现成的CRC校验函数,看看你上位机使用的crc 和stm32使用的crc 精度是不是一样的, crc 精度包括crc8 crc16  crc32;
2、建议自己写一个ut用例, 测试下自己的crc代码是否写正确的,可以用一个软件生成crc ,再和自己代码crc生成的数据比一次。
3、你首先要自己验证自己的函数, 再上板测试
我爱下载 回答时间:2014-3-28 12:53:32

RE:stm32 串口通信中的 CRC16校验的问题

CRC16的校验码产生方式不同,还是用统一的代码产生CRC校验吗把。
wuhong377 回答时间:2014-3-28 14:53:01

回复:stm32 串口通信中的 CRC16校验的问题

回复第 2 楼 于2014-03-27 21:56:17发表:
1、网上有现成的CRC校验函数,看看你上位机使用的crc 和stm32使用的crc 精度是不是一样的, crc 精度包括crc8 crc16  crc32;
2、建议自己写一个ut用例, 测试下自己的crc代码是否写正确的,可以用一个软件生成crc ,再和自己代码crc生成的数据比一次。
3、你首先要自己验证自己的函数, 再上板测试
 
 
 
我将写在板子上的CRC16校验程序放在microsoft visual c++ 6.0中试验了一下,他的结果也是D7 96但是我用板子校验,结果怎么就错了真是奇怪了。不懂为什么不懂哪里出错了
 
 
wuhong377 回答时间:2014-3-28 14:53:28

回复:stm32 串口通信中的 CRC16校验的问题

回复第 3 楼 于2014-03-28 12:53:32发表:
CRC16的校验码产生方式不同,还是用统一的代码产生CRC校验吗把。
 
 
 
是的我板子里面的程序和上位机中的校验方式是一样的。不懂为什么结果不同。晕
 
有缘于你 回答时间:2014-3-31 15:20:28

RE:stm32 串口通信中的 CRC16校验的问题

crc16  = 0xffff;在子函数中没加上,全局变量...
青檬 回答时间:2014-3-31 15:56:15

RE:stm32 串口通信中的 CRC16校验的问题

有crc的校验软件,可以用!
dzc2001 回答时间:2014-4-2 16:53:22

RE:stm32 串口通信中的 CRC16校验的问题

CRC校验算法好像分好几种,记得以前在有个工具上见到的
feiante-155820 回答时间:2014-4-12 20:43:47

RE:stm32 串口通信中的 CRC16校验的问题

CRC校验系数有很多种,你可以先用CRC软件计算,然后联调看看每一步是不是计算正确

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版