SPI通信----Flash存储器W25Q64

news2024/11/26 19:34:47

SPI怎么配置:

控制器配置(更稳定效率高)

IO模拟的方式(更灵活移植性高)

首先我会选择用IO模拟的方式配置,SPI根据时钟极性以及时钟相位的不同对应不同等的时序,我选择用时钟极性和时钟相位都为0状态的通信时序,根据时序找到通信规则。然后写两个函数,一个是IO控制器配置函数,一个是数据接收发送一体函数。以上就是SPI通信配置。

W25Q64存储结构:一共64M位,8M字节,一页256字节,16页为一个扇区,16个扇区为1块。共有2048个扇区,128块。

W25Q64引脚介绍

CS:低电平选中芯片开始通信-------------------PB14

wp:写保护   低电平开启写保护

HOLD:低电平时其他引脚断开,高电平时,正常工作

SCLK:-------------------------PA5

DO  ;-----------MISO-------PA6                               

DI   :-----------MOSI-------PA7

内部地址表示方式:0X某块(占两位)某扇区(占一位)某页(占一位)某字节 eg:0x12 3 4 56 转成10进制 --------18块的第3个扇区的第4页的86个字节

存储原理:不拆擦除前只能写0不能写1,擦除后的空间都是1

如何使用W25Q64的:

1.首先根据查看它的说明手册发现它是支持标准的SPI接口,可以用SPI通信

2.根据原理图我能知道他用到主控芯片的哪些IO

3.根据器件手册设计的程序 移植SPI底层协议的程序 再根据我们的需求写一些相关的读写擦除等函数

总结:存储结构  引脚 如何配置从器件的寄存器(通过发送指令控制W25Q64内部寄存器) 程序设计  存储结构体变

如果W25Q64里某个扇区存储了不同的数据类型,现在要改变某个参数,有什么办法在改变参数的同时不影响同扇区其他内容?

方法1:

1.定义一个结构体变量,读这个扇区的数据,将数据放在结构体变量里

2.擦除扇区

3.将要改变的参数设置成员改变参数

4.再将结构体写入扇区

方法2:

定义一个大数组如下图:

  

/***********SPI控制器配置通信方式**********/
/**************
*函数名    :spi1_init
*函数功能  :SPI通信IO初始化
*函数参数  :void
*函数返回值:void 
*函数描述  :SCL---时钟线 --- 复用输出---PA5
						MOSI--主出从入---复用输出---PA7
						MISO--主入从出---复用输入---PA6
**************/
void spi1_init(void)
{
	/*IO控制器配置*/
	//IO时钟使能
	RCC->AHB1ENR |= (1<<0);
	//模式配置
	GPIOA->MODER &=~ (0x3f<<10);
	GPIOA->MODER |= (0x2a<<10);//PA5 PA6 PA7复用模式
	
	//输出类型配置
	GPIOA->OTYPER &=~ (5<<5); //PA5 PA7推挽输出
	//
	//输出速度配置
	GPIOA->OSPEEDR &=~ (0x33<<10);//PA5 PA7 50Mhz速度
	GPIOA->OSPEEDR |= (0x22<<10);//PA5 PA7 50Mhz速度
	//复用模式配置
	GPIOA->AFR[0] &= ~(0xfff<<20);
	GPIOA->AFR[0] |= (0x555<<20);// SPI---AF5
	
	/***SPI控制器配置***/
	RCC->APB2ENR |= (1<<12);//spi时钟使能
	SPI1->CR1 &=~(1<<15);//双线单向通信
	SPI1->CR1 &=~(1<<11);//8位数据帧
	SPI1->CR1 &=~(1<<10);//全双工
	SPI1->CR1 |= (3<<8);//软件从器件管理允许通信
	SPI1->CR1 &=~(1<<7);//先发送高位
	SPI1->CR1 &=~(7<<3);//波特率 2分频
	SPI1->CR1 |= (1<<2);//配置为主模式
	SPI1->CR1 &=~(1<<1);//时钟极性为0
	SPI1->CR1 &=~(1<<0);//时钟相位为0
	
	SPI1->CR1 |= (1<<6);//使能
	
}


/**************
*函数名    :spi1_byte
*函数功能  :SPI通信数据交换(控制器配置的方式)
*函数参数  :u8 data
*函数返回值:u8 
*函数描述  :SCL---时钟线---PA5
						MOSI--主出从入  通用推挽输出模式---PA7
						MISO--主入从出   通用输入模式---PA6
**************/
u8 spi1_byte(u8 data)
{
	u8 val;
	//等待发送缓冲区为空
	while(!(SPI1->SR & (1<<1)));
	//将数据给到SPI_DR寄存器
	SPI1->DR=data;	
	//等待接收缓冲区为空
	while(!(SPI1->SR & (1<<0)));
	//读SPI_DR寄存器里的值
	val=SPI1->DR;
	return val;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1565264.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

The Google File System [SOSP‘03] 论文阅读笔记

原论文&#xff1a;The Google File System 1. Introduction 组件故障是常态而非例外 因此&#xff0c;我们需要持续监控、错误检测、容错和自动恢复&#xff01; 按照传统标准&#xff0c;文件数量巨大大多数文件都是通过添加新数据而不是覆盖现有数据来改变的&#xff0c;因…

基于springboot实现教师人事档案管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现在线商城系统演示 摘要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本ONLY在线商城系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理…

GD32F470 GY-906 MLX90614ESF BAA BCC DCI IR红外测温传感器模块温度采集模块移植

2.12 MLX90614红外无接触测温传感器 MLX90614 系列模块是一组通用的红外测温模块。在出厂前该模块已进行校验及线性化&#xff0c;具有非接触、体积小、精度高&#xff0c;成本低等优点。被测目标温度和环境温度能通过单通道输出&#xff0c;并有两种输出接口&#xff0c;适合于…

齐力控股集团现已加入2024年第13届生物发酵展

参展企业介绍 齐力控股集团专业生产高精度卫生级不锈钢设备配件及管道所有连接件、锻造、精加工一站式服务。产品广泛适用于制药、饮料、乳制品、啤酒、生物化工等领域。所有产品均按3A、SMS、DIN、RJT、IDF、DS等标准制造&#xff0c;所有产品均达到GMP药典要求。我们是一家有…

数字乡村创新之路:科技引领农村实现高质量发展

随着信息技术的快速发展&#xff0c;数字乡村建设已成为推动农村高质量发展的重要引擎。数字乡村通过科技创新&#xff0c;不仅改变了传统农业生产方式&#xff0c;也提升了乡村治理水平&#xff0c;为农民带来了更加便捷的生活。本文将从数字乡村的内涵、科技引领农村高质量发…

AAA Stylized Projectiles Vol1

28种具有命中和闪光效果的独特投射物:咒语、火球、箭、子弹、激光等等! 该资产包括: -28种独特的投射物(咒语、火球、箭头、子弹、激光等),与AAA魔术圈、盾牌和3D激光包风格相同 -27种独特的命中效果 -25个闪光效果 -96个纹理 -7个多用途粒子着色器 -演示场景拍摄脚本 -实…

2月白酒行业线上(京东天猫淘宝)电商数据分析:知名酒企全线飘红,同比增长120%!

2024年2月&#xff0c;白酒行业迎来了一波销售热潮。 从鲸参谋数据来看&#xff0c;在综合电商平台&#xff08;京东天猫淘宝&#xff09;白酒销售累计卖出约624万件&#xff0c;同比去年涨幅63%&#xff1b;销售额累计约49亿元&#xff0c;同比去年涨幅123%。白酒行业在整体酒…

JS继承与原型、原型链

在 JavaScript 中&#xff0c;继承是实现代码复用和构建对象关系的重要概念。本文将讨论原型链继承、构造函数继承以及组合继承等几种常见的继承方式&#xff0c;并提供相应的示例代码&#xff0c;并分析它们的特点、优缺点以及适用场景。 在开始讲解 JavaScript 的继承方式之…

VUE——概述

vue是前端框架&#xff0c;基于MVVM思想。 引入 从官网下载vue文件 <script src"js/vue.js"></script> 定义vue对象 new Vue({el: "#x",//vue接管区域&#xff0c;#表示选择器&#xff0c;x是id名字data: {message: "y"} })案例…

vue两个特性和什么是MVVM

一、什么是vue 1.构建用户界面 用vue往html页面中填充数据&#xff0c;非常的方便 2.框架 框架是一套线成的解决方案 vue的指令、组件&#xff08;是对ui结构的复用&#xff09;、路由、vuex 二、vue的特性 1.数据驱动视图 2.双向数据绑定 1.数据驱动视图 数据的变化会驱动…

MySQL 8.0.13安装配置教程

写个博客记录一下&#xff0c;省得下次换设备换系统还要到处翻教程&#xff0c;直接匹配自己常用的8.0.13版本 1.MySQL包解压到某个路径 2.将bin的路径加到系统环境变量Path下 3.在安装根目录下新建my.ini配置文件&#xff0c;并用编辑器写入如下数据 [mysqld] [client] port…

【漏洞复现】用友NC-Cloud系统queryRuleByDeptId存在SQL注入漏洞

“ 如棠安全的技术文章仅供参考&#xff0c;此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的…

世优科技上榜2024年度《中国虚拟数字人影响力指数报告》

日前&#xff0c;第三期《中国虚拟数字人影响力指数报告》在中国网络视听大会上正式发布。本期《报告》由中国传媒大学媒体融合与传播国家重点实验室&#xff08;以下简称“国重实验室”&#xff09;、中国传媒大学数字人研究院编制&#xff0c;中国网络视听协会、人民日报智慧…

目标检测——铁路工人数据集

一、重要性及意义 提升铁路工作安全性。铁路工人常常需要在铁路轨道附近进行各种作业&#xff0c;如维修、检查等&#xff0c;这些工作往往伴随着较高的安全风险。一个准确的铁路工人检测系统能够在第一时间识别并警示工人或操作员的接近&#xff0c;从而避免潜在的碰撞事故&a…

能源照明运作机制与智能调控技术实现途径

随着城市化进程的加速&#xff0c;智慧城市已成为现代城市发展的重要方向。能源照明作为城市基础设施的重要组成部分&#xff0c;其运作机制与智能调控技术的实现对于提高城市能源利用效率、促进可持续发展具有重要意义。 能源照明是一个涵盖广泛、错综复杂的领域&#xff0c;它…

C++ Primer 总结索引 | 第十二章:动态内存

1、到目前为止&#xff0c;我们编写的程序中 所使用的对象 都有着严格定义的生存期。全局对象 在程序启动时分配&#xff0c;在程序结束时 销毁。对于 局部自动对象&#xff0c;当我们进入 其定义所在的程序块时被创建&#xff0c;在 离开块时销毁。局部static对象 在第一次使用…

文心一言 VS 讯飞星火 VS chatgpt (227)-- 算法导论16.3 9题

九、证明&#xff1a;对于一个由随机生成的8位字符组成的文件&#xff0c;没有任何压缩方法可以望将其压缩、哪怕只是压缩一位。(提示&#xff1a;比较可能的文件数量和可能的编码文件数量。) 文心一言&#xff1a; 确实&#xff0c;对于一个由随机生成的8位字符组成的文件&a…

蓝桥杯相关算法学习(Python)

一、排序 排序算法是指将一组数据按照某种规则重新排列&#xff0c;使得数据呈现出递增或递减的顺序。常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。 1.冒泡排序 解释&#xff1a; 冒泡排序通过不断交换相邻两个元素的位置&#xff0c;使…

如何辨别蜂蜜的好坏?具体看哪些指标?

蜂蜜的好坏是通过检测指标反应出来的。 衡量蜂蜜质量的指标很多&#xff0c;主要分五类。 第一类是蜂蜜的基础性检测。如&#xff1a;感官、水分、灰分、酸度、蜂蜜的真实性&#xff08;SM-X&#xff09;等&#xff1b; 第二类是营养成分检测。如&#xff1a;果糖与葡萄糖含…

GC Roots

JVM垃圾回收的时候如何确定垃圾&#xff1f; 在说GC Roots之前&#xff0c;我们先看看JVM是如何确定垃圾的&#xff0c;从而进行回收 什么是垃圾 简单来说就是内存中已经不再被使用的空间就是垃圾 如何判断一个对象是否可以被回收 引用计数法 Java中&#xff0c;引用和对象…