硬汉嵌入式论坛

 找回密码
 立即注册
查看: 727|回复: 1
收起左侧

[STM32H7] 定时器触发dma进行spi操作问题

[复制链接]

3

主题

22

回帖

31

积分

新手上路

积分
31
发表于 2024-12-27 11:43:44 | 显示全部楼层 |阅读模式
我使用stm32H750VB单片机,使用定时器15的ch1触发dma进行spi写,然后使用spi rx dma 来接收数据
使用normal模式,在spi dma完成中断中重新开启dma
但是发现一个问题,就是在我开启dma后,开启定时器pwm前,会触发一次spi写操作



也就是说tim15_cc1触发dma满了之后,因为pwm还在继续,所以有一个类似触发标志位的位是置位的,重新开启dma后立即触发了一次dma

而这个标志位不会因为关闭dma、重启dma而清零。

我尝试关闭tim15的UIF和CC1IF,但是并没有起作用。但是dma中也只有半满、满、错误等标志位,没有单次触发标志位

我的代码:
[C] 纯文本查看 复制代码
//tim15 dma 初始化

hdma_tim15_ch1.Instance = DMA1_Stream3;
    hdma_tim15_ch1.Init.Request = DMA_REQUEST_TIM15_CH1;
    hdma_tim15_ch1.Init.Direction = DMA_MEMORY_TO_PERIPH;
    hdma_tim15_ch1.Init.PeriphInc = DMA_PINC_DISABLE;
    hdma_tim15_ch1.Init.MemInc = DMA_MINC_DISABLE;
    hdma_tim15_ch1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
    hdma_tim15_ch1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
    hdma_tim15_ch1.Init.Mode = DMA_NORMAL;
    hdma_tim15_ch1.Init.Priority = DMA_PRIORITY_LOW;
    hdma_tim15_ch1.Init.FIFOMode = DMA_FIFOMODE_DISABLE;

//开启dma

ALIGN_32BYTES(__attribute__((section(".axi_ram"))))
  static uint16_t tx_data = 0xffff;
  HAL_DMA_Start(&hdma_tim15_ch1, (uint32_t)&tx_data, (uint32_t)&hspi4.Instance->TXDR, 4096);

  __HAL_SPI_ENABLE(&hspi4);
  SET_BIT(hspi4.Instance->CR1, SPI_CR1_CSTART);
  __HAL_TIM_ENABLE_DMA(&htim15, TIM_DMA_CC1);
  HAL_TIMEx_PWMN_Start(&htim15, TIM_CHANNEL_1);


//dma中断


  ALIGN_32BYTES(__attribute__((section(".axi_ram"))))
  static uint16_t tx_data = 0xffff;
  //HAL_TIMEx_PWMN_Stop(&htim15, TIM_CHANNEL_1);
  htim15.Instance->CR1 &= ~(TIM_CR1_CEN);
  __HAL_TIM_SET_COUNTER(&htim15, 65535);
  __HAL_TIM_CLEAR_FLAG(&htim15, TIM_FLAG_UPDATE);
  __HAL_TIM_CLEAR_FLAG(&htim15, TIM_FLAG_CC1);
  HAL_DMA_Abort(&hdma_spi4_rx);
  HAL_DMA_Abort(&hdma_tim15_ch1);

HAL_DMA_Start(&hdma_tim15_ch1, (uint32_t)&tx_data, (uint32_t)&hspi4.Instance->TXDR, 4096);
//即使不开启pwm,也会触发一次spi写操作
//HAL_TIMEx_PWMN_Start(&htim15, TIM_CHANNEL_1);


回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2024-12-27 16:12:15 | 显示全部楼层
我之前用的是TIM控制DMAMUX触发SPI DMA,没有这种问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 01:19 , Processed in 0.037914 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表