stm32L431使用SPI+DMA

stm32L431使用SPI+DMA

1.配置SPI和DMA

1.1 使用hal库配置(stmcubmax)

img

配置可以按选择配置

  1. MOSI单线只发送数据则配置Transmit Only Master
  2. MOSI,MISO 双线配置Full-Duplex Master

1.2 配置DMA

​ 如1.1图所示我配置的是只发送数据模式!
img

DMA配置模式Normal ,地址增长Memory,数据宽度为Byte到Byte

img

DMA全局中断配置,SPI中断配置可选,如果配置spi配置了MISO线接收数据可在spi接收回调函数内处理数据

void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi);//发送数据完成回调函数
void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi);//接收数据完成回调函数

2.keil工程配置

2.1DMA初始化函数

img

DMA初始化函数,使能RCC_DMA时钟,设置DMA全局中断(cubmax内配置会自动生成)

2.2SPI初始化配置

img

SPI初始化配置,按照自己的需求配置

2.3SPI和DMA配置关联

img

void HAL_SPI_MspInit(SPI_HandleTypeDef *spiHandle) 
//函数下是cubmax生成的GPIO配置和MDA配置,如果配置了MISO线可以配置DMA_RX
__HAL_LINKDMA(&hspi2, hdmatx, hdma_spi2_tx);
//HAL库宏定义,将SPI和DMA配置关联,简单理解就是互换控制句柄,有兴趣可以看看原码

2.4DMA全局中断

img

配置中两个函数参数效果一样

3.具体使用

img

这是只发送模式下的使用,配置的读取可以参考其他博主的配置

img

发送完成后hal库配置了回调函数这里可以自己写一个,还有一个带__weak修饰的函数,先注释掉再自己写

posted @ 2024-06-03 10:46  代代代码  阅读(400)  评论(0编辑  收藏  举报