STM32CUBEMX | STM32L431RCT6的内部Flash操作

STM32L4系列芯片Flash操作指南
本文详细介绍了如何使用STM32CUBEMX配置STM32L4系列芯片的时钟源和时钟树,以及如何进行Flash的解锁、擦除、写入和读取操作。通过示例代码展示了如何使用HAL库进行Flash的页擦除、数据写入,并提供了实验现象的描述。

一、STM32CUBEMX配置

1、选择芯片型号:

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

2、配置时钟源

1、 如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC;
2、 如果使用默认内部时钟(HSI),这一步可以略过;

在这里插入图片描述

3、配置时钟树

STM32L4的最高主频到80M,所以配置PLL,最后使HCLK = 80Mhz即可:

在这里插入图片描述

4、代码生成设置

在这里插入图片描述
点击GENERATE CODE即可生成MDK-V5工程:

在这里插入图片描述

二、在MDK中编写、编译、下载用户代码

1、STM32内部Flash及HAL库API

查看所使用芯片的信息,Flash起始地址为0x08000000,大小为0x00040000(256KB):
在这里插入图片描述
STM32L4x1芯片内部的Flash存储器内存分布如下:

在这里插入图片描述
STM32L431RCT6的Flash容量是256KB,所以只有Bank1,有128页,每页2KB。

2、解锁/上锁Flash操作

擦除或者写入内部Flash的时候,需要先解锁再操作,操作完毕之后上锁

HAL_StatusTypeDef  HAL_FLASH_Unlock(void);
HAL_StatusTypeDef  HAL_FLASH_Lock(void);

3、擦除操作

HAL库中定义了一个Flash初始化结构体,如下:

/**
  * @brief  FLASH Erase structure definition
  */
typedef struct
{
   
   
  uint32_t TypeErase;   /*!< Mass erase or page erase.
                             This parameter can be a value of @ref FLASH_Type_Erase */
  uint32_t Banks;       /*!< Select bank to erase.
                             This parameter must be a value of @ref FLASH_Banks
                             (FLASH_BANK_BOTH should be used only for mass erase) */
  uint32_t Page;        /*!< Initial Flash page to erase when page erase is disabled
                             This parameter must be a value between 0 and (max number of pages in the bank - 1)
                             (eg : 255 for 1MB dual bank) */
  uint32_t NbPages;     /*!< Number of pages to be erased.
                             This parameter must be a value between 1 and (max number of pages in the bank - value of initial page)*/
} FLASH_EraseInitTypeDef;

3.1 第一个参数TypeErase是参数类型,分为页擦除和块擦除:

/** @defgroup FLASH_Type_Erase FLASH Erase Type
  * @{
  */
#define FLASH_TYPEERASE_PAGES     ((uint32_t)0x00)  /*!<Pages erase only*/
#define FLASH_TYPEERASE_MASSERASE ((uint32_t)0x01)  /*!<Flash mass erase activation*/
/**
  * @}
  */

3.2 第二个参数Banks是选择需要擦除哪一块:

由参数中

### 关于STM32L431RCT6微控制器的相关资料 #### 数据手册 STM32L431RCT6 是一款基于 ARM Cortex-M4 内核的低功耗微控制器,其数据手册提供了详细的硬件规格和技术参数。该器件具有高达 80 MHz 的工作频率、内置 Flash 存储器以及丰富的外设接口。具体的数据手册可以从官方站点获取[^2]。 #### 示例代码 针对 STM32L431RCT6 的开发,ST 提供了多个示例代码包,涵盖了常见的应用场景,例如 GPIO 控制、UART 通信、ADC 转换等。这些示例代码可以通过 STM32CubeMX 工具自动生成,或者从 ST 官方 GitHub 库中找到预定义项目。此外,在实际应用中,开发者还可以参考其他类似的 STM32 系列微控制器的代码并稍作修改即可适配 L431 器件[^3]。 #### 开发环境配置 为了高效地开发 STM32L431RCT6 项目,推荐使用以下几种主流 IDE 和工具链: - **STM32CubeIDE**: 这是一个集成了 GCC 编译器和调试功能的一体化开发环境,支持图形化的 MCU 参数配置。 - **Keil MDK**: 商业级开发套件,提供强大的编译优化能力和调试体验。 - **IAR Embedded Workbench**: 另一种广泛使用的商业 IDE,特别适合复杂项目的开发需求。 通过 STM32CubeMX 工具,用户能够轻松完成时钟树设置、GPIO 初始化以及其他外设的配置,并生成兼容上述 IDE 的初始代码框架。 ```c // 示例:简单的 LED 点亮程序 (假设 PA5 作为输出引脚) #include "stm32l4xx_hal.h" int main(void) { HAL_Init(); // 初始化HAL库 __HAL_RCC_GPIOA_CLK_ENABLE(); // 启用GPIOA时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出模式 GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 配置PA5为输出 while(1){ HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); // 切换LED状态 HAL_Delay(500); // 延迟500ms } } ``` 以上代码片段展示了如何利用 HAL 库快速实现一个基础的 GPIO 输出操作
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值