STM32读写flash

一、工程创建

打开STM32CubeMX,配置RCC,将PC13设置为GPIO_Output

在这里插入图片描述

配置系统时钟树

在这里插入图片描述

调整堆栈大小

在这里插入图片描述

二、代码配置

将flash.c和flash.h加入到工程中

flash.h

#ifndef _flash_H_
#define _flash_H_

#include "stm32f1xx_hal.h"

/*********************************************************************/
//                        变量定义
/*********************************************************************/
//-- 用途划分
// 0x0800FC00-0x0800FFFF -- 使用最后4k 个字节用来存放电机信息
#define FMC_FLASH_BASE      0x08000000 	// FLASH的起始地址
#define APP_MAX_SIZE        0x00010000  // 


#define FMC_FLASH_END        0x08010000  // FLASH的结束地址 256
#define DEVICE_INFO_ADDRESS  0x0800C000  //(STM32_FLASH_END - DEVICE_INFO_SIZE)   // 设备信息起始地址
#define DEVICE_LOG_ADDRESS   0x0800E000  //(STM32_FLASH_END - 2*DEVICE_INFO_SIZE) // 设备日志起始地址



#define FMC_FLASH_SIZE 64			          // 定义Flash大小,单位KB


#if FMC_FLASH_SIZE < 256
#define FMC_SECTOR_SIZE 1024            // 字节
#define MOD_SECTOR_SIZE 0X3FF
#define PAGE_COUNT_BY16 512
#else
#define FMC_SECTOR_SIZE	2048
#define MOD_SECTOR_SIZE 0X7FF
#define PAGE_COUNT_BY16 1024
#
STM32是一款嵌入式芯片,在嵌入式系统中,Flash是一种存储器件,用来存储程序。STM32可以读写Flash,让我们能够修改程序,实现芯片控制。 STM32芯片内部的Flash分为两种:一种是Main Flash,还有一种是System Flash。其中,Main Flash主要用来存放应用程序,而System Flash则保存了一些系统信息,比如Bootloader。 使用STM32读写Flash需要多个步骤。首先,需要进行初始化。初始化代码如下: HAL_FLASH_Unlock(); flash_erase_init.TypeErase = FLASH_TYPEERASE_PAGES; flash_erase_init.PageAddress = ADDRESS; flash_erase_init.NbPages = 1; HAL_FLASHEx_Erase(&flash_erase_init, &PAGE_ERROR); HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, ADDRESS, DATA); HAL_FLASH_Lock(); 其中,HAL_FLASH_Unlock()和HAL_FLASH_Lock()函数用来对Flash进行解锁和锁定操作。 其次,需要擦除Flash,该步骤是很重要的,因为Flash是有限制次数的,反复入易造成擦除的次数过多,缩短Flash寿命。程序如上: flash_erase_init.TypeErase = FLASH_TYPEERASE_PAGES; flash_erase_init.PageAddress = ADDRESS; flash_erase_init.NbPages = 1; HAL_FLASHEx_Erase(&flash_erase_init, &PAGE_ERROR); 上述程序代码指定了FLASH_TYPEERASE_PAGES为扇区擦除,擦除起始地址ADDRESS,并指定擦除扇区数为1。 然后,使用HAL_FLASH_Program函数向Flash入数据,程序如下: HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, ADDRESS, DATA); 该函数参数分别代表 需要向Flash入的数据、Flash地址和入操作方式等。 最后,需要做好Flash的锁定防止外部因素对Flash的更改操作,使用的函数和解锁步骤相同。程序如下: HAL_FLASH_Lock(); 总的来说,STM32读写Flash的操作需要进行初始化,擦除Flash,向Flash入数据,并锁定防止外部更改。这些步骤需要仔细核实,但是一旦操作成功,便可以实现 STM32 上关键性的程序修改。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值