STM32系列SPI通讯DMA

SPI是我们最经常使用到的通讯方式。

在使用SPI时却经常遇到问题:

1.SPI数据通讯一开始是正确的,传一会数据就错了。

2.SPI数据DMA传输错一个字节,每次都错一个字节。

3.SPI数据错几位,造成数据整体偏移。比如传0x5555,就有可能变长0xaaaa。

接下来我用我通俗易懂的方式来解决这个问题。

ARM的SPI有两种模式:硬件模式和软件模式。简单的说区别在于NSS引脚是有硬件管理还是软件管理,那这个引脚怎么能控制SPI寄存器的数据传送呢。

我们先来讨论软件模式,DMA传输:

片选一般都是低电平有效,

SPI主机软件模式时,我们需要自己配置NSS脚(这里所说的NSS脚,是任意一个普通IO即可),在准备发送数据之前拉低引脚,发送完成后拉高即可。

SPI从机软件模式时,该怎么配置片选呢,(任意一个IO)就配置成输入模式,上升沿触发中断,就可以在数据完成时进入中断处理数据,当然也可以选择DMA数据流冲段也可以。
有个经常令人忽视的点,那我原来硬件模式时从机的NSS引脚在干什么呢,配置成软件模式,缺少了引脚信号,软件中是否可以也可以不用管呢?当然不可以,从数据手册可以看到硬件模式时NSS引脚的工作是:当NSS信号为低电平时主机开始传输数据,为高电平时停止传输,如果再给入时钟信号,会传输么,当然不会,因为片选没打开;是什么影响呢,对于ARM肯定是某个寄存器的值,即SPI->CR1寄存器的SSI位。
软件模式时每次接收之前写入0,完成接收之后写入1&#

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值