/* * -------------------------------------------------------------------------------------- * Company : 江苏中信博新能源科技股份有限公司上海子公司 2020-2021 版权所有 * -------------------------------------------------------------------------------------- * file Name : crc16.c * Description : crc-lib * -------------------------------------------------------------------------------------- * Tool Versions : uVision V5.29.0.0 * Target Device : STM32F103|GD32F103 * -------------------------------------------------------------------------------------- * Engineer : tangtao * Revision : V0.0 * Created Date : 2021.09.18 * -------------------------------------------------------------------------------------- * Engineer : * Revision : * Modified Date : * Additional Comments : * -------------------------------------------------------------------------------------- */ /************************************************* Function : CRC16_HalfWord() Description : CRC16_HalfWord Input : *buf, number Output : crc16 Return : unsigned short Engineer : tangtao Revision : V0.0 Modified Date : 2021.09.18 Additional Comments : *************************************************/ unsigned short CRC16_HalfWord(unsigned short *buf, unsigned short num_of_bytes) { unsigned short i = 0; unsigned char j = 0; unsigned short w_crc = 0xFFFF; unsigned char temp = 0; for(i = 0; i < num_of_bytes; i++) { temp = buf[i]>>8; w_crc ^= temp; for(j = 0; j < 8; j++) { if(w_crc & 1) { w_crc >>= 1; w_crc ^= 0xA001; } else { w_crc >>= 1; } } temp = (buf[i]&0xff); w_crc ^= temp; for(j = 0; j < 8; j++) { if(w_crc & 1) { w_crc >>= 1; w_crc ^= 0xA001; } else { w_crc >>= 1; } } } return w_crc; } /************************************************* Function : CRC16_Byte() Description : CRC16_Byte Input : *buf, number Output : crc16 Return : unsigned short Engineer : tangtao Revision : V0.0 Modified Date : 2021.09.18 Additional Comments : *************************************************/ unsigned short CRC16_Byte(unsigned char *buf, unsigned short num_of_bytes) { unsigned short i = 0; unsigned char j = 0; unsigned short w_crc = 0xFFFF; for(i = 0; i < num_of_bytes; i++) { w_crc ^= buf[i]; for(j = 0; j < 8; j++) { if(w_crc & 1) { w_crc >>= 1; w_crc ^= 0xA001; } else { w_crc >>= 1; } } } return w_crc; }