stm32: 向flash写入数据

发布者:数据探险家最新更新时间:2016-10-13 来源: eefocus关键字:stm32  flash  写入数据 手机看文章 扫描二维码
随时随地手机看文章
1、向flash写入数据,首先根据写入地址、数据字节数,对数据分页,再调用页写入函数,写入flash。
2、数据分页函数代码:
     2.1 函数参数:
            pbuff:写入flash的数据指针
            addr:写入flash的地址
           num:写入flash的数据字节数
     2.2函数代码:
void spi_flash_write(uint8_t* pbuff,uint32_t addr,uint16_t num)
{
uint8_t temp;
//·定义分页参数
uint8_t numofpage,numofsingle;
 
//定义页地址参数
uint8_t pageaddr,pagecount;
 
//写入数据页数
numofpage=num/256;
//剩余字节数
numofsingle=num%256;
 
//----地址对齐
//数据写入地址在页内的位置
pageaddr=addr%256; 
//页内空置字节数
pagecount=256-pageaddr;
 
//---- 分页
if(pageaddr==0)                                //写入地址页对其
{
if(numofpage==0)     //写入字节数小于1页
{
//调用函数,进行页写入
spi_flash_pagewrite(pbuff,addr,num);
}
else              //写入字节数大于1页
{
//1.写入整页
while(numofpage--)
{
//调用函数,进行整页写入
spi_flash_pagewrite(pbuff,addr,pagesize);
//参数修改
pbuff+=pagesize;
addr+=pagesize;
}
 
//2.写入剩余字节数
spi_flash_pagewrite(pbuff,addr,numofsingle);
 
}
}
else                                           //写入地址与页未对齐
{
if(numofpage==0)                 //写入字节数小于1页
{
if(numofsingle>pagecount)   //页内剩余空间小于写入字节数,需写入下一页
{
//计算 写入页内剩余空间后,剩余字节数
temp=numofsingle-pagecount;
 
//写满  页内剩余空间
spi_flash_pagewrite(pbuff,addr,pagecount);
 
//修改参数
pbuff+=pagecount;
addr+=pagecount;
 
//写入剩余字节数
spi_flash_pagewrite(pbuff,addr,temp);
}
else                      //页内剩余空间大于写入字节数
{
//调用函数,进行页写入
spi_flash_pagewrite(pbuff,addr,num);
}
}
else                           //写入字节数大于1页,分3步进行写入
{
//写入flash第1页后,剩余字节数
num-=pagecount;
 
//剩余字节数 占flash 几页空间
numofpage=num/256;
//整页写入后,剩余字节数
numofsingle=num%256;
 
//第1步:在地址未对齐时,首先写满第1页,
                       //注意函数第3个参数
spi_flash_pagewrite(pbuff,addr,pagecount);
//修改参数
pbuff+=pagecount;
addr+=pagecount;
 
//第2步:整页写入
while(numofpage--)
{
 
spi_flash_pagewrite(pbuff,addr,pagesize);
pbuff+=pagesize;
addr+=pagesize;
}
 
//3.写入剩余字节数
                        //注意函数第3个参数
spi_flash_pagewrite(pbuff,addr,numofsingle);
}
}
 
}

关键字:stm32  flash  写入数据 引用地址:stm32: 向flash写入数据

上一篇:stm32 : NVIC 配置
下一篇:STM32库函数USART波特率计算的问题

推荐阅读最新更新时间:2024-03-16 15:15

基于stm32的FIR滤波
这两天有个地方用到了距离传感器,选用的传感器是夏普的近红外距离传感器。后来调试的时候发现传感器出来的信号除了有个随着距离规律变化的直流信号以外还有一个周期为1ms的尖峰脉冲信号形状如下图示 这样的波形会影响采集数据的结果,硬件上已经固定了,所以就选择从软件方面来寻找解决方案。 之前涉及的软件滤波无非就是采用求平均值的方法或者用排序的方法取中间值。但是发现这种传统的方法都不能解决问题,无奈之下只好请出FIR了。在网上找到一段关于FIR滤波器的C代码, const double Gains = { 0.0009479362407674,0.0009929350550642, 0.003930214337694,0.000
[单片机]
基于<font color='red'>stm32</font>的FIR滤波
三星NAND Flash 传四年后重返iPhone
    韩厂积极打进苹果iPhone供应链。韩国媒体报导,三星电子计画提供NAND型快闪记忆体给iPhone,这将是睽违4年后三星电子NAND型快闪记忆体重返iPhone供应链。 韩国网站媒体ET News报导,苹果从2012年iPhone 5推出开始,就没有采用三星电子(Samsung Electronics)的NAND型快闪记忆体,在于三星电子并未接受苹果要求、在NAND型快闪记忆体封装技术上采用电磁干扰屏蔽(EMI shielding;Electro Magnetic Interference shielding)技术。 报导引述产业人士消息,三星电子正在与韩国Protec、美国Asymtek、韩松化学株式会社(Han
[手机便携]
STM32学习记录7:定时器中断
配置流程: 1:系统时钟初始化,包括系统时钟和要开放的IO口或者功能的时钟配置。 2:IO口初始化,包括引脚,速率,输入输出模式等。 3:NVIC 中断向量配置 ,中断向量基地址和优先级的配置。 4:TIM3初始化:包括自动重装值,分频值,计数模式,使能TIM中断,使能TIM3外设 5:中断处理函数:注意清除TIMx的中断待处理位 注意: 1:RCC初始化要使能或者失能 APB1 外设时钟。 2:中断处理函数:注意清除TIMx的中断待处理位 TIMx_SR寄存器 3:关于时钟:初始化RCC时使用SystemInit()函数时默认的是AHB不分频,即HCLK等于SYSHCLK,APB2不分频,APB1为HCLK 2分频而定时器3
[单片机]
STM32中将变量或代码设定在指定内存地址的方法
各个编译器有自己不同的语法 对于arm_none_eabi_gcc: // Sampling variables #define ADC_SAMPLE_MAX_LEN 2000 __attribute__((section( .ram4 ))) static volatile int16_t m_curr0_samples ; __attribute__((section( .ram4 ))) static volatile int16_t m_curr1_samples ; __attribute__((section( .ram4 ))) static volatile int16_t m_ph1_samples ;
[单片机]
stm32 l0相关的eeprom
内部FLASH和EEPROM这种掉电后还能保存内容的内存统称为non-volatile memory(NVM),STM32L053内部有2K的EEPROM. 内部EEPROM的页大小为一个Word为单位,擦除是必须以页为单位,所以库函数里的擦除函数也是每次擦除4个字节: view plaincopy to clipboardprint? /** * @brief Erase a word in data memory. * @param Address: specifies the address to be erased. * @note To correctly run this function,
[单片机]
再造STM32---第十三部分:RCC—使用 HSE/HSI 配置时钟
配合《STM32F4xx 中文参考手册》 RCC 章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。 RCC : reset clock control 复位和时钟控制器。本章我们主要讲解时钟部分,特别是要着重理解时钟树,理解了时钟树, F429 的一切时钟的来龙去脉都会了如指掌。 13.1 RCC 主要作用—时钟部分: 设置系统时钟 SYSCLK、设置 AHB 分频因子(决定 HCLK 等于多少) 、 设置 APB2 分频因子(决定 PCLK2 等于多少)、设置 APB1 分频因子(决定 PCLK1 等于多少)、设置各个外设的分频因子;控制 AHB、 APB2 和 APB1 这三条总线时钟的开启
[单片机]
再造STM32---第十三部分:RCC—使用 HSE/HSI 配置时钟
STM32 Flash读写;Flash地址对应的存储内容及方式
概念:计算机中最小的信息单位是bit,也就是一个二进制位,8个bit组成一个Byte,也就是1个字节, 1个存储单元存放1个字节,每个存储单元对应一个32位(bit)地址,所以重要的话说三遍:对于32bit的ARM CPU 一个32位地址指向1个字节!!! 一个32位地址指向1个字节!!! 一个32位地址指向1个字节!!! 我们常说的flash空间,多少多少K,指的是多少多少K byte 假如我们执行下面的函数操作: FlashWriteWord_P(0x1082,&WordVar); /* 向0x1082、0x1083中写入0xABCD */ 经过编译,从map文件查看flash内容如下: 注意,前面的1080是
[单片机]
使用STM32按键控制LED亮灭
实验环境 Matlab版本 :2021b 操作系统 :Win10专业版 硬件平台 :YF-STM32-ALPHA 1R4 模型与原理图 本次实验所用到的Simulink模型如图5.1所示,实验现象: 按键按下、松开LED循环实现翻转亮灭效果,当按键按下时,产生下降沿脉冲,通过一个计数器对下降沿脉冲进行0~1循环计数,计数到最大值时产生输出信号,输出信号为0时,控制LED熄灭,输出值为1时,控制LED点亮。 按键电路采用对电源负极方式连接,按键松开状态为高电平H,即逻辑1,按键按下状态为低电平L,即逻辑0。 图5.1 按键控制LED亮灭simulink模型 图5.2 按键控制LED亮灭原理图 图5.3 按键在开发板
[单片机]
使用<font color='red'>STM32</font>按键控制LED亮灭
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved