crc.c 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /******************************* (C) LiteMesh **********************************
  2. * @module crc
  3. * @file crc.c
  4. * @version 1.0.0
  5. * @date XX.XX.XXXX
  6. * $brief crc
  7. *******************************************************************************
  8. * @history Version Author Comment
  9. * XX.XX.XXXX 1.0.0 kim First release.
  10. *******************************************************************************
  11. */
  12. #include "stm32f4xx.h"
  13. #include "crc.h"
  14. #include "common_config.h"
  15. /**
  16. * @brief
  17. * @retval
  18. */
  19. void CRC_Init(void)
  20. {
  21. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_CRC, ENABLE);
  22. CRC->CR |= CRC_CR_RESET;
  23. }
  24. /**
  25. * @brief
  26. * @retval
  27. */
  28. void CRC_DeInit(void)
  29. {
  30. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_CRC, DISABLE);
  31. }
  32. /**
  33. * @brief Читаем crc из последних 4х байт записанной прошивки
  34. * @retval
  35. */
  36. uint32_t CRC_Read(void) {
  37. uint32_t* ptr = (uint32_t*)USER_FLASH_CRC_ADDRESS;
  38. return *ptr;
  39. }
  40. /**
  41. * @brief Считаем crc для записанной прошивки
  42. * @retval
  43. */
  44. uint32_t CRC_Calcucate(void) {
  45. uint32_t res;
  46. /* Reset CRC */
  47. CRC->CR = ((uint8_t)0x01);
  48. for(uint32_t* ptr=(uint32_t*)USER_FLASH_FIRST_PAGE_ADDRESS;ptr != (uint32_t*)USER_FLASH_CRC_ADDRESS;ptr++)
  49. CRC->DR = *ptr; // добавляем всю прошивку в CRC
  50. res = CRC->DR;
  51. return res;
  52. }
  53. /******************************* (C) SWITRON *********************************/