플젝하다보니 모르는 용어 및 기술이 많아서 추가 기재
1. STM32에서 Flash란?
- Flash : 프로그램이 저장되는 비휘발성 메모리(전원 꺼져도 유지)
- STM32는 보통
- Flash : 코드(.text) + 상수(.rodata) + 설정값 저장
- SRAM : 실행 중 변수/스택/힙 (전원 끄면 휘발)
⇒ 원래 cal 3140으로 변경한 값은 RAM 변수(vrefint_mv_cal)에 들어감, 리셋하면 초기값으로 돌아감
그래서 Flash에 저장, 영구 보관
2. Flash는 RAM처럼 그냥 대입이 안됨
→ Flash는 구조적으로 쓰기 제약 있음, STM32F1 기준으로 기억할 이하 3가지
A. 페이지 단위로 지움
- Flash는 쓰기 전 해당 페이지를 erase, 모든 비트를 1로 만들어야 함
- erase 후 상태는 보통 0xFFFF(halfword 기준), 메모리 덤프 보면 전부 FF
B. 쓰기는 1→0만 가능
- Flash 셀은 1을 0으로 태우는 방식, 이미 0이 된 비트를 다시 1로 올릴 수 없음
- 값을 수정하려면
- 페이지 erase(전부 1로 복구)
- 새 데이터 write
C. 기록 단위가 있다 (STM32F1은 주로 halfword)
- STM32F103은 HAL에서 보통 16-bit(halfword)단위로 program
- 그래서 HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, addr, value16) 형태를 기용