flash(3395).c 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. * flash.c
  3. *
  4. * Created on: 2019. 7. 4.
  5. * Author: parkyj
  6. */
  7. uint8_t flashinit = 0;
  8. uint8_t Flash_write(uint8_t* data) // ?“°ê¸°í•¨?ˆ˜
  9. {
  10. /*Variable used for Erase procedure*/
  11. static FLASH_EraseInitTypeDef EraseInitStruct;
  12. static uint32_t PAGEError = 0;
  13. uint8_t ret = 0;
  14. /* Fill EraseInit structure*/
  15. EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
  16. EraseInitStruct.PageAddress = FLASH_USER_START_ADDR;
  17. EraseInitStruct.NbPages = (FLASH_USER_END_ADDR - FLASH_USER_START_ADDR) / FLASH_PAGE_SIZE;
  18. __HAL_RCC_TIM6_CLK_DISABLE(); // 매ì�¸???�´ë¨¸ë?? ? •ì§??•©?‹ˆ?‹¤
  19. HAL_FLASH_Unlock(); // lock ??�
  20. if(flashinit == 0){
  21. flashinit= 1;
  22. //FLASH_PageErase(StartAddr);
  23. if (HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError) != HAL_OK){
  24. printf("Erase Failed \r\n");
  25. }
  26. }
  27. // FLASH_If_Erase();
  28. ret = Flash_RGB_Data_Write(&data[bluecell_stx]);
  29. HAL_FLASH_Lock(); // lock ?ž ê·¸ê¸°
  30. __HAL_RCC_TIM6_CLK_ENABLE(); // 매ì�¸???�´ë¨¸ë?? ?ž¬?‹œ?ž‘?•©?‹ˆ?‹¤
  31. return ret;
  32. }
  33. void Flash_InitRead(void) // ?“°ê¸°í•¨?ˆ˜
  34. {
  35. uint32_t Address = 0;
  36. Address = StartAddr;
  37. for(uint32_t i = 0; i < 16; i++ ){
  38. printf("%08x : %02X \n",Address ,*(uint8_t*)Address);
  39. Address++;
  40. }
  41. #if 0 // PYJ.2019.03.27_BEGIN --
  42. for(uint32_t i = 0; i < 13848; i++ ){
  43. printf("%08x : %02X \n",Address ,*(uint8_t*)Address);
  44. Address++;
  45. }
  46. Address = StartAddr;
  47. for(uint32_t i = 0; i < 13848; i++ ){
  48. printf("%02X ",*(uint8_t*)Address);
  49. Address++;
  50. }
  51. #endif // PYJ.2019.03.27_END --
  52. }
  53. typedef void (*fptr)(void);
  54. fptr jump_to_app;
  55. uint32_t jump_addr;
  56. void Jump_App(void){
  57. __HAL_RCC_TIM6_CLK_DISABLE(); // 매ì�¸???�´ë¨¸ë?? ? •ì§??•©?‹ˆ?‹¤
  58. printf("boot loader start\n"); //메세� 출력
  59. jump_addr = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
  60. jump_to_app = (fptr) jump_addr;
  61. /* init user app's sp */
  62. printf("jump!\n");
  63. __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
  64. jump_to_app();
  65. }