Доброе время суток!
Помогите разобраться с контрольной суммой. Я планирую использовать библиотеку UNM. Для того чтобы послать запрос с контрольной суммой нужно ее сначала вычислить . В документации есть пример на Си:

CRC – код циклического контроля
Контрольная сумма (CRC16) представляет собой циклический проверочный код на основе полинома A001h. Передающее устройство формирует контрольную сумму для всех байт передаваемого сообщения. Принимающее устройство аналогичным образом формирует контрольную сумму для всех байт принятого сообщения и сравнивает ее с контрольной суммой, принятой от передающего устройства. При несовпадении сформированной и принятой контрольных сумм генерируется сообщение об ошибке.
Поле контрольной суммы занимает два байта. Контрольная сумма в сообщении передается младшим байтом вперед.
Контрольная сумма формируется по следующему алгоритму:
1) загрузка CRC регистра (16 бит) единицами (FFFFh);
2) исключающее ИЛИ с первыми 8 битами байта сообщения и содержимым CRC регистра;
3) сдвиг результата на один бит вправо;
4) если сдвигаемый бит = 1, исключающее ИЛИ содержимого регистра со значением A001h;
5) если сдвигаемый бит = 0, повторить шаг 3;
6) повторять шаги 3, 4, 5, пока не будут выполнены 8 сдвигов;
7) исключающее ИЛИ со следующими 8 битами байта сообщения и содержимым CRC регистра;
8) повторять шаги 3 – 7, пока все байты сообщения не будут обработаны;
9) конечное содержимое регистра будет содержать контрольную сумму.

Пример программы CRC генерации кода с использованием языка С. Функция берет
два аргумента:
Unsigned char* data <- a pointer to the message buffer
Unsigned char length <- the quantity of bytes in the message buffer

The function returns the CRC value as a type of unsigned integer.
Unsigned int crc_chk(unsigned char* data, unsigned char length)
{int j;
unsigned int reg_crc=0xFFFF;
while(length--)
{
reg_crc ^= *data++;
for(j=0;j<8;j++)
{
if(reg_crc & 0х01) reg_crc=(reg_crc>>1) ^ 0xA001; // LSB(b0)=1
else reg_crc=reg_crc>>1;
}
}
return reg_crc;
}

Может у кого есть пример вычисления СRC16 на ST ?