STM32F0xx Standard Peripherals Firmware Library
|
STM32F0xx_StdPeriph_Examples/CRC/CRC_32BitsCRCMessage/main.c
Go to the documentation of this file.
00001 /** 00002 ****************************************************************************** 00003 * @file CRC/CRC_32BitsCRCMessage/main.c 00004 * @author MCD Application Team 00005 * @version V1.4.0 00006 * @date 24-July-2014 00007 * @brief Main program body 00008 ****************************************************************************** 00009 * @attention 00010 * 00011 * <h2><center>© COPYRIGHT 2014 STMicroelectronics</center></h2> 00012 * 00013 * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); 00014 * You may not use this file except in compliance with the License. 00015 * You may obtain a copy of the License at: 00016 * 00017 * http://www.st.com/software_license_agreement_liberty_v2 00018 * 00019 * Unless required by applicable law or agreed to in writing, software 00020 * distributed under the License is distributed on an "AS IS" BASIS, 00021 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00022 * See the License for the specific language governing permissions and 00023 * limitations under the License. 00024 * 00025 ****************************************************************************** 00026 */ 00027 00028 00029 /* Includes ------------------------------------------------------------------*/ 00030 #include "main.h" 00031 00032 /** @addtogroup STM32F0xx_StdPeriph_Examples 00033 * @{ 00034 */ 00035 00036 /** @addtogroup CRC_32BitsCRCMessage 00037 * @{ 00038 */ 00039 00040 /* Private typedef -----------------------------------------------------------*/ 00041 /* Private define ------------------------------------------------------------*/ 00042 #define countof(a) (uint8_t)(sizeof(a) / sizeof(*(a))) 00043 #define BUFFER_SIZE (countof(CRCBuffer)) 00044 00045 /* Private macro -------------------------------------------------------------*/ 00046 /* Private variables ---------------------------------------------------------*/ 00047 const uint32_t CRCBuffer[] = 00048 { 00049 0x00001021, 0x20423063, 0x408450a5, 0x60c670e7, 0x9129a14a, 0xb16bc18c, 00050 0xd1ade1ce, 0xf1ef1231, 0x32732252, 0x52b54294, 0x72f762d6, 0x93398318, 00051 0xa35ad3bd, 0xc39cf3ff, 0xe3de2462, 0x34430420, 0x64e674c7, 0x44a45485, 00052 0xa56ab54b, 0x85289509, 0xf5cfc5ac, 0xd58d3653, 0x26721611, 0x063076d7, 00053 0x569546b4, 0xb75ba77a, 0x97198738, 0xf7dfe7fe, 0xc7bc48c4, 0x58e56886, 00054 0x78a70840, 0x18612802, 0xc9ccd9ed, 0xe98ef9af, 0x89489969, 0xa90ab92b, 00055 0x4ad47ab7, 0x6a961a71, 0x0a503a33, 0x2a12dbfd, 0xfbbfeb9e, 0x9b798b58, 00056 0xbb3bab1a, 0x6ca67c87, 0x5cc52c22, 0x3c030c60, 0x1c41edae, 0xfd8fcdec, 00057 0xad2abd0b, 0x8d689d49, 0x7e976eb6, 0x5ed54ef4, 0x2e321e51, 0x0e70ff9f, 00058 0xefbedfdd, 0xcffcbf1b, 0x9f598f78, 0x918881a9, 0xb1caa1eb, 0xd10cc12d, 00059 0xe16f1080, 0x00a130c2, 0x20e35004, 0x40257046, 0x83b99398, 0xa3fbb3da, 00060 0xc33dd31c, 0xe37ff35e, 0x129022f3, 0x32d24235, 0x52146277, 0x7256b5ea, 00061 0x95a88589, 0xf56ee54f, 0xd52cc50d, 0x34e224c3, 0x04817466, 0x64475424, 00062 0x4405a7db, 0xb7fa8799, 0xe75ff77e, 0xc71dd73c, 0x26d336f2, 0x069116b0, 00063 0x76764615, 0x5634d94c, 0xc96df90e, 0xe92f99c8, 0xb98aa9ab, 0x58444865, 00064 0x78066827, 0x18c008e1, 0x28a3cb7d, 0xdb5ceb3f, 0xfb1e8bf9, 0x9bd8abbb, 00065 0x4a755a54, 0x6a377a16, 0x0af11ad0, 0x2ab33a92, 0xed0fdd6c, 0xcd4dbdaa, 00066 0xad8b9de8, 0x8dc97c26, 0x5c644c45, 0x3ca22c83, 0x1ce00cc1, 0xef1fff3e, 00067 0xdf7caf9b, 0xbfba8fd9, 0x9ff86e17, 0x7e364e55, 0x2e933eb2, 0x0ed11ef0 00068 }; 00069 00070 __IO uint32_t ComputedCRC = 0; 00071 uint32_t ExpectedCRC = 0xEBF5058C; /* The expected CRC value of CRCBuffer using the 00072 polynomial X32 + X26 + X23 + X22 + X16 + X12 + X11 + 00073 X10 +X8 + X7 + X5 + X4 + X2+ X + 1 */ 00074 00075 /* Private function prototypes -----------------------------------------------*/ 00076 static void CRC_Config(uint32_t poly); 00077 00078 /* Private functions ---------------------------------------------------------*/ 00079 00080 /** 00081 * @brief Main program. 00082 * @param None 00083 * @retval None 00084 */ 00085 int main(void) 00086 { 00087 /*!< At this stage the microcontroller clock setting is already configured, 00088 this is done through SystemInit() function which is called from startup 00089 file (startup_stm32f0xx.s) before to branch to application main. 00090 To reconfigure the default setting of SystemInit() function, refer to 00091 system_stm32f0xx.c file 00092 */ 00093 00094 /* Initialize LEDs available on STM32072B-EVAL board */ 00095 STM_EVAL_LEDInit(LED1); 00096 STM_EVAL_LEDInit(LED3); 00097 00098 /* Configure the CRC peripheral to use the polynomial X32 + X26 + X23 + X22 + 00099 X16 + X12 + X11 + X10 +X8 + X7 + X5 + X4 + X2+ X +1 */ 00100 CRC_Config(0x4C11DB7); 00101 00102 /* Compute the CRC value of the 8-bit buffer: CRCBuffer */ 00103 ComputedCRC = CRC_CalcBlockCRC((uint32_t *)CRCBuffer, BUFFER_SIZE); 00104 00105 /* Check if the computed CRC matches the expected one */ 00106 if (ComputedCRC != ExpectedCRC) 00107 { 00108 /* Turn on LD3 */ 00109 STM_EVAL_LEDOn(LED3); 00110 } 00111 else 00112 { 00113 /* Turn on LD1 */ 00114 STM_EVAL_LEDOn(LED1); 00115 } 00116 00117 /* Infinite loop */ 00118 while(1) 00119 { 00120 } 00121 } 00122 00123 /** 00124 * @brief Configure CRC peripheral to use 32-bit polynomials 00125 * @param poly: the CRC polynomial 00126 * @retval None 00127 */ 00128 static void CRC_Config(uint32_t poly) 00129 { 00130 /* Enable CRC AHB clock interface */ 00131 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE); 00132 00133 /* DeInit CRC peripheral */ 00134 CRC_DeInit(); 00135 00136 /* Init the INIT register */ 00137 CRC_SetInitRegister(0); 00138 00139 /* Select 32-bit polynomial size */ 00140 CRC_PolynomialSizeSelect(CRC_PolSize_32); 00141 00142 /* Set the polynomial coefficients */ 00143 CRC_SetPolynomial(poly); 00144 } 00145 00146 #ifdef USE_FULL_ASSERT 00147 00148 /** 00149 * @brief Reports the name of the source file and the source line number 00150 * where the assert_param error has occurred. 00151 * @param file: pointer to the source file name 00152 * @param line: assert_param error line source number 00153 * @retval None 00154 */ 00155 void assert_failed(uint8_t* file, uint32_t line) 00156 { 00157 /* User can add his own implementation to report the file name and line number, 00158 ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ 00159 00160 /* Infinite loop */ 00161 while (1) 00162 { 00163 } 00164 } 00165 #endif 00166 00167 /** 00168 * @} 00169 */ 00170 00171 /** 00172 * @} 00173 */ 00174 00175 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/