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

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---时钟线 --- 复用输出---PA5MOSI--主出从入---复用输出---PA7MISO--主入从出---复用输入---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);//时钟极性为0SPI1->CR1 &=~(1<<0);//时钟相位为0SPI1->CR1 |= (1<<6);//使能}/**************
*函数名    :spi1_byte
*函数功能  :SPI通信数据交换(控制器配置的方式)
*函数参数  :u8 data
*函数返回值:u8 
*函数描述  :SCL---时钟线---PA5MOSI--主出从入  通用推挽输出模式---PA7MISO--主入从出   通用输入模式---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.hqwc.cn/news/588565.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue两个特性和什么是MVVM

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

硬件了解 笔记

motherboard的高低端区别在哪里&#xff1f; 核心&#xff1a;从单核变成双核&#xff0c;多核&#xff08;几核就是几个打工人&#xff09; 多线程&#xff1a;6核本来对应6个线程&#xff0c;但是多线程就是说6核对应12个线程 频率 主频&#xff1a;平时打工的速度 睿频&…

【鹅厂摸鱼日记(一)】(工作篇)认识八大技术架构

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:重生之我在鹅厂摸鱼⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多知识   &#x1f51d;&#x1f51d; 认识八大架构 1. 前言2. 架构简介&…

golang和Java的简单介绍和对比

一、golang 1、Golang简介 Golang&#xff0c;也称为Go&#xff0c;是由Google公司在2009年推出的开源编程语言&#xff0c;由罗伯特格瑞史莫(Rob Pike)、肯汤普逊(Ken Thompson)、罗勃派克(Robert Griesemer)等人设计。Go语言的目标是在保持简单高效的编程模型的同时&#xf…

435.无重叠区间

// 定义一个名为Solution的类 class Solution {// 定义公共方法eraseOverlapIntervals&#xff0c;输入为二维整数数组intervals&#xff0c;返回值类型为整数public int eraseOverlapIntervals(int[][] intervals) {// 首先&#xff0c;按照区间的起始位置对区间进行升序排序A…

Hive-事务

一、什么是ACID&#xff1f;为什么要使用它 ACID代表数据库事务的四个特征&#xff1a; 1、原子性&#xff08;一个操作要么完全成功&#xff0c;要么失败&#xff0c;它不会留下部分数据&#xff09;、 2、一致性&#xff08;一旦应用程序执行了一个操作&#xff0c;该操作的…

基于Springboot + vue实现的智能菜谱系统设计与实现+毕业论文+搭建视频+答辩PPT(包运行调试)

介绍 系统主要包括两个角色&#xff1a;用户、管理员 用户&#xff1a;登录、注册、查询公告信息、菜谱信息推荐、菜谱信息详情、菜谱评论、菜谱收藏、留言信息、个人中心、我的收藏等功能 管理员&#xff1a;登录、管理员主页、个人中心、用户信息管理、菜式类型管理、菜谱信…

Vue项目引入字体文件无效

这是原来的&#xff0c;没有生效 font-face {font-family: BebasNeue;src: url(./font/BebasNeue.otf);font-weight: normal;font-style: normal; }这是修改后的&#xff08;多了个空格&#xff09; font-face {font-family: Bebas Neue;src: url(./font/BebasNeue.otf);font-…

卫星导航低噪声放大器芯片(LNA)-AT2659

AT2659 是一款专门针对中国 BDS&#xff08;北斗卫星导航系统&#xff09;&#xff0c;美国的 GPS&#xff0c;俄罗斯的 GLONASS 和欧盟的 GALILEO 导航系统应用而设计的高增益、低噪声系数射频放大器。 AT2659 具有 23dB 高增益和 0.71dB 的低噪声系数。芯片支持 1.4V 至 3.…

幕后匠心:配器师菲利波·兰迪与《熊出没·逆转时空》

《熊出没逆转时空》是一部上映于2024年大年初一的喜剧动画电影&#xff0c;讲述了光头强等主角穿越后面对时间规则&#xff0c;勇敢保护生态、拯救朋友的冒险故事。制作方华强方特&#xff08;深圳&#xff09;动漫有限公司&#xff0c;是一家集影视制作、动漫创作于一体的专业…

Windows安装EMBY服务端

官网下载Windows版的EMBY服务端 下载地址&#xff1a;Emby Server for Windows&#xff0c;可选择下面的压缩包 解压目录&#xff0c;放入程序文件夹中 下载插件 下载地址&#xff1a;HX共享文件索引 (jiawei.xin) 查看刚刚下载的EMBY服务端的版本&#xff0c;找到对应的目…

[蓝桥杯练习]通电

kruskal做法(加边) #include <bits/stdc.h> using namespace std; int x[10005],y[10005],z[10005];//存储i点的x与y坐标 int bcj[10005];//并查集 struct Edge{//边 int v1,v2; double w; }edge[2000005]; int cmp(Edge a, Edge b){return a.w < b.w;} int find(i…