洋桃开发板笔记(五 ) Flash闪存的使用

Flash闪存的使用

杜洋工作室 www.DoYoung.net

洋桃电子 www.DoYoung.net/YT

  • 在此声明一下所有代码均为 杜洋工作室 的不允许复制,转发等,本人只是在此程序上进行理解和注释。

上一次的笔记是在洋桃开发板上进行用OLED0561 显示器的使用,实现小时钟功能。对OLED屏幕有兴趣可以去看看:
https://blog.csdn.net/qq_40546576/article/details/99071244
本次主要讲的是Flash闪存的使用。由于本次特殊,需要截取部分图片进行讲解,可能造成了观看不适,请大家谅解!谢谢。


一、基本功能理解

存储器,一般存储器分为RAM,ROM,也就是运行内存(ram)和程序存储器(rom)。
运行内存(ram):是存放cpu时时刻刻运算的结果等等,速度快,一旦掉电就没有信息了。
程序存储器(rom):是存放程序,和大型的数据,相对与ram速度会慢些,但是掉电不失去信息。
Flash是属于程序存储器(rom)一类,在stm32中Flash还分有NOR Flash和NAND Flash。二者的区别简单说,就是NOR Flash一般存取代码,如CPU内的ROM等等,NAND Flash一般存放大数据,如:U盘,移动硬盘。
Stm32f103采用的是NAND Flash,这个存储器读取慢,擦除信息,只能整页整页擦除
在洋桃开发板中没有外接Flash,而秉火的开发板用SPI进行外部Flash读写,外部的为8M的Flash。
为了理解方便,我们先学会用stm32内部的Flash,才能为以后外部外接Flash做好准备。

二、了解相关《参考手册》

请大家阅读《参考手册》的28页 2.3 存储器映像,这一章的内容。
我们截取其中一部分
在这里插入图片描述
在这里插入图片描述
由于stm32分有各种大小的型号,洋桃开发板用的是48个管脚的,属于中等容量的产品。不同的容量的stm32对应着不同内存区域,可以去《参考手册》看看。
我们的一般把程序放在主存储器中,程序存放从0页往后存放,而我们像存储一些简单的数据就可以把数据存在后面的几页,预防万一存放的数据破坏自己原先存放的程序。每一页有1024个地址。

三、主要代码

我们主要用到:
FLASH_Unlock(); //解锁FLASH编程擦除控制器
FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);//清除标志位
FLASH_ErasePage(add); //擦除指定地址页
FLASH_ProgramHalfWord(add,dat); //从指定页的addr地址开始写
FLASH_Lock(); //锁定FLASH编程擦除控制器

下面编写程序开始:

一、接下来就是Flash.h头文件,用来声明函数及成员变量

#ifndef __FLASH_H
#define __FLASH_H 			   
#include "sys.h"

void FLASH_W(u32 add,u16 dat);
u16 FLASH_R(u32 add);

#endif

二、主要的flash.c程序,用设定函数功能

#include "flash.h"//导入头文件

//FLASH写入数据
void FLASH_W(u32 add,u16 dat){ //参数1:32位FLASH地址。参数2:16位数据
//	 RCC_HSICmd(ENABLE); //打开HSI时钟
	 FLASH_Unlock();  //解锁FLASH编程擦除控制器
     FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);//清除标志位
     FLASH_ErasePage(add);     //擦除指定地址页
     FLASH_ProgramHalfWord(add,dat); //从指定页的addr地址开始写
     FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);//清除标志位
     FLASH_Lock();    //锁定FLASH编程擦除控制器
}

//FLASH读出数据
u16 FLASH_R(u32 add){ //参数1:32位读出FLASH地址。返回值:16位数据
	u16 a;
    a = *(u16*)(add);//从指定页的addr地址开始读
	return a;
}

三、接下来就是主函数main.c

#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "key.h" 

#include "flash.h" //导入Flash的头文件

#define FLASH_START_ADDR  0x0801f000	  //写入的起始地址

int main (void){//主程序
	u16 a; //定义变量
	//初始化程序
	RCC_Configuration(); //时钟设置
	LED_Init();//LED初始化
	KEY_Init();//按键初始化

    a = FLASH_R(FLASH_START_ADDR);//从指定页的地址读FLASH

	GPIO_Write(LEDPORT,a); //直接数值操作将变量值写入LED(LED在GPIOB组的PB0和PB1上)

	//主循环
	while(1){

		//示例4:有锁存
		if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //读按键接口的电平
			delay_ms(20); //延时20ms去抖动
			if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //读按键接口的电平
				//在2个LED上显示二进制加法
				a++; //变量加1
				if(a>3){ //当变量大于3时清0
					a=0; 
				}
				GPIO_Write(LEDPORT,a); //直接数值操作将变量值写入LED(LED在GPIOB组的PB0和PB1上)

				FLASH_W(FLASH_START_ADDR,a); //从指定页的地址写入FLASH

				while(!GPIO_ReadInputDataBit(KEYPORT,KEY1)); //等待按键松开 
			}
		}
	}
}

注意事项!

在这里插入图片描述


下一节内容:

探索每一个地址存放16位无符号的数据有多大,并且我们用单片机的oled屏幕来显示自己存取的数据。对于不懂oled屏幕的使用可以看我的笔记四:https://blog.csdn.net/qq_40546576/article/details/99071244


参考来源:

  • Google搜寻引擎等等
  • 杜洋工作室 www.DoYoung.net
  • 洋桃电子 www.DoYoung.net/YT
  • STM32库开发实战指南 基于STM32F103(第二版)
  • 《stm32f1xx 参考手册》

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 洋桃iot(YoungTek IoT)开发资料包是为开发者提供的一套包含相关学习资料和资源的综合套件。该资料包可以帮助开发者学习和使用洋桃iot开发进行物联网应用的开发洋桃iot开发资料包通常包含以下内容: 一、开发硬件手册:介绍了洋桃iot开发的各个硬件接口和功能,以及相关的操作和使用方法。开发者可以通过该手册了解开发的硬件架构和特性。 二、开发软件说明:介绍了开发的软件部分,包括操作系统、驱动程序和开发工具等。开发者可以通过该说明学习如何使用开发的软件部分。 三、开发示例代码:提供了一些常见的物联网应用的示例代码,包括传感器数据采集、数据传输和远程控制等。开发者可以通过学习这些示例代码,了解如何使用洋桃iot开发进行应用开发。 四、开发编程教程:提供了一些基本的编程教程,包括C语言和Python等常用的编程语言。开发者可以通过学习这些教程,了解如何使用洋桃iot开发进行编程和应用开发。 五、技术支持:洋桃iot开发资料包通常还提供技术支持,开发者可以通过官方网站或者在线社区等途径获取技术支持和解答问题。 综上所述,洋桃iot开发资料包提供了一套丰富的学习资源,帮助开发者快速入门并掌握洋桃iot开发使用,从而进行物联网应用的开发。 ### 回答2: 洋桃IoT开发是一种集成了物联网技术的开发,它的资料包包括以下内容: 1. 开发说明书:详细介绍了洋桃IoT开发的硬件结构、接口定义、功能特点,以及如何进行开发和调试。 2. 开发工具:提供了适用于洋桃IoT开发开发工具,包括编程软件、调试工具等,方便开发者进行项目开发和调试。 3. 示例代码:提供了一些常见的示例代码,涵盖了物联网应用的基本功能,如传感器数据采集、网络通信、云平台连接等,开发者可以根据自己的需求进行修改和扩展。 4. 电路原理图:提供了洋桃IoT开发的电路原理图,方便开发者深入理解开发的硬件设计和接口电路连接。 5. 相关资料和参考文档:提供了一些与洋桃IoT开发相关的资料和参考文档,如芯片手册、通信协议等,帮助开发者更好地了解和使用开发洋桃IoT开发具有良好的兼容性和易用性,开发者可以基于此开发快速开发物联网应用,并实现硬件与软件的高度整合和互联互通。通过使用洋桃IoT开发开发者可以更加方便地实现物联网产品的开发和部署,加快产品上市和推广的速度。 ### 回答3: 洋桃iot开发是一款功能强大且易于使用的物联网开发。该开发提供了丰富的资料包,用于帮助开发人员快速上手和开发物联网应用。 首先,洋桃iot开发资料包中包含了详细的硬件说明书。该说明书介绍了开发的主要硬件组成、连接方式以及引脚定义等信息,让开发人员了解开发的结构和功能。 其次,资料包中还包括了示例代码和开发工具。开发人员可以通过这些示例代码快速入门,了解如何使用洋桃iot开发进行基本的物联网应用开发开发工具则提供了一个集成开发环境,方便开发人员编写、调试和上传代码到洋桃iot开发。 此外,洋桃iot开发资料包中还提供了丰富的教程和文档。这些教程和文档从不同层面介绍了物联网的基础知识、使用洋桃iot开发的方法和技巧,以及常见问题的解决方法。开发人员可以通过这些资源深入学习和理解物联网的原理和应用。 最后,洋桃iot开发资料包还包括了团队的技术支持渠道。开发人员可以通过官方网站、社区论坛或邮件联系技术支持团队,提出问题或寻求帮助。这样可以确保开发过程中遇到的问题得到及时解决,提高开发效率。 总之,洋桃iot开发资料包提供了全面的资源和支持,为开发人员提供了便利。借助这些资料和工具,开发人员可以快速开发出高质量的物联网应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mannixcsdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值