0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

定时器DMA Burst传输代码

麦辣鸡腿堡 来源:茶话MCU 作者:茶话MCU 2023-06-21 16:23 次阅读

下面是参考用户代码。代码在手机模式下可左右滑动。

/* USER CODE BEGIN PD */
#define ARR1 (10000U)
#define ARR2 (20000U)
#define ARR3 (40000U)
#define Count (18)      //3 * 6


uint16_t PulseData1[]={
 ARR1,0,ARR1*0.5,
 ARR1,0,ARR1*0.5,
 ARR1,0,ARR1*0.5,
 ARR1,0,ARR1*0.5,
 ARR1,0,ARR1*0.5,//
 ARR1,0,0};




uint16_t PulseData2[]={
ARR2,0,ARR2*0.5,
ARR2,0,ARR2*0.5,
ARR2,0,ARR2*0.5,
ARR2,0,ARR2*0.5,
ARR2,0,ARR2*0.5,//
ARR2,0,0,
};


uint16_t PulseData3[]={
ARR3,0,ARR3*0.5,
ARR3,0,ARR3*0.5,
ARR3,0,ARR3*0.5,
ARR3,0,ARR3*0.5,
ARR3,0,ARR3*0.5,//5
ARR3,0,0,
};


/* USER CODE END PD */

主循环测试代码如下:

int main(void)
{
/* USER CODE BEGIN 1 */


/* USER CODE END 1 */


/* MCU Configuration--------------------------------------------------------*/


/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();


/* USER CODE BEGIN Init */


/* USER CODE END Init */


/* Configure the system clock */
  SystemClock_Config();


/* USER CODE BEGIN SysInit */


/* USER CODE END SysInit */


/* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_TIM3_Init();
/* USER CODE BEGIN 2 */
    __HAL_TIM_CLEAR_FLAG(&htim3,TIM_FLAG_UPDATE);
  TIM_CCxChannelCmd(TIM3,TIM_CHANNEL_1,TIM_CCx_ENABLE);
/* USER CODE END 2 */


/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
  {
/* USER CODE END WHILE */


/* USER CODE BEGIN 3 */
       htim3.DMABurstState = HAL_DMA_BURST_STATE_READY;
       hdma_tim3_up.State = HAL_DMA_STATE_READY ;


       __HAL_TIM_CLEAR_FLAG(&htim3,TIM_FLAG_UPDATE);


      HAL_TIM_DMABurst_MultiWriteStart(&htim3, TIM_DMABASE_ARR,TIM_DMA_UPDATE,(uint32_t *)PulseData1,\\
                                       TIM_DMABURSTLENGTH_3TRANSFERS,Count);
      TIM3- >EGR = TIM_EGR_UG;
      __HAL_TIM_ENABLE(&htim3);


      HAL_Delay(150);  //Prepared for the next 5 Pulses
      __HAL_TIM_DISABLE(&htim3);
//  HAL_DMA_Abort(&hdma_tim3_up);


      htim3.DMABurstState = HAL_DMA_BURST_STATE_READY;
      hdma_tim3_up.State = HAL_DMA_STATE_READY ;


      __HAL_TIM_CLEAR_FLAG(&htim3,TIM_FLAG_UPDATE);


       HAL_TIM_DMABurst_MultiWriteStart(&htim3, TIM_DMABASE_ARR,TIM_DMA_UPDATE,(uint32_t *)PulseData2,\\
                                        TIM_DMABURSTLENGTH_3TRANSFERS,Count);
      TIM3- >EGR = TIM_EGR_UG;
      __HAL_TIM_ENABLE(&htim3);


      HAL_Delay(150);//Prepared for the next 5 Pulses
      __HAL_TIM_DISABLE(&htim3);
//   HAL_DMA_Abort(&hdma_tim3_up);


      htim3.DMABurstState = HAL_DMA_BURST_STATE_READY;
      hdma_tim3_up.State = HAL_DMA_STATE_READY ;


       __HAL_TIM_CLEAR_FLAG(&htim3,TIM_FLAG_UPDATE);


       HAL_TIM_DMABurst_MultiWriteStart(&htim3, TIM_DMABASE_ARR,TIM_DMA_UPDATE,(uint32_t *)PulseData3,
                                        TIM_DMABURSTLENGTH_3TRANSFERS,Count);
      TIM3- >EGR = TIM_EGR_UG;
      __HAL_TIM_ENABLE(&htim3);


      HAL_Delay(150);//Prepared for the next 5 Pulses
      __HAL_TIM_DISABLE(&htim3);
//   HAL_DMA_Abort(&hdma_tim3_up);


  }
/* USER CODE END 3 */
}

编译、除错后,运行程序可以看到我所期望的结果。即我每隔一会儿就发出5个脉冲,3次为1个循环。测试代码都放在这里,供参考使用。这里不逐句解释了,具体使用时结合库代码来研究即可。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2240

    文章

    10675

    浏览量

    348947
  • 控制
    +关注

    关注

    4

    文章

    997

    浏览量

    122162
  • 定时器
    +关注

    关注

    23

    文章

    3148

    浏览量

    112168
收藏 人收藏

    评论

    相关推荐

    STM32H7做的项目,使用HAL_DMA_Start_IT,但是DMA是以最快的速度传输,并不受定时器周期控制?

    使用STM32H7做的项目,想要用定时器的溢出事件,触发DMA将GPIO的状态传输到内存上。 使用HAL_DMA_Start_IT,但是DMA
    发表于 03-11 07:23

    STM32通过DMA方式传输TIM3定时器计数值,数值重复是为什么?

    4.TIM1更新事件频率 更新事件频率由16khz改为10k/5k,或者重复计数由1改为2 结果反馈,TIM3计数数值重复 5.其他定时器计数值 DMA触发方式为TIM1更新
    发表于 04-10 06:50

    使用dma的方式来传输定时器输入捕获的数据,是不是每隔100ms会触发dma传输完成中断?

    目前使用dma的方式来传输定时器输入捕获的数据,内存数据大小为2,使用normal模式,100ms打开dma模式,请问,这种情况下,是不是每隔100ms会触发dma
    发表于 04-18 07:47

    STM32F103定时器触发ADC+DMA传输 精选资料分享

    STM32F103定时器触发ADC+DMA传输ADC除了软件触发方式之外还有外部触发模式,我用TIM2定时器触发ADC,并用DMA
    发表于 08-11 06:05

    请问如何用Cube生成定时器2触发双ADC同步采集并用DMA传输

    请问如何用Cube生成定时器2触发双ADC同步采集并用DMA传输
    发表于 02-28 10:57

    TIMx“DMA Burst Feature”如何通过SPI触发多个DMA请求?

    ,因为 SPI 外设最多支持 16 位传输。不过,我还没有看到有人使用 Timer DMA-burst 功能。我想使用计时来触发 DMA/SPI
    发表于 02-07 08:23

    STM32F030的定时器PWM使用设置与ADC的dma代码

    里面是STM32F030的定时器PWM使用设置与ADC的dma代码
    发表于 03-21 15:29 151次下载

    STM32定时器触发DMA数据传输失败的原因如何解决

    有人使用STM32的定时器事件触发DMA,让其将内存数据传输到通信外设的数据寄存器进行发送,发现DMA根本就不动作。
    的头像 发表于 11-25 09:21 2w次阅读
    STM32<b class='flag-5'>定时器</b>触发<b class='flag-5'>DMA</b>数据<b class='flag-5'>传输</b>失败的原因如何解决

    STM32定时器BURST传输介绍及示例

    这里有两个专门用于定时器BURST传输的寄存器,分别是TIM2_DCR和TIM2_DMAR. 其中TIM2_DCR就是用来配置从哪个定时器寄存器开始访问、连续访问几个寄存器的问题。
    的头像 发表于 05-14 09:15 1.1w次阅读
    STM32<b class='flag-5'>定时器</b><b class='flag-5'>BURST</b><b class='flag-5'>传输</b>介绍及示例

    测试代码中使用DMA传输定时器触发ADC

    现在共用到ADC1模块的4个ADC通道,即1个片内Vrefint通道和其它三个外部通道CH8,CH10,CH17。下面测试代码中使用DMA传输定时器触发ADC.
    的头像 发表于 08-10 16:22 4137次阅读
    测试<b class='flag-5'>代码</b>中使用<b class='flag-5'>DMA</b><b class='flag-5'>传输</b>,<b class='flag-5'>定时器</b>触发ADC

    STM32F103定时器触发ADC+DMA传输

    STM32F103定时器触发ADC+DMA传输ADC除了软件触发方式之外还有外部触发模式,我用TIM2定时器触发ADC,并用DMA
    发表于 11-30 10:36 50次下载
    STM32F103<b class='flag-5'>定时器</b>触发ADC+<b class='flag-5'>DMA</b><b class='flag-5'>传输</b>

    H743定时器触发ADC转换DMA传输之应用

    学习安富莱的H743的定时器触发ADC DMA传输源码
    发表于 11-30 11:21 11次下载
    H743<b class='flag-5'>定时器</b>触发ADC转换<b class='flag-5'>DMA</b><b class='flag-5'>传输</b>之应用

    stm32 定时器触发ADC多通道采样+DMA提取数据

    stm32g0 定时器触发ADC多通道采样+DMA提取数据stm32g0 定时器触发ADC多通道采样+DMA提取数据stm32g0 单片机对三相电流采样,用
    发表于 12-16 16:56 64次下载
    stm32 <b class='flag-5'>定时器</b>触发ADC多通道采样+<b class='flag-5'>DMA</b>提取数据

    定时器DMA Burst传输无法实现

    有人使用STM32F4系列开发产品,程序运行过程中需要不时地对外输出一串驱动脉冲,并要求这几串脉冲的频率可变、占空比固定。他想到使用基于STM32定时器DMA BURST传输。具体点
    的头像 发表于 06-21 16:21 564次阅读
    <b class='flag-5'>定时器</b><b class='flag-5'>DMA</b> <b class='flag-5'>Burst</b><b class='flag-5'>传输</b>无法实现

    使用MM32F0270 定时器DMA方式输出PWM

    使用MM32F0270 定时器DMA方式输出PWM
    的头像 发表于 10-17 14:47 536次阅读
    使用MM32F0270 <b class='flag-5'>定时器</b><b class='flag-5'>DMA</b>方式输出PWM