stm32-spi-dma

上传人:wt****50 文档编号:37625859 上传时间:2018-04-20 格式:PDF 页数:7 大小:412.92KB
返回 下载 相关 举报
stm32-spi-dma_第1页
第1页 / 共7页
stm32-spi-dma_第2页
第2页 / 共7页
stm32-spi-dma_第3页
第3页 / 共7页
stm32-spi-dma_第4页
第4页 / 共7页
stm32-spi-dma_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《stm32-spi-dma》由会员分享,可在线阅读,更多相关《stm32-spi-dma(7页珍藏版)》请在金锄头文库上搜索。

1、STM32-SPI-DMA 一、一、SPI 信号线说明信号线说明 通常 SPI 通过 4 个引脚与外部器件相连: MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接 收数据。 MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接 收数据。 SCK:串口时钟,作为主设备的输出,从设备的输入 NSS:从设备选择。这是一个可选的引脚,用来选择主/从设备。它的功能是用来作 为“片选引脚”,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。 二、原理二、原理 MOSI 脚相互连接,MISO 脚相互连接。这样,数据在主和从之间串行地传输(MSB 位

2、在前)。 通信总是由主设备发起。 主设备通过 MOSI 脚把数据发送给从设备, 从设备通过 MISO 引脚回传数据。 这意味全双工通信的数据输出和数据输入是用同一个时钟信号同步的; 时钟 信号由主设备通过 SCK 脚提供。 三、三、NSS 说明与注意点说明与注意点 NSS 分为内部引脚和外部引脚。 NSS 外部引脚可以作为输入信号或者输出信号,输入信号一般用作硬件方式从机的片 选,而输出信号一般用于主 SPI 去片选与之相连的从 SPI。 NSS 从设备选择有两种模式: 1、软件模式 可以通过设置 SPI_CR1 寄存器的 SSM 位来使能这种模式,当它为 1 时,NSS 引脚 上的电平由 S

3、SI 决定。在这种模式下 NSS 外部引脚可以用作它用,而内部 NSS 信号电平 可以通过写 SPI_CR1 的 SSI 位来驱动。 2、硬件模式 两种方式: (1)对于主 SPI,NSS 可以直接接高电平,对于从 SPI,可以直接接低电平。 (2) 当 STM32F10xxx 工作为主 SPI, 并且 NSS 输出已经通过 SPI_CR2 寄存器的 SSOE 位使能, 这时主机的 NSS 讲作为输出信号, 引脚信号被拉低, 所有 NSS 引脚与这个主 SPI 的 NSS 引脚相连并配置为硬件 NSS 的 SPI 设备,将自动变成从 SPI 设备。 此时两个的 NSS 信号线可以接个上拉电阻直

4、连。 四、四、DMA 说明说明 DMA 是 AMBA 的先进高性能总线(AHB)上的设备,它有 2 个 AHB 端口:一个是从端 口,用于配置 DMA,另一个是主端口,使得 DMA 可以在不同的从设备之间传输数据。 DMA 的作用是在没有 Cortex-M3 核心的干预下,在后台完成数据传输。在传输数据的 过程中,主处理器可以执行其它任务,只有在整个数据块传输结束后,需要处理这些数据时 才会中断主处理器的操作。 它可以在对系统性能产生较小影响的情况下, 实现大量数据的传 输。 五、五、SPI_DMA 的通信过程的通信过程 设置外设地址 设置存储器地址 设置传输数据量 设置通道的配置信息 使能

5、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 : Non

6、e * 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

7、_InitStructure.DMA_MemoryBaseAddr = (uint32_t)SPI1_RX_Buff; /设置 SRAM 存储地址(目的地址) DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; /传输方向 外设-内存 DMA_InitStructure.DMA_BufferSize = SPI1_ReciveBufferSize; /设置 SPI1 发送长度 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DM

8、A_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; DMA_InitStructure.DMA_M2M

9、= DMA_M2M_Disable; DMA_Init(DMA1_Channel2, DMA_ITConfig(DMA1_Channel2, DMA_IT_TC, ENABLE); /* Enable SPI1 DMA RX request */ SPI1-CR2 |= 1CR2 |= 1CPAR = SPI1_DR_Addr; /外设地址 DMA1_Channel3-CMAR = (u32) buff; /mem 地址 DMA1_Channel3-CNDTR = len ; /传输长度 DMA1_Channel3-CCR = (0 CCR /外设地址 DMA1_Channel2-CMAR =

10、 (uint32_t)buff; /mem 地址 DMA1_Channel2-CNDTR = len ; /传输长度 DMA1_Channel2-CCR = (0 14) | / 非存储器到存储器模式 (2 12) | / 通道优先级高 (0 11) | / 存储器数据宽度 8bit (0 10) | / 存储器数据宽度 8bit (0 9) | / 外设数据宽度 8bit (0 8) | / 外设数据宽度 8bit (1 7) | / 存储器地址增量模式 (0 6) | / 外设地址增量模式(不增) (0 5) | / 非循环模式 (0 4) | / 传输方向 外设-内存 (0 3) | / 允许传输错误中断 (0 2) | / 允许半传输中断 (1 1) | / 允许传输完成中断 (1); / 通道开启

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑机械

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号