STM32F4系列 HAL Flash 读写

前言

注意:F0F1系列和F4系列的Flash读写操作不相同

一、STM32CubeMX怎么查看芯片的Flash分布?

在这里插入图片描述
在这里插入图片描述

二、擦除F4系列Flash

本例程使用的是F411CEU6的型号芯片
在这里插入图片描述

1.擦除Flash代码

1.基本操作:

void FlashErase(void)
{
    int sect = 0;
    HAL_FLASH_Unlock();//解锁
    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | 
                          FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR);//清除一些错误标志

    FLASH_Erase_Sector(1,FLASH_VOLTAGE_RANGE_3);//擦除指定的闪存扇区1(0x08004000~0x08007FFF)
    HAL_FLASH_Lock();//上锁
}

2.由开始地址计算出所在的扇区位置:

//F411CEU6 512k 8个扇区
uint32_t sectStartAddr[8]=
{
    0x08000000,//0
    0x08004000,//1
    0x08008000,//2
    0x0800c000,//3
    0x08010000,//4
    0x08020000,//5
    0x08040000,//6
    0x08060000 //7
};
//获取Sector的编号
int GetSectorFromAddress(uint32_t address)
{
    int sect;
    if( address < 0x08000000 || address > 0x0807FFFF )
        return -1;
    for( int i=0; i<8; i++ )
    {
        if( address >= sectStartAddr[i] && address < sectStartAddr[i+1] )
        {
            sect = i;
            break;
        }
    }
    return sect;
}

//清除扇区
//StartAddress:取值范围(0x08000000~0x0807FFFF)
void FlashErase(uint32_t StartAddress)
{
    int sect = 0;
    HAL_FLASH_Unlock();//解锁
    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | 
                          FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR);//清除一些错误标志
                          
    sect = GetSectorFromAddress(StartAddress);//获取地址所在的扇区
    FLASH_Erase_Sector(sect,FLASH_VOLTAGE_RANGE_3);//擦除指定的闪存扇区(0~7)
    HAL_FLASH_Lock();//上锁
}

在这里插入图片描述

2.Flash写入数据

代码如下(32位数据写入,可以改成8/16/32/64位):

//写数据
void FlashWrite(uint32_t StartAddress,uint32_t data)
{
	//可以添加一些 StartAddress地址 是否有效的判断
    HAL_FLASH_Unlock();//解锁
    HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,StartAddress,data);
    HAL_FLASH_Lock();//上锁
}

在这里插入图片描述

3.Flash读取数据

代码如下(示例):

//读数据
uint32_t FlashRead(uint32_t StartAddress)
{
    return *(uint32_t *)StartAddress;
}

读取数据比较简单,直接返回地址的值就可以了
在这里插入图片描述

总结

Flash的擦除和写都需要进行 解锁 操作完了别忘记 上锁

针对于stm32f4xx芯片开发使用的hal版本库 /** ****************************************************************************** * @file stm32f4xx_hal.h * @author MCD Application Team * @version V1.4.2 * @date 10-November-2015 * @brief This file contains all the functions prototypes for the HAL * module driver. ****************************************************************************** * @attention * * © COPYRIGHT(c) 2015 STMicroelectronics * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * 3. Neither the name of STMicroelectronics nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ****************************************************************************** */
您好!对于STM32F4系列的MCU,HAL库可以用于对Flash进行编程和读取操作。以下是使用HAL库编程的一些基本步骤: 1. 首先,您需要在CubeMX软件中配置您的工程。打开CubeMX,选择您的MCU型号,并配置您的引脚和外设。确保在"Configuration"选项卡中启用Flash。 2. 在CubeMX中生成代码后,打开生成的工程并找到相关的源文件。主要涉及到的文件是"main.c"和"stm32f4xx_hal_flash.c"。 3. 在"main.c"文件中,包含以下头文件: ```c #include "stm32f4xx_hal.h" ``` 4. 初始化Flash模块。在main函数中添加以下代码: ```c HAL_Init(); HAL_FLASH_Unlock(); ``` 5. 编写代码来擦除和编程Flash。例如,要擦除一个扇区,可以使用以下代码: ```c FLASH_Erase_Sector(FLASH_SECTOR_7, VOLTAGE_RANGE_3); ``` 其中,第一个参数是要擦除的扇区号,第二个参数是电压范围。 6. 编写代码来编程Flash。例如,要在某个地址写入一个字节,可以使用以下代码: ```c uint32_t Address = 0x0800C000; // 要写入的地址 uint32_t Data = 0x55; // 要写入的数据 HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, Address, Data); ``` 其中,第一个参数是编程类型,第二个参数是要写入的地址,第三个参数是要写入的数据。 请注意,这只是一些基本的使用方法。如果您需要更复杂的操作,可以查阅STM32F4系列的参考手册和HAL库文档,以获取更详细的信息和示例代码。 希望对您有所帮助!如果您还有其他问题,请随时提问。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值