当前位置: 首页 > news >正文

[STM32]Day11-Part2硬件实现SPI读写W25Q64

SPI外设简介

STM32内部集成了硬件SPI收发电路,可以由硬件自动执行时钟生成、数据收发等功能,减轻CPU的负担

可配置8位/16位数据帧、高位先行/低位先行

时钟频率:f_{PCLK} / (2,4,8,16,32,64,128,256)

支持多主机模型、主或从操作

可精简为半双工/单工通信

支持DMA

兼容I2S协议

STM32F103C8T6硬件SPI资源:SPI1、SPI2

SPI框图

上图为低位先行模式,设置接收缓冲区和发送缓冲区的目的是为了实现数据收发的连续性。MOSI和MISO的交叉是为了实现STM32作为SPI通信主从机的切换。接收缓冲区RDR和发送缓冲区TDR占用同一个地址,这与串口中缓冲区的设计相同,统一叫做DR。

波特率发生器用来产生SCK时钟,内部主要为一个分频器,对外设时钟APB1/APB2进行分频,分频系数由CR控制寄存器中的BR[2:0]控制。CR中LSBFIRST控制高位先行/地位先行,SPE(SPI ENABLE)是SPI使能,就是SPI_Cmd函数配置的控制位。MSTR被指主从模式。CPOL和CPHA用来选择SPI的4种模式。

SPI基本结构

数据发送与接收过程

主模式全双工连续传输

CPOL = 1,CPHA = 1说明是SPI模式3,SCK默认高电平,SCK第一个边沿移出数据,第二个边沿移入数据。发送缓冲器(写入SPI_DR)指的是发送数据寄存器即TDR,同理接收缓冲器指的是RDR。

非连续传输

以上是SPI模式3的非连续传输时序图。SS下降沿SPI通信开始(图中未画出),SCK的第一个边沿检测到TXE = 1,说明TDR此时为空,软件就将待发送数据0xF1写入TDR,同时TXE变为0。此时移位寄存器为空,0xF1会立刻转入移位寄存器开始发送,MOSI产生输出,同时TXE变回1,但是软件不会立刻把下一个待发送数据写入TDR,而是等待MOSI第一个字节发送完成,MISO第一个字节接收完成,RXNE为1并读取成功后,才向TDR写入下一个数据。

整体流程为:等待TXE为1 -> 将待发送数据写入TDR -> 等待RXNE为1 -> 从RDR读取接收到的数据

非连续传输的缺点:数据传输过程中,字节与字节之间有间隙,影响通信速度。

软硬件波形对比

硬件SPI读写W25Q64

初始化SPI外设的整体流程:开启时钟 -> 初始化GPIO口(SCK和MOSI由SPI外设控制输出,配置为复用推挽输出,SS软件模拟配置为推挽输出,MISO配置为上拉输入) -> 配置SPI外设 -> 开启SPI

代码

// mySPI.c#include"stm32f10x.h"// Device header// 封装对SS的操作,保留软件模拟voidMySPI_W_SS(uint8_tBitVal){GPIO_WriteBit(GPIOA,GPIO_Pin_4,(BitAction)BitVal);// SPI通信非常快所以不用加延时}voidMySPI_Init(void){// 开启时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);// 配置GPIOGPIO_InitTypeDef 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_Init(GPIOA,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;// 输SS配置推挽输出模式GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;GPIO_Init(GPIOA,&GPIO_InitStructure);// 配置SPI外设SPI_InitTypeDef SPI_InitStructure;SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_128;SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;// 设置为0SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;// 设置为0SPI_InitStructure.SPI_CRCPolynomial=7;// CRC校验位,设为默认SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;// 双线全双工SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;// 高位先行SPI_InitStructure.SPI_Mode=SPI_Mode_Master;// 主机模式SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;// 软件SSSPI_Init(SPI1,&SPI_InitStructure);// 开启SPISPI_Cmd(SPI1,ENABLE);// 设置SS为高电平,不选中从机MySPI_W_SS(1);}// 产生起始条件voidMySPI_Start(void){MySPI_W_SS(0);}// 产生终止条件voidMySPI_Stop(void){MySPI_W_SS(1);}// 交换一个字节uint8_tMySPI_SwapByte(uint8_tByteSend){// 等待TXE变为1while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)!=SET);// 待发送数据写入TDRSPI_I2S_SendData(SPI1,ByteSend);// 等待RXNE变为1while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)!=SET);// 读取RDR中结果uint8_tByteReceive;ByteReceive=SPI_I2S_ReceiveData(SPI1);returnByteReceive;}
http://www.gsyq.cn/news/1504041.html

相关文章:

  • 湖南一凡教学设备有限公司:40余年专注教学书写板,全场景解决方案实力推荐 - 品牌推荐官
  • 零样本手写汉字识别:信息熵与双视图结构对齐框架
  • Android Root隐藏终极指南:3步配置Zygisk-Assistant实现完美隐藏
  • 办公配件外贸网站如何获得海外采购商订单? - 外贸营销驿站
  • 2025年镀锌管厂家实力推荐:天津市茂金金属制品有限公司20#/DN20/DN65镀锌管全系供应 - 品牌推荐官
  • PCA6416A GPIO扩展芯片实战:I2C接口、电平转换与嵌入式设计
  • 深入解析PCA9626:24通道LED驱动芯片的寄存器配置、热管理与实战指南
  • 3个简单步骤,让B站字幕下载变得如此轻松
  • Httpx实战进阶:从基础探测到高级指纹与自动化
  • 毕业设计可用的旅游景点推荐系统:SpringBoot后端+Vue前端+MySQL数据库全套源码
  • 沈阳辽中区防水补漏哪家靠谱?2026正规修缮公司排名实测(全区通用) - 苏易房屋修缮
  • MPV懒人包完整指南:5步让Windows用户快速打造专业级影音播放器
  • 大众点评最新mtgsig1.2 4.24最新算法逆向角度分析
  • ScienceDecrypting:简单三步永久解锁学术PDF文档
  • 原神抽卡记录分析神器:5分钟掌握你的抽卡命运
  • 湖南湘莲批发市场全攻略:湖南莲易湘莲有限公司地址、电话及产品详解 - 品牌推荐官
  • SCMP证书对职业发展有帮助吗值得考吗​​​​​​​​​ - 众智商学院课程中心
  • 从代码到洞察:用Python量化分析《红楼梦》的核心人物网络
  • 沈阳新民市防水补漏哪家靠谱?2026正规修缮公司排名实测 - 苏易房屋修缮
  • Zygisk-Assistant:三合一Root隐藏方案的技术深度解析
  • 沈阳防水补漏哪家靠谱?2026正规修缮公司排名实测 - 苏易房屋修缮
  • COMSOL断层突水仿真包:Brinkman渗流+岩土应力+蠕动流三场联动建模实操资源
  • 杭州跟团游品牌排行:实测服务与性价比对比 - 互联网科技品牌测评
  • 洛雪音乐助手实战解析:构建跨平台聚合音乐播放器的专业方案
  • 用Keras复现EEGNex模型:从论文到代码的保姆级教程(附完整训练脚本)
  • 机器人仿真环境随机化技术解析与应用实践
  • 基于PLC的三轴喷涂机器人控制系统设计(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_可以扫码或者私信
  • 如何安全访问加密的微信数据库:开源数据解密工具完全指南
  • PCA9535A I2C GPIO扩展器:从原理到实战的嵌入式引脚扩展方案
  • AI数字营销实测体验,多平台发布体验