硬件SPI读写W25Q64

设计STM32内部硬件外设的表都得参考引脚定义表。

SCK-----CLK

MISO----DO

MOSI----D

VCC(电路的供电电压)---3.3V

GND---GND

常用非连续化输出方案

由软件实线改为硬件实现功能时基于通信层的业务代码不需要更改,代码经过封装后仅需考虑调用实现即可。

硬件SPI的代码分为两部分

第一部分-----SPI外设的初始化代码

SPI初始化的流程

1.开启时钟开启GPIO和SPI的时钟

2.初始化GPIO口

        其中SCK和MOSI是由硬件外设控制的输出信号,所以配置为复用推挽输出

补----------------------------------------------------------------推挽输出可以输出高,低电平,连接数字器件;

推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源低定。

推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度

复用推挽输出,此时IO受内部外设控制,比如定时器的PWM,比如SPI的MOSI,MISO等。 而普通的推挽输出,则IO受ODR控制。 

        MISO是硬件外设的输入信号可以配置为上拉输入(输入设备有多个不存在复用输入)普通IO口可以输入,外设也可以输入。

 a-----------SS是软件控制的输出信号,配置为通用推挽输出

b--------------SCK和MOSI是由硬件外设控制的输出信号,所以配置为复用推挽输出

补----------------------------------------------------------------推挽输出可以输出高,低电平,连接数字器件;

推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源低定。

推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度

复用推挽输出,此时IO受内部外设控制,比如定时器的PWM,比如SPI的MOSI,MISO等。 而普通的推挽输出,则IO受ODR控制。 

先查定义图,找到对应引脚

 c------- MISO是硬件外设的输入信号可以配置为上拉输入(输入设备有多个不存在复用输入)普通IO口可以输入,外设也可以输入。

3.配置SPI外设

使用结构体选参数,调用之前的底层代码SPI_Init,其中的8位16位数据帧、高位先行、低位先行、SPI模式、主从机选择等。

初始化函数第一个参数是SPI1,参数第二个是初始化结构体,用&把结构体的地址传递给了初始化函数,根据结构体的参数自动配置相应寄存器。

上面是结构体变量变量名SPI_InitStructture.

 结构体说明:

                     1   SPI_MODE决定当前设备是SPI的主机MASTER还是从机SLIVE

                      2 SPI_DIRECTON配置SPI裁剪引脚的功能。全双工半双工之类

                3 SPI_DATASIZE配置数据帧

                4 FRIST BIT配置高低位先行-------MSB高位先行----ISB低位先行

                5 BAUDRATE-波特率预分频器------------------2到256的分频系数分频外设时钟得时钟频率

                6 SPI_CPOL时钟极性------High/Low高低电平----CPOL=1/0

                7 SPI_CPHA时钟相位规定第一个边沿开始采样还是第二个边沿开始采样,采样=输出

                8 SPI_NSS模式,有硬件NSS和软件两种形式

                9 SPI_CRC一般填默认值7,不用过多了解

4.开关控制

调用SPI_CMD,给SPI使能。单片机中的使能通常指的是控制某个器件或模块的开关信号。触发对应器件或模块。

注,开启SPI后还要调用函数默认给SS置高电平,不选中从机

第二部分---SPI操作时序交换一个字节的流程

调用交换字节的函数,硬件的SPI外设就会自动控制SCK,MOSI,MISO这三个引脚生成时序。

1.等待TXE为1发送寄存器为空

调用函数

注意后面加daly函数,图片没加

2.软件写入数据至SPI_DR

3.只需等待RXNE出现即可,RXNE为1了,进入第四步

4.读取DR,从RDR中读出交换接收数据,并返回

注意:TXE 和RXNE这两者并不需要我们手动清除硬件会自动清除。

至此硬件SPI读写完成

  • 37
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_56858860

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值