你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
erthgfhfghgf 提问时间:2020-4-21 13:37 /
  1. u8 ad_long[500];
  2. u8 cd_long[400];
  3.   while (1)
  4.   {
  5.           HAL_UART_Transmit(&huart1,(uint8_t *)"DMA_ON",6,100);
  6.           HAL_SPI_Receive_DMA(&hspi1, ad_long, 400);

  7.           HAL_UART_Transmit(&huart1,(uint8_t *)"DMA_OK",6,100);
  8.           
  9.           HAL_Delay(300);

  10.   }
复制代码

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

  8.   /* USER CODE END DMA1_Channel2_IRQn 1 */
  9. }

  10. /**
  11.   * @brief This function handles DMA1 channel3 global interrupt.
  12.   */
  13. void DMA1_Channel3_IRQHandler(void)
  14. {
  15.   /* USER CODE BEGIN DMA1_Channel3_IRQn 0 */
  16.         HAL_UART_Transmit(&huart1,(uint8_t *)"IRQ_TX",6,100);
  17.   /* USER CODE END DMA1_Channel3_IRQn 0 */
  18.   HAL_DMA_IRQHandler(&hdma_spi1_tx);
  19.   /* USER CODE BEGIN DMA1_Channel3_IRQn 1 */

  20.   /* USER CODE END DMA1_Channel3_IRQn 1 */
  21. }
复制代码


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

举报

1个回答
butterflyspring 回答时间:2020-5-12 14:55:02
HAL_SPI_Receive_DMA()这个函数没记错的话应该是发送一段数据为了主接收,产生CLOCK读取数据。至于发送的数据看你代码里填充的什么数据。 DMA要看你使能了哪个中断,调试时看一下使能了哪个DMA中断。打开了相应的中断使能才会进入的。

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版