江协科技stm32————11-5 硬件SPI读写W25Q64

一、开启时钟,开启SPI和GPIO的时钟

二、初始化GPIO口,其中SCK和MOSI是由硬件外设控制的输出信号,配置为复用推挽输出

MISO是硬件外设的输入信号,配置为上拉输入,SS是软件控制的输出信号,配置为通用推挽输出

三、配置SPI外设,使用结构体调用SPI_Init

四、开关控制,调用SPI_Cmd,使能

 void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data);//写DR数据寄存器

uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx);//读DR

步骤

一、等待TXE为1,发送寄存器为空

二、软件写入数据置SPI_DR

三、等待RENE为1

四、读取DR 

MySPI.c

#include "stm32f10x.h"                  // Device headervoid MySPI_W_SS(uint8_t BitValue)	//ss = cs
{GPIO_WriteBit(GPIOA , GPIO_Pin_4, (BitAction)BitValue);
}void MySPI_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);SPI_InitTypeDef SPI_InitStructure;SPI_InitStructure.SPI_Mode = SPI_Mode_Master;	//指定为主机SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;	//双线全双工SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;	//8位数据帧SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;	//高位先行SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;	//第一个边沿开始采样CPHA=0SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;SPI_InitStructure.SPI_CRCPolynomial = 7;SPI_Init(SPI1, &SPI_InitStructure);SPI_Cmd(SPI1 , ENABLE);MySPI_W_SS(1);
}void MySPI_Start(void)
{MySPI_W_SS(0);
}void MySPI_Stop(void)
{MySPI_W_SS(1);
}uint8_t MySPI_SwapByte(uint8_t ByteSend)	//交换字节
{while (SPI_I2S_GetFlagStatus(SPI1 , SPI_I2S_FLAG_TXE) != SET);SPI_I2S_SendData(SPI1 , ByteSend);while (SPI_I2S_GetFlagStatus(SPI1 , SPI_I2S_FLAG_RXNE) != SET);return SPI_I2S_ReceiveData(SPI1);
}

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

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

相关文章

十,Spring Boot 的内容协商的详细剖析(附+Debug调试说明)

十,Spring Boot 的内容协商的详细剖析(附Debug调试说明) 文章目录 十,Spring Boot 的内容协商的详细剖析(附Debug调试说明)1. 基本介绍2. 准备工作3. 内容协商的本质4. 内容协商:注意事项和使用细节5. 总结:6. 最后: 1…

数据库安全性控制

‍ 在当今信息化时代,数据库安全性 对于保护数据免受非法访问和损害至关重要。无论是个人数据还是企业机密,数据库安全性控制都能有效地防范潜在的威胁。本文将为你深入浅出地介绍数据库安全性控制的关键方法和机制,帮助你轻松掌握这一重要概…

空间物联网中的大规模接入:挑战、机遇和未来方向

这篇论文的标题是《Massive Access in Space-based Internet of Things: Challenges, Opportunities, and Future Directions》,作者包括Jian Jiao, Shaohua Wu, Rongxing Lu, 和 Qinyu Zhang。文章发表在2021年10月的IEEE Wireless Communications上。论文主要探讨…

YoloV10改进策略:Block改进|PromptIR(NIPS‘2023)|轻量高效,即插即用|(适用于分类、分割、检测等多种场景)

文章目录 摘要官方结果代码详解如何在自己的论文中描述摘要 本文使用PromptIR框架中的PGM模块来改进YoloV10。PGM(Prompt Generation Module)模块是PromptIR框架中的一个重要组成部分,主要负责生成输入条件化的提示(prompts)。这些提示是一组可学习的参数,它们与输入特征…

CSS——盒子模型

首先CSS将所有的元素都看成一个盒子 盒子的组成: content —— 内容区域padding —— 内边距(边框与内容间的距离)border —— 边框线margin —— 外边距(盒子盒子间的距离) 这里着重说一下margin: 水平方向&#xff…

Linux中yum命令

1.Linux常见软件安装方式 a.yum/apt b.rpm安装包安装 c.源码安装 2.yum常用指令 在root权限下可以安装、卸载程序 安装 yum install [package] 卸载 yum remove [package] 还可以使用yum list列出yum源中所有可安装程序 yum list

CTK框架(十):PluginAdmin插件

目录 1.引言 2.实现原理 3.实际应用 3.1.界面控制 3.2.访问服务管理插件 4.总结 1.引言 在CTK框架(三): 插件的安装讲解了插件的安装、启动、停止和卸载方法,对于一个插件可以这样写;但是如果是在一个大型的应用程序中,里面有很多插件&…

从100G到400G:利用多模光纤升级数据中心网络

数据中心网络的持续发展 数据中心网络的持续发展涵盖了两个关键方面。首先,必须应对由机器学习和物联网等数据密集型应用所带来的带宽和流量需求的增长挑战,这些应用正在推动现有10G和40G链路的升级;其次,为了满足日益提升的可持…

好用的视频压缩工具有哪些?这4款千万不要错过

视频压缩的方法有很多种,像我们手机里的视频剪辑工具,手机和电脑自带的压缩功能,在线压缩网站,专业压缩软件压缩等等。不同的场景和需求下大家可以选择不同的工具,但是如果碰到需要大量和经常压缩视频的话,…

JS_阿里云oss视频上传后,如何获取视频封面

当您需要获取视频封面、提取视频关键帧图像进行视频编辑,或者提取视频中特定场景帧图像用于视频监控等时,可以将视频上传至OSS存储空间,然后通过本文所示方法进行视频截帧。 使用示例 本文示例使用的Bucket为杭州地域名为oss-console-img-de…

python绘制3D瀑布图

成品: 代码: import matplotlib.pyplot as plt import matplotlib.ticker as ticker from mpl_toolkits.mplot3d.art3d import Poly3DCollection import numpy as npdef line_3d(x, y, z, x_label_indexs):"""在y轴的每个点,…

Android Framework(五)WMS-窗口显示流程——窗口布局与绘制显示

文章目录 relayoutWindow流程概览应用端处理——ViewRootImpl::setView -> relayoutWindowViewRootImpl::setViewViewRootImpl::performTraversalsViewRootImpl::relayoutWindow Surface的创建WindowManagerService::relayoutWindow了解容器类型和Buff类型的SurfaceBuff类型…

【机器学习】高斯网络的基本概念和应用领域以及在python中的实例

引言 高斯网络(Gaussian Network)通常指的是一个概率图模型,其中所有的随机变量(或节点)都遵循高斯分布 文章目录 引言一、高斯网络(Gaussian Network)1.1 高斯过程(Gaussian Proces…

【JSP `page` 指令详解:构建高效的动态网页】

JSP page 指令详解&#xff1a;构建高效的动态网页 在 JavaServer Pages (JSP) 中&#xff0c;<% page %> 指令用于配置 JSP 页面的一些关键属性。这些属性控制着页面的行为和生成的 Servlet 的特性&#xff0c;例如字符编码、是否启用会话、缓冲区大小等。合理使用 page…

鸿蒙OpenHarmony【轻量系统芯片移植】内核移植

移植芯片架构 芯片架构的移植是内核移植的基础&#xff0c;在OpenHarmony中芯片架构移植是可选过程&#xff0c;如果当前OpenHarmony已经支持对应芯片架构则不需要移植操作&#xff0c;在“liteos_m/arch”目录下可看到当前已经支持的架构&#xff0c;如表1&#xff1a; 表1 …

羽毛球关键点检测系统源码分享

羽毛球关键点检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

openSSL 如何降版本

文章目录 前言openSSL 如何降版本1. 卸载2. 安装新的openssl版本3. 验证 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的话&…

Linux IO模型(多路复用)

【1】Linux IO模型&#xff1a;IO多路复用 场景假设二 假设妈妈有三个孩子&#xff0c;分别不同的房间里睡觉&#xff0c;需要及时获知每个孩子是否醒了&#xff0c;如何做&#xff1f; 1.一直在一个房间呆着&#xff1a;看不到其他两个孩子 2.每个房间不停的看&#xff1a;可以…

WebGL系列教程五(使用索引绘制彩色立方体)

目录 1 前言2 立方体3 开始绘制3.1 声明顶点和颜色3.2 使用索引绘制3.3 效果3.4 完整代码 4 总结 1 前言 上一讲我们讲了如何绘制彩色的三角形&#xff0c;这一讲我们来说如何绘制立方体。为什么几乎所有的WebGL教程总是从开始绘制三角形开始&#xff0c;因为三角形是最小的面&…

服务器模型 Reactor 和 Proactor

Proactor 具体流程如下&#xff1a; 处理器发起异步操作&#xff0c;并关注 IO 完成事件&#xff1b;事件分离器等待操作完成事件&#xff1b;分离器等待过程中&#xff0c;内核并行执行实际的 IO 操作&#xff0c;并将结果存储入用户自定义的缓冲区&#xff0c;最后通知事件分…