static uint32_t iap_calc_crc(void) { RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE); CRC_ResetDR(); CRC_CalcBlockCRC((uint32_t *) START_OF_USER_CODE, (SIZE_OF_CODE) >> 2); return CRC_GetCRC(); }
uint32_t PIOS_BL_HELPER_CRC_Memory_Calc() { const struct pios_board_info * bdinfo = &pios_board_info_blob; PIOS_BL_HELPER_CRC_Ini(); CRC_ResetDR(); CRC_CalcBlockCRC((uint32_t *) bdinfo->fw_base, (bdinfo->fw_size) >> 2); return CRC_GetCRC(); }
void CRC_test(unsigned int calData) { unsigned int temp = 0; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE); CRC_ResetDR(); CRC_CalcCRC(calData); temp = CRC_GetCRC(); //temp = temp; //why ,不加上这句话就看不到temp的真实值。 uart_printf("crc=0x%x\r\n",temp); }
uint32_t crc_memory_calc() { CRC_ResetDR(); CRC_CalcBlockCRC((uint32_t *) START_OF_USER_CODE, (SIZE_OF_CODE) >> 2); return CRC_GetCRC(); }
/** * @brief This function handles USRAT interrupt request. * @param None * @retval None */ void USARTx_IRQHandler(void) { #ifdef MODE_TRANSMITTER /* ------------------ USART in mode Tramitter ------------------------------*/ if (USART_GetITStatus(USARTx, USART_IT_TXE) == SET) { if (TxIndex < 0x48) { /* Send TxBuffer data */ USART_SendData(USARTx, TxBuffer[TxIndex]); /* Compute 8-bit CRC */ CRC_CalcCRC8bits(TxBuffer[TxIndex++]); } else if (TxIndex == 0x48) { /* Get computed computed value */ TxBuffer[TxIndex] = (uint8_t)CRC_GetCRC(); /* Reset CRC calculation unit */ CRC_ResetDR(); /* Send CRC computed value */ USART_SendData(USARTx, TxBuffer[TxIndex]); /* Disable the USARTx transmit data register empty interrupt */ USART_ITConfig(USARTx, USART_IT_TXE, DISABLE); /*Discard CRC sent value*/ TxBuffer[TxIndex] = 0; /*reset TxBuffer index*/ TxIndex = 0; } } #else /* ------------------ USART in mode Receiver -------------------------------*/ if (USART_GetITStatus(USARTx, USART_IT_RXNE) == SET) { if (RxIndex < 0x48) { /* Receive the USART data */ RxBuffer[RxIndex] = USART_ReceiveData(USARTx); /* compute 8-bit CRC */ CRC_CalcCRC8bits(RxBuffer[RxIndex++]); } else if (RxIndex == 0x48) { /* Get computed computed value */ ComputedCRC = (uint8_t)CRC_GetCRC(); /* Reset CRC calculation unit */ CRC_ResetDR(); /* Recive expected CRC value */ RxBuffer[RxIndex] = USART_ReceiveData(USARTx); /* Compare computed CRC and recived CRC values*/ if (ComputedCRC == RxBuffer[RxIndex]) { /* LED3 Off */ STM_EVAL_LEDOff(LED3); /* Toggle LED2 */ STM_EVAL_LEDToggle(LED2); } else { /* LED3 On */ STM_EVAL_LEDOn(LED3); /* LED2 Off */ STM_EVAL_LEDOff(LED2); } /* Reset RxBuffer index */ RxIndex = 0; } } #endif /* MODE_TRANSMITTER */ }
/** * @brief Computes the 32-bit CRC of a given data word(32-bit). * @param Data: data word(32-bit) to compute its CRC * @retval : 32-bit CRC */ uint32_t CRC_CalcCRC(uint32_t Data) { CRC->DR = Data; CRC->DR = CRC_GetCRC();//gai return (CRC->DR); }