stm32 串口通信中的 CRC16校验的问题
#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;
int count1=0;
int Flag=0;
uint8_t PX1;
uint16_t PX2;
uint8_t *p=PX1;
uint16_t sum;
int i,j,z,k;
u8 table;
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==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
RE:stm32 串口通信中的 CRC16校验的问题
1、网上有现成的CRC校验函数,看看你上位机使用的crc 和stm32使用的crc 精度是不是一样的, crc 精度包括crc8 crc16crc32;2、建议自己写一个ut用例, 测试下自己的crc代码是否写正确的,可以用一个软件生成crc ,再和自己代码crc生成的数据比一次。
3、你首先要自己验证自己的函数, 再上板测试
RE:stm32 串口通信中的 CRC16校验的问题
CRC16的校验码产生方式不同,还是用统一的代码产生CRC校验吗把。:D回复:stm32 串口通信中的 CRC16校验的问题
回复第 2 楼 于2014-03-27 21:56:17发表:1、网上有现成的CRC校验函数,看看你上位机使用的crc 和stm32使用的crc 精度是不是一样的, crc 精度包括crc8 crc16crc32;
2、建议自己写一个ut用例, 测试下自己的crc代码是否写正确的,可以用一个软件生成crc ,再和自己代码crc生成的数据比一次。
3、你首先要自己验证自己的函数, 再上板测试
我将写在板子上的CRC16校验程序放在microsoft visual c++ 6.0中试验了一下,他的结果也是D7 96但是我用板子校验,结果怎么就错了真是奇怪了。不懂为什么不懂哪里出错了
回复:stm32 串口通信中的 CRC16校验的问题
回复第 3 楼 于2014-03-28 12:53:32发表:CRC16的校验码产生方式不同,还是用统一的代码产生CRC校验吗把。:D
是的我板子里面的程序和上位机中的校验方式是一样的。不懂为什么结果不同。晕:dizzy:
RE:stm32 串口通信中的 CRC16校验的问题
crc16= 0xffff;在子函数中没加上,全局变量...RE:stm32 串口通信中的 CRC16校验的问题
有crc的校验软件,可以用!RE:stm32 串口通信中的 CRC16校验的问题
CRC校验算法好像分好几种,记得以前在有个工具上见到的RE:stm32 串口通信中的 CRC16校验的问题
CRC校验系数有很多种,你可以先用CRC软件计算,然后联调看看每一步是不是计算正确
页:
[1]