当前位置:   article > 正文

Stm32 HAL库 访问内部flash空间

Stm32 HAL库 访问内部flash空间

Stm32 HAL库 访问内部flash空间


在一些时候,需要存储一些数据,但是又不想接外部的flash,那我们可以知道,其实还有内部的flash可以使用,
需要注意的是内部flash,读写次数有限,所以需要控制擦写次数

首先使用cubmx生成代码,
就是配置时钟和debug口,还有串口信息

在这里插入图片描述

代码的部分

串口

/* USER CODE BEGIN PV */
#include "stdio.h"
int fputc(int ch,FILE *f)
{
	HAL_UART_Transmit (&huart1 ,(uint8_t *)&ch,1,HAL_MAX_DELAY );
	return ch;
}
/* USER CODE END PV */
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

配置申明文件

这里配置了地址的申明文件,和flash操作的结构体

需要注意的是,每个芯片都有最大的flash空间,以及代码空间,所以建议在配置地址的时候尽量到地址空间的后面,这样可以防止擦写到代码的空间。

/* USER CODE BEGIN 0 */

//debug 查看对应地址,是否正确,如果显示的是问号,则无此位置
//C6T6 32k  最大地址 0x08007FF0
//C8T6 64k  最大地址 0x0800FFE0
#define FLASH_SAVE_ADDR  0x08007000

static FLASH_EraseInitTypeDef EraseInitStruct = {
	.TypeErase = FLASH_TYPEERASE_PAGES,       //页擦除
	.PageAddress = FLASH_SAVE_ADDR,                //擦除地址
	.NbPages = 1                              //擦除页数
};
/* USER CODE END 0 */
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

main函数

下面就是main函数的配置,
流程就是 擦除->写入数据->读出数据

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  while (1)
  {
        HAL_FLASH_Unlock();
        uint32_t PageError = 0;
        __disable_irq();                             //擦除前关闭中断
        if (HAL_FLASHEx_Erase(&EraseInitStruct,&PageError) == HAL_OK)
        {
            printf("擦除 成功\r\n");
        }
        __enable_irq();                             //擦除后打开中断
        uint32_t writeFlashData = 0x55555555;        //待写入的值
        uint32_t addr = FLASH_SAVE_ADDR;                  //写入的地址
        HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,addr, writeFlashData);
        printf("at address:0x%x, read value:0x%x\r\n", addr, *(__IO uint32_t*)addr);
        HAL_FLASH_Lock();
        while(1);
  }
  /* USER CODE END 3 */
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/406240
推荐阅读
相关标签
  

闽ICP备14008679号