STM32,FLASH保存,不擦除已经保存的数据。

1.大家都知道,stm32的flash的写入是需要先进行擦除整页的操作的。所以之前的已经存好的数据会被擦除。那么想要实现一直写,而之前保存的数据不被擦除的话应该要怎么实现呢?

2.stm32的每款芯片的容量都不相同,有大密度的,中密度以及小密度的。以stm32f103RB举例。这款芯片只有128KB的flash,每一页只有1K的存储空间。选择靠后的页对于程序的烧写是没有影响的。

3,选择最后一页,0x0801FC00,作为起始位置。在这一页进行存储,在前一页也就是0x0801FBFA可以储存上一次存完数据后的末地址。当下一次要进行存储数据时,将该位置的数据读出,在此位置基础上写入数据,等数据写入完成后,将此时的位置写入之前的位置存储地址0x0801FBFA,以及后面三个字节。

4.注意由于stm32的储存是小端储存,注意位置跟数据的高低位关系。且能够将32位数据,16位,8位数据进行互换。

5.仅供思路参考,个人代码太过粗糙,不给大家笑了。另外,不要放入主循环内,否则芯片的使用次数及使用寿命会大大降低。

STM32中,可以使用Flash保存数据Flash是一种非易失性存储器,可以在断电后保持数据。在STM32中,Flash被分为两个区域:Main Flash Memory和System Memory。Main Flash Memory用于存储程序代码和数据,而System Memory用于存储Bootloader和Option Bytes等系统信息。 要在STM32中使用Flash保存数据,可以使用HAL库提供的函数。以下是一个简单的示例代码: ```c #define FLASH_USER_START_ADDR ADDR_FLASH_PAGE_62 /* Start @ of user Flash area */ #define FLASH_USER_END_ADDR ADDR_FLASH_PAGE_63 + FLASH_PAGE_SIZE - 1 /* End @ of user Flash area */ uint32_t Address = FLASH_USER_START_ADDR; HAL_StatusTypeDef FlashStatus = HAL_OK; /* Unlock the Flash to enable the flash control register access *************/ HAL_FLASH_Unlock(); /* Clear all FLASH flags */ __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR); /* Erase the user Flash area */ FLASH_Erase_Sector(FLASH_SECTOR_62, VOLTAGE_RANGE_3); /* Program the user Flash area word by word */ while (Address < FLASH_USER_END_ADDR) { if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, Data) == HAL_OK) { Address = Address + 4; } else { /* Error occurred while writing data in Flash memory */ break; } } /* Lock the Flash to disable the flash control register access (recommended to protect the FLASH memory against possible unwanted operation) */ HAL_FLASH_Lock(); ``` 在上面的代码中,首先需要定义Flash的起始地址和结束地址。然后使用HAL_FLASH_Unlock()函数来解锁Flash,以便可以对其进行编程。接下来,使用FLASH_Erase_Sector()函数来擦除Flash的指定扇区。最后,使用HAL_FLASH_Program()函数来将数据写入Flash中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值