日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

eeprom stm8l 擦除 读写_STM8L探索套件学习笔记-EEPROM(十一)

發布時間:2025/3/20 编程问答 66 豆豆
生活随笔 收集整理的這篇文章主要介紹了 eeprom stm8l 擦除 读写_STM8L探索套件学习笔记-EEPROM(十一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原標題:STM8L探索套件學習筆記-EEPROM(十一)

上節將到官方例程使用 EEPROM存儲外圍電路消耗的電流值,今天我們對 STM8L的EEPROM介紹下。STM8L帶有的32K的FLASH和1K的EEPROM都可以編程和擦除,編程模式有1、字節byte,2、字word,3、BLO CK和4、編程和擦寫完中斷。

由于默認是鎖定的,所以對FLASH和EEPROM編程首先要解鎖,解鎖的方式是寫如寄存器特定值,0X56 0XAE。在IAR編譯器當中,__eeprom 用于EEPROM 存儲空間, 控制數據存放,控制指針類型和存放。@用于變量的絕對地址定位。也可以用#pragma location 命令。

EEPROM 區域數據存儲:

用關鍵字 __eeprom 控制來存放, __eeprom關鍵字寫在數據類型前后效果一樣。

__eeprom unsigned char a;//定義一個變量存放在EEPROM空間

unsigned char __eeprom a;//效果同上

__eeprom unsigned char p[];//定義一個數組存放在EEPROM空間

對于EEPROM空間的變量操作同SRAM數據空間的操作方法一樣,編譯器會自動

調用 __EEPUT(ADR,VAL), __EEGET(VAR, ADR)宏函數來對EEPROM變量的

操作。

EEPROM空間絕對地址定位:

__eeprom unsigned char a @ 0x8;//定義一個變量存放在EEPROM空間

0X08單元

__eeprom unsigned char p[] @ 0x22//定義一個數組存放在EEPROM空間,

開始地址為0X22單元

__eeprom unsigned char a @ 0x08=9;//定義一個常數存放在EEPROM空

間0X08單元

__eeprom unsigned char p[] @0x22={1,2,3,4,5,6,7,8};

//定義一個組常數存放在EEPROM空間開始地址為0X22單元

由于常數在EEPROM空間的地址是已經分配的,讀取EEPROM空間值可以用

變量和地址。

需要用戶外加三個函數才能使得編譯器使用_eeprom變量自動寫入EEPROM。

/*

* The user must implement the three extern-declared functions be low

* in order for the compiler to be able to automatically write to the

* EEPROM memory when __eeprom variables are assigned to.

*/

/*

* Wait for the last data EEPROM operation to finish. Return 0 if the

* operation failed, otherwise non-zero. You may want to handle

* errors here, since the utility functions below simply ignore

* errors, aborting multi-write operations early.

*/

int __eeprom_wait_for_last_operation(void)

{

FLASH_Status_TypeDef status = FLASH_WaitForLastOperation(FLASH_MemType_Data);

return !!(status & ( FLASH_Status_Successful_Operation));

}

/*

* Write one byte to the data EEPROM memory.

*/

void __eeprom_program_byte(unsigned char __near * dst, unsigned char v)

{

FLASH_ProgramByte((u32)dst, (u8)v);

}

/*

* Write one 4-byte long word to the data EEPROM memory. The address

* must be 4-byte aligned.

*/

void __eeprom_program_long(unsigned char __near * dst, unsigned long v)

{

FLASH_ProgramWord((u32)dst, (u32)v);

}

加入了這三個函數后,我們就可以很方便的使用_eeprom的定義變量了

void main(void)

{

uint8_t temp1='a';

//temp1=2;

//temp2=0;

/* Initialize I/Os in Output Mode */

GPIO_Init(LED3_PORT,LED3_PIN,GPIO_Mode_Out_PP_Low_Fast);

//輸出低電平-高速10M

GPIO_Init(LED4_PORT,LED4_PIN,GPIO_Mode_Out_PP_Low_Fast);

//輸出低電平-高速10M

FLASH_Unlock(FLASH_MemType_Data);

FLASH_ProgramByte(0x1001, temp1);//eeprom memory: address is 0x1001 =temp1

FLASH_WaitForLastOperation(FLASH_MemType_Data);

//temp2=FLASH_ReadByte(0x1000);

if(num=='a')

GPIO_SetBits(LED3_PORT,LED3_PIN);

while(1);

責任編輯:

總結

以上是生活随笔為你收集整理的eeprom stm8l 擦除 读写_STM8L探索套件学习笔记-EEPROM(十一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。