STM32 SPI DMA 的使用

本文主要介绍了STM32中SPI总线的特点,包括MISO、MOSI、SCK和NSS引脚的功能,并详细阐述了SPI DMA的工作原理。DMA作为AHB上的设备,可在主处理器不干预的情况下进行数据传输,提高效率。通过设置外设和存储器地址、传输数据量及通道配置,启动DMA传输,实现SPI的全双工通信。文章还提供了相关代码示例,涉及SPI1的SPI_DMA配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STM32 SPI DMA 的使用

 一是想总结一下SPI总线的特点与注意点,二是总结一下SPI DMA的使用

一、SPI信号线说明

  通常SPI通过4个引脚与外部器件相连:

  • MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。
  • MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。
  • SCK:串口时钟,作为主设备的输出,从设备的输入
  • NSS:从设备选择。这是一个可选的引脚,用来选择主/从设备。它的功能是用来作为“片选引脚”,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。

二、原理

  MOSI脚相互连接,MISO脚相互连接。这样,数据在主和从之间串行地传输(MSB位在前)。

  通信总是由主设备发起。主设备通过MOSI脚把数据发送给从设备,从设备通过MISO引脚回传数据。这意味全双工通信的数据输出和数据输入是用同一个时钟信号同步的;时钟信号由主设备通过SCK脚提供。

DMA说明

DMA是AMBA的先进高性能总线(AHB)上的设备,它有2个AHB端口:

一个是从端口,用于配置DMA,另一个是主端口,使得DMA可以在不同的从设备之间传输数据。

DMA的作用是在没有Cortex-M3核心的干预下,在后台完成数据传输。在传输数据的过程中,

主处理器可以执行其它任务,只有在整个数据块传输结束后,需要处理这些数据时才会中断主处理器的操作。

它可以在对系统性能产生较小影响的情况下,实现大量数据的传输。

SPI_DMA的通信过程

  • 设置外设地址
  • 设置存储器地址
  • 设置传输数据量
  • 设置通道的配置信息
  • 使能DMA通道,启动传输 
  •  发送时,在每次TXE被设置为’1’时发出DMA请求,DMA控制器则写数据至SPI_DR寄存器,TXE标志因此而被清除。
  •  接收时,在每次RXNE被设置为’1’时发出DMA请求,DMA控制器则从SPI_DR寄存器读出数据,RXNE标志因此而被清除。

 

相关代码  这里使用的是SPI1 SPI_DMA配置

/*******************************************************************************
* Function Name  : SPI1_DMA_Configuration
* Description    : 配置SPI1_RX的DMA通道2,SPI1_TX的DMA通道3
* Input          : None
* Output         : None
* Return         : None
* Attention             : 
*******************************************************************************/
void SPI1_DMA_Configuration( void )
{
  DMA_InitTypeDef DMA_InitStructure;
    
    /* DMA1 Channel2 (triggered by SPI1 Rx event) Config */
  DMA_DeInit(DMA1_Channel2);  
  DMA_InitStructure.DMA_PeripheralBaseAddr = SPI1_DR_Addr;                          //设置 SPI1 发送外设(0x4001300C) 地址(目的地址)
  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)SPI1_RX_Buff;                    //设置 SRAM 存储地址(目的地址)
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSR
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值