测试条件:
1、H750或者H743。
2、HAL库版本V1.10及其以上
调用函数:
1、使能三个中断:
[C] 纯文本查看 复制代码 /* 配置DMA发送中断 */
HAL_NVIC_SetPriority(SPIx_DMA_TX_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(SPIx_DMA_TX_IRQn);
/* 配置DMA接收中断 */
HAL_NVIC_SetPriority(SPIx_DMA_RX_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(SPIx_DMA_RX_IRQn);
/* 配置SPI中断 */
HAL_NVIC_SetPriority(SPIx_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(SPIx_IRQn);
2、全部配置完毕后
从机SPI只要调用函数HAL_SPI_TransmitReceive_DMA,此时主机还没有发起操作,从机就会立即进入一次DMA发送中断,看中断标志是TC发送完成了。进一步测试发现,这个完全不影响后续的SPI DMA全双工。
由于这个诡异的现象,源码里面发送DMA不注册回调就非常好理解了(除了错误回调)。这个要是注册了,就会出现主机还没有发起操作就来了一个DMA发送完成中断。
|