STM8L151 在IAR中实现Flash/EEPROM的擦写

在 STM8L151G6U6中可支持字节擦写和块擦写,块擦写可一次擦写很所字节。字节擦写比较简单,需要注意的是块擦写,在块擦写中,需要配置一个地方。
库中使用说明
对于IAR来说,
Uncomment the line “#define RAM_EXECUTION (1)” in the stm8l15x.h file to enable the FLASH functions execution from RAM through the specific __ramfunc keyword.
之后可在程序中调用Flash_BlockProgram();来进行块擦写。
在main函数前要做以下声明:

 #ifdef _RAISONANCE_
/* needed by memcpy for raisonance */
#include <string.h>
extern int __address__FLASH_EraseBlock;
extern int __size__FLASH_EraseBlock;
extern 
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当您使用STM32 HAL库进行Flash读写操作时,可以使用以下代码示例来读写数组: ```c #include "stm32l1xx_hal.h" #define FLASH_USER_START_ADDR ((uint32_t)0x08080000) // Flash起始地址 #define FLASH_USER_ARRAY_SIZE ((uint32_t)128) // 数组大小,单位为字节 void write_array_to_flash(uint32_t* data, uint32_t size) { FLASH_EraseInitTypeDef erase_struct; uint32_t sector_error = 0; HAL_FLASH_Unlock(); // 解锁Flash erase_struct.TypeErase = FLASH_TYPEERASE_SECTORS; // 擦除类型为扇区擦除 erase_struct.VoltageRange = FLASH_VOLTAGE_RANGE_3; // Flash电源电压范围为3.0 ~ 3.6V erase_struct.Sector = FLASH_SECTOR_7; // 使用扇区7 erase_struct.NbSectors = 1; // 擦除一个扇区 if (HAL_FLASHEx_Erase(&erase_struct, &sector_error) != HAL_OK) { // 擦除失败处理 HAL_FLASH_Lock(); return; } for (uint32_t i = 0; i < size; i++) { if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, FLASH_USER_START_ADDR + (4 * i), data[i]) != HAL_OK) { // 写入失败处理 HAL_FLASH_Lock(); return; } } HAL_FLASH_Lock(); // 上锁Flash } void read_array_from_flash(uint32_t* data, uint32_t size) { for (uint32_t i = 0; i < size; i++) { data[i] = *(__IO uint32_t*)(FLASH_USER_START_ADDR + (4 * i)); } } int main(void) { HAL_Init(); // 初始化Flash读写数组 uint32_t flash_data[FLASH_USER_ARRAY_SIZE/4] = {0}; // 写入数据到Flash write_array_to_flash(flash_data, FLASH_USER_ARRAY_SIZE/4); // 从Flash读取数据 read_array_from_flash(flash_data, FLASH_USER_ARRAY_SIZE/4); // 进行其他操作... while (1) { // 主循环 } } ``` 在这个示例,我们首先定义了Flash的起始地址和数组的大小。然后,我们编写了两个函数:`write_array_to_flash()`用于将数组写入Flash,`read_array_from_flash()`用于从Flash读取数组。 在`write_array_to_flash()`函数,我们首先解锁Flash,然后使用`HAL_FLASHEx_Erase()`函数擦除扇区7。接下来,使用`HAL_FLASH_Program()`函数逐个写入数组元素到Flash,并在写入失败时进行错误处理。最后,上锁Flash。 在`read_array_from_flash()`函数,我们使用指针访问Flash的地址,将Flash的数据读取到数组。 在`main()`函数,我们初始化了HAL库,并声明一个用于存储Flash数据的数组。然后,我们调用`write_array_to_flash()`函数将数组写入Flash,接着调用`read_array_from_flash()`函数从Flash读取数组。最后,我们可以在主循环进行其他操作。 请注意,该示例代码仅供参考,您可能需要根据实际情况进行适当的修改和调整。同时,请确保正确配置STM32L1系列芯片的Flash大小和地址,以及正确引用和初始化HAL库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值