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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版