반응형

/*

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(01, 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

+ Recent posts