А я всегда думал, что блок расчета CRC в STM32 считает CRC32...
Вот
здесь я выкладывал 2 функции, программную и железную для STM32. Результат их работы одинаков. И да, на вход блока CRC32 должны подаваться 32-х битные слова.
В "железной" функции по ссылке применена "uint32_t __rbit( uint32_t )", Кеил её прекрасно понимает. Она реверсирует слово. И, похоже, в Cortex-M0 такой команды нету...
А
здесь я сейчас нашел статейку про аппаратный блок расчета CRC в STM32...
А CRC16 я считаю программно.
CODE
/* --- crc16() -------------------------------------------------------------------------------------------- **
* Контрольная сумма crc16
* BYTE *buf - указатель на байтовый буфер
* short num - размер буфера в байтах
* Возвращает
* unsigned short crc16 буфера
* -------------------------------------------------------------------------------------------------------- */
unsigned short crc16( BYTE *buf, unsigned short num )
{
#define POLINOM 0xa001
int i;
WORD crc = 0xffff;
while ( num-- )
{ crc ^= *buf++;
i = 8;
do
{ if ( crc & 1 )
crc = ( crc >> 1 ) ^ POLINOM;
else
crc >>= 1;
} while ( --i );
}
return( crc );
#undef POLINOM
}