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
    +关注

    关注

    2265

    文章

    10870

    浏览量

    354706
  • 控制
    +关注

    关注

    4

    文章

    1010

    浏览量

    122615
  • 定时器
    +关注

    关注

    23

    文章

    3237

    浏览量

    114435
收藏 人收藏

    评论

    相关推荐

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

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

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

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

    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 152次下载

    基于定时器的电子钟源代码

    基于定时器的电子钟(汇编语言)源代码分享
    发表于 05-20 16:29 11次下载

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

    有人使用STM32的定时器事件触发DMA,让其将内存数据传输到通信外设的数据寄存进行发送,发现DMA根本就不动作。
    的头像 发表于 11-25 09:21 2.1w次阅读
    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.2w次阅读
    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 4434次阅读
    测试<b class='flag-5'>代码</b>中使用<b class='flag-5'>DMA</b><b class='flag-5'>传输</b>,<b class='flag-5'>定时器</b>触发ADC

    STM32CUBEMX配置教程(十三)STM32的定时器触发的固定频率DAC输出(使用DMA

    STM32CUBEMX配置教程(十三)STM32的定时器触发的固定频率DAC输出(使用DMA
    发表于 11-24 14:06 46次下载
    STM32CUBEMX配置教程(十三)STM32的<b class='flag-5'>定时器</b>触发的固定频率DAC输出(使用<b class='flag-5'>DMA</b>)

    STM32F103定时器触发ADC+DMA传输

    STM32F103定时器触发ADC+DMA传输ADC除了软件触发方式之外还有外部触发模式,我用TIM2定时器触发ADC,并用DMA
    发表于 11-30 10:36 55次下载
    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 68次下载
    stm32 <b class='flag-5'>定时器</b>触发ADC多通道采样+<b class='flag-5'>DMA</b>提取数据

    定时器DMA Burst传输无法实现

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

    运用 DMA 功能实现高级定时器和 ADC 的同步触发采样

    运用DMA功能实现高级定时器和ADC的同步触发采样在做BLDC电机控制时,需要ADC的采样时刻和定时器产生的PWM波形相配合,才能获取准确的采样值,本文介绍了CW32F030系列芯片通过运用D
    发表于 06-06 13:35 31次下载