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

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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版