반응형
/*
flash memory를 사용하여 전원이 On/off시 count
*/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #include <stdio.h> #include "stm32f4xx.h" #include "lcd.h" uint32_t FLASH_DATA_SECTOR = 0x080E0000; // 섹터 11의 시작 메모리 번지 int main(void) { volatile unsigned short size = *(unsigned short*) (0x1FFF7A22); // Flash Size in KB volatile int value = ((int*) (FLASH_DATA_SECTOR))[0]; if (value == 0xffffffff) // Initial State: 초기화가 필요함. value = 0; value++; int ret; FLASH_Unlock(); // 잠금 해제 FLASH_ClearFlag( FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR); //에러 플래그들 초기화함. ret = FLASH_EraseSector(FLASH_Sector_11, VoltageRange_3); // 값 저장 전에는 섹터를 초기화해야함. ret = FLASH_ProgramWord(FLASH_DATA_SECTOR, value); // 한 바이트씩 저장하는 것은 FLASH_ProgramByte FLASH_Lock(); // 잠금 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); lcd_init(); char buf[255]; sprintf(buf, "%d th boot.", value); lcd_printxy(0, 1, buf); for (;;) { } } | cs |
반응형
'Study > 32-bit MCUs' 카테고리의 다른 글
[Elevator(ARM)] ADC (0) | 2018.10.25 |
---|---|
[Elevator(ARM)] BLE USART (0) | 2018.10.25 |
[Elevator(ARM)] key Matrix (0) | 2018.10.25 |
[Elevator(ARM)] DoorLock (0) | 2018.10.25 |
[Elevator(ARM)] Calculator (0) | 2018.10.25 |