Wiki:知识&笔记 Wiki:知识&笔记
首页
  • 学习笔记

    • 《JavaScript教程》笔记
  • 嵌入式

    • STM32
  • 技术文档
归档
GitHub (opens new window)
首页
  • 学习笔记

    • 《JavaScript教程》笔记
  • 嵌入式

    • STM32
  • 技术文档
归档
GitHub (opens new window)
  • 基础

  • 底层&寄存器

  • HAL库外设

    • HAL库函数
    • HAL结构
    • GPIO各种点亮LED
    • 定时器
    • PWM控制LED颜色
    • 按键外部中断
    • ADC使用
    • 串口与DMA
    • FLASH 读写
      • 硬件基础
      • 函数说明
        • FLASH 擦除函数
        • FLASH 写入函数
        • FLASH 读取函数
        • FLASH 解锁函数
        • FLASH 加锁函数
      • Bouns
        • boot
      • 参考
    • IIC通信
    • SPI 通信
    • CAN
  • STM32
  • HAL库外设
2020-10-03
硬件基础
函数说明
FLASH 擦除函数
FLASH 写入函数
FLASH 读取函数
FLASH 解锁函数
FLASH 加锁函数
Bouns
boot
参考

FLASH 读写

# 硬件基础

STM32 具有内存的 SRAM 和的外存 FLASH。FLASH 和 SRAM 的特点请见这里

注意

其中,对 FLASH 的使用需要注意以下几点:

  • 为了保护数据的安全性,FLASH 有专门的锁寄存器,每次要对 FLASH 页面进行修改时首先要通过锁寄存器对页面进行解锁,修改完成后要进行加锁
  • flash是不支持在保存原有数据的情况下进行修改的,因此要改变 FLASH 页面数据时,需要对这个页面进行擦除,擦除之后再写入新的数据

# 函数说明

# FLASH 擦除函数

HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *SectorError)
1

# FLASH 写入函数

HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data)
1

# FLASH 读取函数

通过自定义的函数调用 memcpy 函数进行读取:

void flash_read(uint32_t address, uint32_t *buf, uint32_t len) 
{
    memcpy(buf, (void*)address, len *4);
}
1
2
3
4
参数3 字节长度
--- ---

# FLASH 解锁函数

前面介绍过,写入或擦除数据时需要为 FLASH 进行解锁和加锁。下面就是 FLASH 的解锁函数HAL_FLASH_Unlock。 这个函数的功能其实非常简单,只是为锁寄存器写入特定的 KEY 值以完成解锁

HAL_StatusTypeDef HAL_FLASH_Unlock(void)
1

# FLASH 加锁函数

下面是 FLASH 加锁操作函数HAL_FLASH_Lock,该函数的功能同样简单,即清楚已解锁的锁寄存器的KEY值,便完成了加锁功能

HAL_StatusTypeDef HAL_FLASH_Lock(void)
1

# Bouns

我们的 FLASH 实际上是分扇区的,以STM32F407x为例,其扇区就像这样:

其中芯片上电时,会从0x08000000读取程序开始运行,故而在扇区 0 开始往往会存储程序,需要使用程序之后的扇区作为存储扇区

# boot

boot 用于控制芯片在上电之后如何引导程序加载到芯片中开始执行

STM32 的启动方式分为三种方式,采用哪一种方式启动可以通过芯片的 boot0 和 boot1引脚进行设置:

  • 第一种方式是最常用的方式,即从 FLASH 中读取烧录的程序,将其引导到 STM32 中执行
  • 第二种方式,芯片从一块特殊的系统存储区启动,在系统存储区中存有芯片生产厂商已经写好的 bootloader 程序,这个程序的功能是通过串口将程序读取到 FLASH 中去,再将 FLASH 中的程序引导到单片机中执行。有一些特殊的下载软件可以让我们通过串口进行 STM32 程序的下载,其原理就是使用了这种 boot 方式。使用这种 boot 的优点是不需要额外的下载器,缺点是下载速度比较慢
  • 第三种方式是从 STM32 内嵌的 SRAM 中启动,可以将一小段程序写入 SRAM 中用于调试,但是因为 SRAM 有着掉电丢失的特性,所以一般不会采用这种方式进行 boot,否则每次重新给芯片上电就必须重新给 SRAM 写入一次程序

# 参考

[1] RoboMaster 开发板 C 型嵌入式软件教程文档

编辑 (opens new window)
上次更新: 2020/11/18, 13:11:00
串口与DMA
IIC通信

← 串口与DMA IIC通信→

Theme by Vdoing | Copyright © 2020-2025 Jack :) | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式