STM32速成笔记(12)—Flash闪存

发布者:HappyHearted最新更新时间:2024-04-03 来源: elecfans关键字:STM32  Flash闪存  快闪存储器 手机看文章 扫描二维码
随时随地手机看文章

        }

要对内部Flash某个地址写入数据时,需要确保该地址数值为0xFFFF。判断方法就是从扇区内的偏移开始,利用for循环判断读出地扇区剩余空间内,是否存在已经被写入内容的地址。for循环找到i的值,i加上在扇区内的偏移加1之后的空间,才是真正的扇区剩余空间大小。


for循环结束后,判断是否需要进行擦除


// 需要擦除

        if (i < secremain)

        {

            FLASH_ErasePage(secpos * STM32_SECTOR_SIZE + STM32_FLASH_BASE);   // 擦除这个扇区

            

            // 复制

            for (i = 0;i < secremain;i ++)

            {

                STM32_FLASH_BUF[i + secoff] = pBuffer[i];   

            }

            

            // 写入整个扇区

            Med_Flash_Write_NoCheck(secpos * STM32_SECTOR_SIZE + STM32_FLASH_BASE,STM32_FLASH_BUF,STM32_SECTOR_SIZE / 2);

        }

        else

        {

            // 写已经擦除了的,直接写入扇区剩余区间

            Med_Flash_Write_NoCheck(WriteAddr,pBuffer,secremain);

        }


擦除时,最小单元为一个扇区。在大容量产品中,也就是2048字节。

  • • 最后,将需要写入的数据,写入到对应位置。如果是需要擦除的情况,写入时是先将原来的内容提取出来,然后在后面填充上需要写入的内容,擦除整个扇区之后再一起写入。如果是不需要擦除的情况,直接写入即可。

    五、注意事项

    在操作Flash时,注意不要对代码区内容进行擦写。如果擦写的地址在代码区,会导致程序运行异常。那么如何确保我们操作的地址不是在代码区?这就需要我们知道我们的代码所占的内存是多少。在Keil5编译完成后,会显示下面的内容

图片

keil5编译后提示

  • • Code 程序所占用的内存大小(存放在Flash中)

  • • RO-data 程序定义的常量所占内存大小(存放在Flash中)

  • • RW-data 已被初始化的全局变量所占内存大小(在程序初始化的时候,RW-data会从FLASH中拷贝到RAM中)

ZI-data 未被初始化的全局变量所占内存大小(存放在RAM中)

最后,计算程序代码所占Flash空间。flash = Code + RO-data + RW-data。


[1] [2]
关键字:STM32  Flash闪存  快闪存储器 引用地址:STM32速成笔记(12)—Flash闪存

上一篇:STM32基础知识:串口通信-轮询方式
下一篇:STM32CubeMx计数器基本使用方法

推荐阅读最新更新时间:2024-11-02 15:30

关于STM32的USART的使用(一)--- 初始化过程
串口的使用过程,无非是正确的配置它的IO口的模式,然后在使用函数进行数据的发送或者接受。那么先来说一下STM32的串口初始化配置需要的过程吧。 贴一段代码,作为例子。(据我的理解,不管是M几的核,只要将下面这几个配置好,串口的IO模式就配置好了。) void uart_init(u32 bound) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB
[单片机]
stm32的PWM输入捕获模式
一、概念理解 PWM输入捕获模式是输入捕获模式的特例,自己理解如下 1. 每个定时器有四个输入捕获通道IC1、IC2、IC3、IC4。且IC1 IC2一组,IC3 IC4一组。并且可是设置管脚和寄存器的对应关系。 2. 同一个TIx输入映射了两个ICx信号。 3. 这两个ICx信号分别在相反的极性边沿有效。 4. 两个边沿信号中的一个被选为触发信号,并且从模式控制器被设置成复位模式。 5. 当触发信号来临时,被设置成触发输入信号的捕获寄存器,捕获 一个PWM周期(即连续的两个上升沿或下降沿) ,它等于包含TIM时钟周期的个数(即捕获寄存器中捕获的为TIM的计数个数n)。 6. 同样另一个捕获通道捕获触发信号和下一个相反极
[单片机]
stm32的串口空闲中断接收数据
举个例子: 1、后台数据- USART1- USART2- 其它设备,其它设备数据- USART2- USART1- 后台,这两个数据过程也可能同时进行。 2、由于硬件的限制,USART1和USART2的传输波特率不一样,比如USART1使用GPRS通信,USART2使用短距离无线通信;或者USART1使用以太网通信,USART2使用485总线通信。 现在我把我实现的过程简单描述一下: 1、 初始化设置:USART1_RX DMA1_ Channel5,USART2_RX DMA1_ Channel6,USART1_TX DMA1_ Channel4,USART2_TX DMA1_ Channel7(具体设置请看程序包) 2
[单片机]
关于使用VS Code开发stm32的一些感想
0. 引言 这几天在推【宇宙最强编辑器VS Code】专栏系列文章,不少群聊和文章的留言都是关于使用VS code 进行stm32开发和调试,看到后思绪万千,不知如何回复,决定暂停更新,结合自身的经历写篇文章来回复这个问题。 两年前我还是一个小萌新,老老实实的使用keil-MDK开发,我认识的一个学长在Linux方面非常强,当我第一次见到可以在满屏代码的条件下玩单片机,瞬间颠覆了我的认知,原来开发可以如此炫酷。 我开始接触Linux这个神奇的东西,在电脑上装了Ubuntu16.04,踏上Linux学习之旅,跟着网上诸多的教程搭建Linux下stm32的开发环境,两年多的时间里搭建了不少于5次,每次都要至少花费6-8个小时,
[单片机]
关于使用VS Code开发<font color='red'>stm32</font>的一些感想
stm32 _hal_time中断中的定时器回调函数
当触发中断时会调用对应的中断函数 例如定时器2中断: TIM2_IRQHandler(void) HAL 库中对中断的类型进行了分类处理,每一种类型的中断方式对应一个回调函数; 例如定时器有五种中断方式,对应着五个回调函数: Timer Period elapsed callback HAL_TIM_PeriodElapsedCallback() Timer Output Compare callback HAL_TIM_OC_DelayElapsedCallback() Timer Input capture callback HAL_TIM_IC_CaptureCallback() Timer Trigger
[单片机]
STM32仿真器ST-Link仿真
本仿真器是ST-Link ST仿真有硬件和软件仿真两种,一个是在硬件上跑,一个是软件模拟,前者真实性高,后者某些方面精确,比如计算延迟,我今天分享硬件仿真。 就是在开始的DEBUG选项出选右边的 选择好之后,进入仿真界面 进入仿真界面 有用的也就下面这一行有用 我主要讲这几个最左边RST是复位, 第二个是程序运行,第三个是停止程序运行, 四到七是程序一步一步执行的不同方式, 第八个是定位到光标程序处, 后面几个是一些逻辑窗口 这三个对应的是命令输入窗口,汇编窗口(汇编里面包含地址),标识符窗口(用来展示程序里面所有的的函数和成员变量,可以通过这里找到需要观察的变量,然后添加到窗口中,观察程序运行中变量的变化,方便调试程序)
[单片机]
<font color='red'>STM32</font>仿真器ST-Link仿真
关于stm32串口下载的问题
今天在用stm32f103rct6调程序的时候,不知道怎么回事j-link不能下载了,好像还不是驱动的问题,是她彻底坏了,没办法只能用串口下载了,以前没弄过,果然碰壁了。 首先、将boot0置1,boot1置0 其次就是串口的选择问题,注意需要选择串口1进行程序的下载
[单片机]
关于<font color='red'>stm32</font>串口下载的问题
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved