프로젝트 파일
펌웨어 다운로드를 위한 FLASH 메모리를 제어하는 기능을 추가해 본다.
FLASH 메모리 구성
FLASH Erase
함수
파라메터
사용 예
FLASH_EraseInitTypeDef EraseInit;
uint32_t SectorError;
HAL_StatusTypeDef status;
EraseInit.Sector = 시작 섹터 번호(1~7);
EraseInit.NbSectors = 섹터 갯수;
EraseInit.TypeErase = FLASH_TYPEERASE_SECTORS;
EraseInit.VoltageRange = FLASH_VOLTAGE_RANGE_4;
EraseInit.Banks = FLASH_BANK_1;
HAL_FLASH_Unlock();
status = HAL_FLASHEx_Erase(&EraseInit, &SectorError);
if (status == HAL_OK)
{
}
HAL_FLASH_Lock();
FLASH Write
함수
파라메터
사용예
HAL_StatusTypeDef status;
uint32_t buf[8];
HAL_FLASH_Unlock();
status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD, 0x08020000, (uint32_t)buf);
if (status == HAL_OK)
{
}
HAL_FLASH_Lock();
섹터 1번을 지웠다가 데이터를 Write 한다.
main.c에서 섹터 1번을 지우고 결과를 확인한다. UART 초기화 이후에 코드를 추가한다.
uartInit();
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
// FLASH Erase
//
FLASH_EraseInitTypeDef EraseInit;
uint32_t SectorError;
HAL_StatusTypeDef status;
EraseInit.Sector = 1;
EraseInit.NbSectors = 1;
EraseInit.TypeErase = FLASH_TYPEERASE_SECTORS;
EraseInit.VoltageRange = FLASH_VOLTAGE_RANGE_4;
EraseInit.Banks = FLASH_BANK_1;
HAL_FLASH_Unlock();
uartPrintf(_DEF_UART1, "FLASH Erase..");
status = HAL_FLASHEx_Erase(&EraseInit, &SectorError);
if (status == HAL_OK)
{
uartPrintf(_DEF_UART1, "OK\\n");
}
else
{
uartPrintf(_DEF_UART1, "Fail\\n");
}
HAL_FLASH_Lock();
실행 결과