当前位置: 首页 > 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.jsqmd.com/news/992292/

相关文章:

  • 用POI-TL自动生成带柱状图的Word质量报告?我封装了一个工具类直接拿去用
  • 湖南一凡教学设备有限公司:40余年专注教学书写板,全场景解决方案实力推荐 - 品牌推荐官
  • Word文档导出为图片的4种实用方法:2026保姆级教程(Windows/Mac/WPS通用)
  • 3步解锁AMD Ryzen隐藏性能:SMUDebugTool终极调优指南
  • Windows系统文件d3dpmesh.dll文件丢失找不到问题解决
  • 免费终极暗黑2存档编辑器:d2s-editor完全指南
  • 零样本手写汉字识别:信息熵与双视图结构对齐框架
  • 揭秘115网盘在Kodi中的智能流媒体引擎:3大核心技术解析
  • Android Root隐藏终极指南:3步配置Zygisk-Assistant实现完美隐藏
  • 办公配件外贸网站如何获得海外采购商订单? - 外贸营销驿站
  • 深入解析NXP PCA9620 LCD驱动器:I2C通信、RAM映射与双缓冲显示实战
  • STM8S硬件I2C驱动AT24C02的完整读写工程(含串口调试与多模式验证)
  • PCA6416A GPIO扩展芯片实战:I2C接口、电平转换与嵌入式设计
  • 2026年京东云OpenClaw/Hermes Agent配置Token Plan集成完整指南
  • DDrawCompat深度技术解析:Windows 11老游戏DirectDraw兼容性性能优化完整方案
  • B站视频缓存转换终极指南:m4s-converter一键无损合并MP4文件
  • 最实用的免费投票平台推荐 - 投票评选活动
  • 2025年镀锌管厂家实力推荐:天津市茂金金属制品有限公司20#/DN20/DN65镀锌管全系供应 - 品牌推荐官
  • 深入解析PCA9626:24通道LED驱动芯片的寄存器配置、热管理与实战指南
  • 3个简单步骤,让B站字幕下载变得如此轻松
  • Httpx实战进阶:从基础探测到高级指纹与自动化
  • SpringBoot项目里,如何优雅地用poi-tl生成带动态图表的Word文档?
  • Flutter 征战鸿蒙 NEXT:死磕 Text 文本组件,从底层排版引擎到 RichText 性能调优
  • 革命性暗黑3自动化助手:D3keyHelper智能化游戏解放方案
  • 沈阳辽中区防水补漏哪家靠谱?2026正规修缮公司排名实测(全区通用) - 苏易房屋修缮
  • 毕业设计可用的旅游景点推荐系统:SpringBoot后端+Vue前端+MySQL数据库全套源码
  • 过来人实测|去新疆旅行怎么选本地导游?分享2位优质本土向导 - 旅行分享
  • 杭州定制游旅行社排行:基于服务与行程的客观对比 - 互联网科技品牌测评
  • 沈阳法库县防水补漏哪家靠谱?2026正规修缮公司排名实测 - 苏易房屋修缮
  • 9.2 长短期记忆网络(LSTM):从遗忘门到记忆元的深度解析