X^4 + X^3 + X^2 + 1 */#define CRC_POLYNOMIAL_16B 0x1021 /* X^16 + X^12 + X^5 + 1 */#define CRC_POLYNOMIAL_32B 0x04C11DB7 /* X^32 + X^26 + X^23 + X^22 + X^16 + X^12 + X^11 + X^10 + X^8 + X^7 + X^5 + X^4 + X^2 + X^1 + 1 *//* Private macro -------------------------------------------------------------*//* Private variables ---------------------------------------------------------*/CRC_HandleTypeDef hcrc;uint32_t aDataBuffer[BUFFER_SIZE]={0x12345678};/* Private function prototypes -----------------------------------------------*/void SystemClock_Config(void);static void MX_CRC_Init(void);/* Private functions ---------------------------------------------------------*//** * @brief Main program * @param None * @retval None */int main(void) { /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_CRC_Init(); /*##-1- Compute the CRC for 8-bit Data Streams### * ####################################################### * The crc is initially initialized to 0xFFFFFFFF, correspondingly, the final XOR is performed with 0xFFFFFFFF. */ printf("The CRC code using the user-defined polynomial, the aDataBuffer is 0x%Xn", (unsigned int)aDataBuffer[0]); hcrc.Instance = CRC; hcrc.Init.DefaultPolynomialUse = DEFAULT_CRC32_POLY; hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE; hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_NONE; hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_NONE; hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_WORDS; if (HAL_CRC_Init(&hcrc) != HAL_OK) { Error_Handler(); } /* Compute the CRC value */ uint32_t uwCRCValue = HAL_CRC_Calculate(&hcrc, aDataBuffer, BUFFER_SIZE); printf("CRC-32C (8-bit Data Streams): 0x%Xn", (unsigned int)uwCRCValue); /*##-2- Compute the CRC for 16-bit Data Streams### * ######################################################## * The crc is initially initialized to 0xFFFF, correspondingly, the final XOR is performed with 0xFFFF. */ hcrc.Init.DefaultPolynomialUse = DEFAULT_CRC16_POLY; hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE; hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_HALFWORDS; if (HAL_CRC_Init(&hcrc) != HAL_OK) { Error_Handler(); } /* Compute the CRC value */ uwCRCValue = HAL_CRC_Calculate(&hcrc, aDataBuffer, BUFFER_SIZE); printf("CRC-CCITT (16-bit Data Streams): 0x%Xn", (unsigned int)uwCRCValue); /*##-3- Compute the CRC for 32-bit Data Streams### * ######################################################## * The crc is initially initialized to 0xFFFFFFFF, correspondingly, the final XOR is performed with 0xFFFFFFFF. */ hcrc.Init.DefaultPolynomialUse = DEFAULT_CRC32_POLY; hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE; hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_WORDS; if (HAL_CRC_Init(&hcrc) != HAL_OK) { Error_Handler(); } /* Compute the CRC value */ uwCRCValue = HAL_CRC_Calculate(&hcrc, aDataBuffer, BUFFER_SIZE); printf("CRC-32 (32-bit Data Streams): 0x%Xn", (unsigned int)uwCRCValue); /* Infinite loop */ while (1) { } /* USER CODE END 3 */}/** * @brief System Clock Configuration * @retval None */void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure. */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /** Initializes the CPU, AHB and APB buses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) { Error_Handler(); }}/** * @brief CRC Initialization Function * @param None * @retval None */static void MX_CRC_Init(void) { hcrc.Instance = CRC; hcrc.Init.DefaultPolynomialUse = DEFAULT_CRC32_POLY; hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE; hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_NONE; hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_DISABLE; hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_WORDS; if (HAL_CRC_Init(&hcrc) != HAL_OK) { Error_Handler(); }}/** * @brief This function is executed in case of error occurrence. * @param None * @retval None */void Error_Handler(void) { /* USER CODE BEGIN Error_Handler_Debug */ /* User can add his own implementation to report the HAL error return state */ __disable_irq(); while (1) { } /* USER CODE END Error_Handler_Debug */}/** * @brief EXTI line detection callbacks. * @param GPIO_Pin: Specifies the pins connected EXTI line * @retval None */void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { /* Prevent unused argument(s) compilation warning */ UNUSED(GPIO_Pin); /* NOTE: This function Should not be modified, when the callback is needed, * the HAL_GPIO_EXTI_Callback could be implemented in the user file */}/** * @} *//** * @} *//************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
问题代码:
1、程序没有定义 main 函数,导致编译错误。
2、程序中定义的变量和宏没有使用和说明,不便于代码阅读。
3、程序中使用了 printf 函数,但没有包含相应的头文件,导致编译错误。
4、程序中调用了未定义的函数 Error_Handler(),需要提供相应的函数实现。