STM32系列单片机内部FLASH详解

一. STM32系列单片机扇区划分

STM32内部FLASH大小不一,不同大小划分是不一样的。

比如:

Flash大小为 64KB, 地址范围:0x08000000-0x08010000-1,单个扇区大小:1KB=0x400,最后一个扇区地址:0x0800FC00

Flash大小为 128KB,地址范围:0x08000000-0x08020000-1,单个扇区大小:1KB=0x400,最后一个扇区地址:0x0801FC00

Flash大小为 256KB,地址范围:0x08000000-0x08040000-1,单个扇区大小:2KB=0x800,最后一个扇区地址:0x0803F800

Flash大小为 512KB,地址范围:0x08000000-0x08080000-1,单个扇区大小:2KB=0x800,最后一个扇区地址:0x0807F800

二. STM32内部FLASH的作用?

STM32的内部Flash主要用于存储程序代码(固件)和只读数据等。

1. 程序代码(固件):内部Flash是存储微控制器的程序代码的主要地方。它包含了应用程序的指令集,包括启动代码、中断处理程序、函数和其他执行代码。这些代码定义了系统的功能和行为。通常是编译生成的HEX文件或者BIN文件。

2. 只读数据:内部Flash还可以用于存储只读数据,如常量、配置信息和校准数据等。这些数据在程序执行期间是只读的,不会被修改。

3. 存储配置信息:除了程序代码外,一些必要的配置信息和数据也会存储在FLASH中,如设备启动时的初始化参数等。

4. Bootloader:一些STM32芯片内置了Bootloader,它是一个特殊的程序,用于在启动时加载和更新应用程序的固件。Bootloader通常存储在内部Flash的特定区域,并负责固件的升级和管理。

三. 读写内部FLASH的一般步骤

1.启用Flash访问

2.解锁Flash

3.检查Flash状态

4.执行Flash编程

5.等待Flash操作完成

6.锁定Flash

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32G0系列单片机可以使用HAL库提供的函数来将变量写入Flash中。 以下是一个示例代码,将一个16位的整数写入Flash中: ```c #include "stm32g0xx_hal.h" #define FLASH_USER_START_ADDR ADDR_FLASH_PAGE_31 // 定义 Flash 起始地址,这里选择了倒数第二个扇区 #define FLASH_USER_END_ADDR ADDR_FLASH_PAGE_31 + FLASH_PAGE_SIZE - 1 // 定义 Flash 结束地址 uint16_t data = 1234; // 要写入 Flash 的数据 // 函数声明 void WriteToFlash(uint32_t address, uint16_t data); int main(void) { HAL_Init(); // 写入数据到 Flash WriteToFlash(FLASH_USER_START_ADDR, data); while (1) { // 程序执行其他任务 } } // 将数据写入 Flash void WriteToFlash(uint32_t address, uint16_t data) { HAL_StatusTypeDef status = HAL_OK; uint32_t pageError = 0; // 擦除 Flash 扇区 FLASH_EraseInitTypeDef eraseInitStruct; eraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES; eraseInitStruct.PageAddress = FLASH_USER_START_ADDR; eraseInitStruct.NbPages = 1; status = HAL_FLASHEx_Erase(&eraseInitStruct, &pageError); if (status != HAL_OK) { // 发生错误,处理错误 return; } // 写入数据到 Flash status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, address, data); if (status != HAL_OK) { // 发生错误,处理错误 return; } } ``` 在这个示例代码中,我们首先定义了要写入 Flash 的数据 `data`,然后调用 `WriteToFlash()` 函数将数据写入 Flash。该函数首先使用HAL库提供的 `HAL_FLASHEx_Erase()` 函数擦除 Flash 扇区,然后使用 `HAL_FLASH_Program()` 函数将数据写入 Flash。在写入数据之前,我们需要定义要写入的 Flash 起始地址,并且要确保不会写入到 Bootloader 或其他重要数据的位置。此外,还需要注意的是,STM32G0系列单片机Flash只能写入半字(16位),因此在这个示例中,我们使用 `FLASH_TYPEPROGRAM_HALFWORD` 来指定写入半字。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值