STM32F0xx Standard Peripherals Firmware Library: main.c Source File

STM32F0xx Standard Peripherals 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>&copy; 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****/
STM32L1xx Standard Peripherals Library: Footer

 

 

 For complete documentation on STM32 Microcontrollers visit www.st.com/STM32