BASIC4MCU | 질문게시판 | 답변 : EEPROM 사용법에 관해 질문 드립니다.
페이지 정보
작성자 master 작성일2018-02-05 12:18 조회9,317회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=176
본문
//IAR HAl 드라이버 환경에서 STM32f103의 외부 EEPROM을 사용 하려고 합니다.//----------------------------------------------------------------------//<main.c>unsigned int pwm;void Lightmodify(){ //램프 밝기 설정if(remData.rByte.data==1){ //리모컨 1번 입력이 들어올때마다 pwm 10씩 증가if(pwm>=400)return; //400 정도 까지만 증가pwm+=10;PWM_Value(pwm);}if(remData.rByte.data==2){ //리모컨 2번 입력은 10씩 감소if(pwm<=200)return;pwm-=10;PWM_Value(pwm);}}//void IR_Reset(){switch(remData.rByte.data){case 10: // 리모컨 10번 입력을 받으면 EEPROM 0번 주소에 pwm 값을 저장WriteEEpromByte(0,pwm); PWM_Value(pwm); break;}}//---------------------------------------------------------------------//위 와같이 함수를 만들고 전원을 껏다 키면 아래 main 문에서 저장된 값을 읽어오려고 합니다.int main(void){int bret;EEPROM_Init();PWM_Init();GPIO_Setting();Timer3_Init();pwm=ReadEEpromByte(0); //EEPROM의 0번 주소에서 값을 읽은것을 pwm변수에 대입PWM_Value(pwm); //램프 밝기while(1){bret=IR_Check(); //리모컨 입력if(!bret)continue;Lightmodify();IR_Reset();}}//그런데 문제는 전원을 껏다 키면 계속 다른 값이 EEPROM에 들어와 있어서//정상적으로 저장한 데이터 읽어오지 못하고 있습니다.왜그런지 감이 안와서 질문 드립니다.//아래는 EEPROM의 Read Write 문 첨부합니다.<stm32f103_eeprom.c>void WriteEEpromByte(uint8_t Reg,uint8_t Value){HAL_StatusTypeDef status=HAL_OK;status=HAL_I2C_Mem_Write(&I2cHandle,I2C1_ADDRESS,(uint16_t)Reg,I2C_MEMADD_SIZE_8BIT,&Value,1,I2C1_TIMEOUT);HAL_Delay(I2C1_DELAY);if(status!=HAL_OK)I2C1_Error();}//uint8_t ReadEEpromByte(uint8_t Reg){HAL_StatusTypeDef status=HAL_OK;uint8_t value=0;status=HAL_I2C_Mem_Read(&I2cHandle,I2C1_ADDRESS,(uint16_t)Reg,I2C_MEMADD_SIZE_8BIT,&value,1,I2C1_TIMEOUT);HAL_Delay(I2C1_DELAY);if(status!=HAL_OK)I2C1_Error();return value;}EEPROM_Init();
이 함수의 기능을 체크하세요
메모리를 0xFF로 clear 시키면 안되겠죠
//
eeprom의 주의사항은 몇가지가 있습니다.
1. 초기화 금지
내부 eeprom이든 외부 eeprom이든 초기화(0xFF로 clear)시키면 안됩니다.
내부 eeprom을 전역변수로 선언하는 경우에도 어떤 특정 값으로 초기화 시키면 안됩니다.
초기화하면 들어있던 값이 전부 깨지게 되겠죠
2. 메인함수 초기에 값을 읽으세요
만약 0xFF라면 한번도 사용하지 않은 경우니, 이 때에만 초기화를 시킵니다.
3. 값의 저장은 꼭 필요할 때만 하세요
횟수 제한이 있으므로 루프를 돌면서 쓸데없이 쓴다면 금새 수명이 다합니다.
위 언급한 과정에서 문제가 있는지부터 체크 해보세요
댓글 1
조회수 9,317몽규님의 댓글
몽규 작성일그렇군요 EEPROM을 사용할땐 말씀해주신 위 3가지 사항 꼭 명심 하겠습니다. 감사합니다!