erthgfhfghgf 发表于 2020-4-21 13:37:27

SPI DMA 接收数据时会发送及异常中断的问题

u8 ad_long;
u8 cd_long;
while (1)
{
          HAL_UART_Transmit(&huart1,(uint8_t *)"DMA_ON",6,100);
          HAL_SPI_Receive_DMA(&hspi1, ad_long, 400);

          HAL_UART_Transmit(&huart1,(uint8_t *)"DMA_OK",6,100);
          
          HAL_Delay(300);

}
stm32f1xx_it.c:
void DMA1_Channel2_IRQHandler(void)
{
/* USER CODE BEGIN DMA1_Channel2_IRQn 0 */
        HAL_UART_Transmit(&huart1,(uint8_t *)"IRQ_RX",6,100);
/* USER CODE END DMA1_Channel2_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_spi1_rx);
/* USER CODE BEGIN DMA1_Channel2_IRQn 1 */

/* USER CODE END DMA1_Channel2_IRQn 1 */
}

/**
* @brief This function handles DMA1 channel3 global interrupt.
*/
void DMA1_Channel3_IRQHandler(void)
{
/* USER CODE BEGIN DMA1_Channel3_IRQn 0 */
        HAL_UART_Transmit(&huart1,(uint8_t *)"IRQ_TX",6,100);
/* USER CODE END DMA1_Channel3_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_spi1_tx);
/* USER CODE BEGIN DMA1_Channel3_IRQn 1 */

/* USER CODE END DMA1_Channel3_IRQn 1 */
}

代码如上,好像不能直接从剪贴板上传图片。。
简单描述下逻辑分析仪抓到的结果把:
HAL_SPI_Receive_DMA()开始接收后会在MOSI上发送一段0xff,理论上MOSI电平应该不变啊?
DMA接收完成后(SCK不变了),串口会先收到IRQ_TX之后才是IRQ_RX,也就是说同时进入了DMA1 的2和3通道的中断服务函数 这是为什么啊?

butterflyspring 发表于 2020-5-12 14:55:02

HAL_SPI_Receive_DMA()这个函数没记错的话应该是发送一段数据为了主接收,产生CLOCK读取数据。至于发送的数据看你代码里填充的什么数据。 DMA要看你使能了哪个中断,调试时看一下使能了哪个DMA中断。打开了相应的中断使能才会进入的。:):)
页: [1]
查看完整版本: SPI DMA 接收数据时会发送及异常中断的问题