注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
lugl4313820的个人空间 https://home.eeworld.com.cn/space-uid-1269709.html [收藏] [复制] [分享] [RSS]
日志

【ST NUCLEO-U5A5ZJ-Q开发板测评】PWM+PGDMA实现PWM不同频率输出

已有 253 次阅读2024-2-5 19:50

STM32Cube配置STM32U5Axxx芯片不生成GPDMA1初始化代码 - stm32/stm8 - 电子工程世界-论坛 (eeworld.com.cn)

应管管大大的吩咐,特地用PWM+GPDMA来实现PWM波形的输出。

【实验环境】

STM32CubeIDE1.14.0

【实现步骤】

1、用STM32CubeIDE新建基于NUCLEO-U5A5ZJ-Q开发板的工程。

2、打开TIM1+CH1通道来实现PWM输出:

   

2、配置GPDMA,需要选择12通道以上,要不然会出现断言错误。

  3、配置PWM1输出参数,使用两个频率分别对应TIM寄存器组的值如下:ARR/ RCR/ CCR1

定义两个数组:

uint32_t pulse1[3] = {1000, 2, 500} ;

uint32_t pulse2[3] = {5000, 1, 2500} ;

即输出2个pulse1的脉冲后,再输出1个pulse2脉冲,这样交替输出。

4、配置GPDMA,使用GPDMA 通道12的 linked list模式,并配置为循环模式:

  5、Linked List 配置中,创建一个list queue,并添加两个list node,选择GPDMA来执行 此list queue,同样配置为循环模式,指定循环起始节点为TN1,如下图。

  6、Linked List 节点配置中,使用TIM1 update事件来产生DMA请求,指定DMA目的地 址为TIMx_DMAR寄存器,源地址为pulse1数组地址。TN2只需将pulse1修改为pulse2 即可。

 

 

7、在CubeMX生成代码后,添加以下代码,将TIM与DMA通道绑定,并配置 TIMx_DCR寄存器:

  MX_TQ1_Config();

  if (HAL_DMAEx_List_LinkQ(&handle_GPDMA1_Channel12, &TQ1) != HAL_OK)
   {
     Error_Handler();
   }

   __HAL_LINKDMA(&htim1, hdma[TIM_DMA_ID_CC1], handle_GPDMA1_Channel12);
   __HAL_TIM_ENABLE_DMA(&htim1, TIM_DMA_UPDATE);
   HAL_DMAEx_List_Start_IT(&handle_GPDMA1_Channel12);

   // update事件触发 DMA burst
    // 3个DMA transfer,分别修改ARR/ RCR/ CCR1寄存器
    // TIM寄存器作为基地址的索引,ARR寄存器索引为11
    htim1.Instance->DCR = (1<<16) | ((3-1)<<8) | (11<<0);
    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);

测试结果如下图,可以看到两个频率的PWM波形交替输出,且脉冲个数也符合需求:

  附工程文件:

搜索的教程为:TIM DMA burst 输出变频 PWM 波形 (stmicroelectronics.cn)

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章