/* * flash.c * * Created on: 2019. 7. 4. * Author: parkyj */ uint8_t flashinit = 0; uint8_t Flash_write(uint8_t* data) // ?기함? { /*Variable used for Erase procedure*/ static FLASH_EraseInitTypeDef EraseInitStruct; static uint32_t PAGEError = 0; uint8_t ret = 0; /* Fill EraseInit structure*/ EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES; EraseInitStruct.PageAddress = FLASH_USER_START_ADDR; EraseInitStruct.NbPages = (FLASH_USER_END_ADDR - FLASH_USER_START_ADDR) / FLASH_PAGE_SIZE; __HAL_RCC_TIM6_CLK_DISABLE(); // 매인???머?? ????? HAL_FLASH_Unlock(); // lock ??? if(flashinit == 0){ flashinit= 1; //FLASH_PageErase(StartAddr); if (HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError) != HAL_OK){ printf("Erase Failed \r\n"); } } // FLASH_If_Erase(); ret = Flash_RGB_Data_Write(&data[bluecell_stx]); HAL_FLASH_Lock(); // lock ?그기 __HAL_RCC_TIM6_CLK_ENABLE(); // 매인???머?? ?????? return ret; } void Flash_InitRead(void) // ?기함? { uint32_t Address = 0; Address = StartAddr; for(uint32_t i = 0; i < 16; i++ ){ printf("%08x : %02X \n",Address ,*(uint8_t*)Address); Address++; } #if 0 // PYJ.2019.03.27_BEGIN -- for(uint32_t i = 0; i < 13848; i++ ){ printf("%08x : %02X \n",Address ,*(uint8_t*)Address); Address++; } Address = StartAddr; for(uint32_t i = 0; i < 13848; i++ ){ printf("%02X ",*(uint8_t*)Address); Address++; } #endif // PYJ.2019.03.27_END -- } typedef void (*fptr)(void); fptr jump_to_app; uint32_t jump_addr; void Jump_App(void){ __HAL_RCC_TIM6_CLK_DISABLE(); // 매인???머?? ????? printf("boot loader start\n"); //메세? 출력 jump_addr = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4); jump_to_app = (fptr) jump_addr; /* init user app's sp */ printf("jump!\n"); __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS); jump_to_app(); }