STM32G474是意法半导体(STMicroelectronics)推出的一款基于ARM Cortex-M4内核的微控制器,属于STM32G4系列。该系列芯片拥有高速处理能力和丰富的外设接口,广泛应用于嵌入式系统设计。在STM32G474中,Flash存储器是重要的组成部分,它用于存储程序代码、配置数据和用户数据。本文将详细讲解STM32G474的Flash读写操作,并基于描述中提到的"仿LL库"进行解析。 STM32的Low Layer (LL)库是一种轻量级的底层驱动库,提供接近硬件层的API函数,以简化开发者对特定外设的操作。LL库通常比HAL库更加灵活且效率更高,适合对性能有较高要求的应用。在STM32G474的Flash读写中,`stm32g4xx_ll_flash.c`和`stm32g4xx_ll_flash.h`文件包含了相关的LL库函数定义和实现。 1. **Flash读操作**: - `LL_FLASH_ReadWord(uint32_t Address)`: 这个函数用于读取Flash中的32位数据。Address参数为要读取的Flash地址。 - 在实际应用中,可以使用这个函数来读取已编程的程序代码或存储在Flash中的配置数据。 2. **Flash写操作**: - `LL_FLASH_ProgramWord(uint32_t Address, uint32_t Data)`: 此函数用于写入32位Data到Flash的指定Address。在写入前,必须确保该地址没有被保护,并且满足最小编程单位(一般为4字节)的要求。 - 写入操作通常包括擦除和编程两个步骤。在STM32G474中,Flash的擦除是以页为单位进行的,每页大小通常为2K字节。`LL_FLASH_ErasePage(uint32_t PageAddress)`函数用于擦除指定页。 3. **Flash编程和验证**: - `LL_FLASH_EnableWriteProtection(uint32_t FlashRegion)`: 为了防止意外修改Flash内容,可以启用写保护功能。 - `LL_FLASH_IsOperationReady(void)`: 检查Flash操作(如编程或擦除)是否完成,避免在操作进行时进行其他操作,导致数据损坏。 - `LL_FLASH_OperationErrorGet(void)`: 获取Flash操作错误状态,用于故障排查。 4. **Flash编程策略**: - 由于Flash有一定的寿命限制(编程/擦除次数),因此在编程时需谨慎。建议采用“先擦后写”策略,即在写入新数据前先擦除目标区域。 - 必须确保在写入过程中电源稳定,因为断电可能导致Flash数据丢失或损坏。 5. **异常处理**: - 使用LL库时,需要注意错误处理。例如,如果Flash操作失败,可以通过`LL_FLASH_OperationErrorGet()`获取错误信息,然后采取相应措施,如重试或报告错误。 6. **安全考虑**: - STM32G474提供了安全特性,如Boot Loader区域保护,防止非法程序覆盖。这些特性在开发过程中需要正确配置和利用。 通过`stm32g4xx_ll_flash.c`和`stm32g4xx_ll_flash.h`文件,开发者可以深入了解并掌握STM32G474的Flash管理机制,从而高效地进行固件开发。在实际项目中,根据需求选择合适的数据结构和算法,结合STM32的中断和定时器等资源,可以实现高性能、低功耗的Flash读写操作。
2024-09-19 16:26:39 3KB STM32
1
STM32G474+FreeRTOS+Modbus
2023-12-04 10:56:16 26.15MB stm32
1
stm32G474官方数据手册
2023-04-11 13:49:04 2.92MB stm32 arm 嵌入式硬件 单片机
1
STM32G474实现USB的MSC+CDC的组合功能
2023-01-09 19:15:19 42.14MB MSC+CDC
1
stm32g474的代码(nucleo、cubeide): 频率捕获 测量频率和占空比串口通信 wifi通信 利用L610模块与腾讯云发送信息 adc、LCD 测量直流电压、LCD显示 stm32F407的代码(正点原子、keil5): FFT 频率、占空比、蓝牙通信(幅值有些些问题,但频率贼准能把学校波形发生器测爆)
2022-12-08 18:40:38 78.08MB STM32G474
1
STM32G474采用串口空闲接收中断实现MODBUS-RTU协议框架 适合采用STM32实现简易的MODBUS-RTU通信,从而简化该协议框架在嵌入式芯片上实现的难度。 配套的文章: https://blog.csdn.net/qq_40824852/article/details/124188811
2022-05-07 13:14:16 32.43MB stm32 arm 嵌入式硬件 单片机
1
这是我的一个测试程序,使用STM32CubeMX做的初始化,然后使用Keil5 做的调试,初次使用,勉强实现功能,可能会有些问题,仅作参考。FM25V01.c 是本例程的重点,其他的是我之前的一些其他外设的测试内容。有Flash读写,和备份域 的读写,备份域有点坑只有4*32个字节,太少了。 工程根目录有FM25V01的数据手册。请同时参考。 无需积分即可下载,讨厌下载东西需要积分,好多东西本身就没啥价值,花了积分还浪费了时间。
2022-04-28 16:01:44 41.12MB STM32 STM32G474
1
STM32G474 系统时钟配置为170MHz,8路ADC转换结果通过DMA的方式直接缓存到数组中,ADC+DMA通过定时器的方式启动adc转换,从而可以控制adc的转换频率。已调试通过。
2022-04-17 09:48:08 12.84MB STM32G474 ADC+DMA+TIM2
1
STM32G474 FDCAN的经典CAN使用 波特率250k 接收滤波0x207 0x607 0x601 0.5s发送一次数据 发送内容: ID:0x222 数据帧 标准帧 数据长度8 内容 78 56 34 12 00 00 00 00 接收数据以中断形势接收,存放到buffer中
2022-03-17 14:56:45 180KB stm32 arm 嵌入式硬件 单片机
1
实现了stm32g474的ADC采样功能
2021-07-07 19:05:28 10.93MB stm32G474_ADC
1