2178|11

6968

帖子

11

TA的资源

版主

楼主
 

【ST NUCLEO-U5A5ZJ-Q开发板测评】PWM+PGDMA实现PWM不同频率输出 [复制链接]

 

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波形交替输出,且脉冲个数也符合需求:

  附工程文件:

gpdma_test.zip (1.54 MB, 下载次数: 3)

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

此帖出自stm32/stm8论坛

最新回复

赞   详情 回复 发表于 2024-2-25 14:47
点赞 关注
 

回复
举报

6968

帖子

11

TA的资源

版主

沙发
 

@okhxyyo 已经完成管管大大的交给的任务,希望给他有用@bigbat

此帖出自stm32/stm8论坛
 
 

回复

6457

帖子

10

TA的资源

版主

板凳
 

GPDMA还是PGDMA?就是DMA功能吧  

此帖出自stm32/stm8论坛

点评

GPDMA现在称为通用DMA,LPDMA是低电压供电的DMA,设备中带L的都是可以在省电模式下使用的  详情 回复 发表于 2024-2-6 10:07
 
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 

回复

6968

帖子

11

TA的资源

版主

4
 

  我再看了一下,他的命名还是GPDMA。

引用ST的解释是:GPDMA是一个系统外围设备,并且是AHB总线上的一个双端口主服务器。它用于通过链表在外设和/或内存之间传输数据。所有的GPDMA可编程传输在系统级别上提供了更高的性能,并卸载执行这些数据传输任务的CPU。

当然也是DMA的意思 。

此帖出自stm32/stm8论坛

点评

赞  详情 回复 发表于 2024-2-25 14:47
 
 
 

回复

2934

帖子

4

TA的资源

五彩晶圆(中级)

5
 
秦天qintian0303 发表于 2024-2-6 09:00 GPDMA还是PGDMA?就是DMA功能吧  

GPDMA现在称为通用DMA,LPDMA是低电压供电的DMA,设备中带L的都是可以在省电模式下使用的

此帖出自stm32/stm8论坛
 
 
 

回复

2934

帖子

4

TA的资源

五彩晶圆(中级)

6
 

我做了一晚上的实验,你的.IOC文件可以输出代码,我只要修改一下通道就不可以了,请教一下

linked list模式和Standard Request模式有什么区别。只要选择Standard Request模式就不会生成代码,按理说标准模式应该没有错误啊。

 

此帖出自stm32/stm8论坛

点评

他需要配置这个链表才能正常使用吧,我也是照抄,没有去深入。  详情 回复 发表于 2024-2-6 10:59
 
 
 

回复

2934

帖子

4

TA的资源

五彩晶圆(中级)

7
 

我已经搞清楚了linked list模式和Standard Request模式的区别了,可以参考下面的链接文章

如何配置GPDMA

此帖出自stm32/stm8论坛

点评

我前面在用599时拆腾了好久,调试了一晚上才找到问题。  详情 回复 发表于 2024-2-6 10:58
 
 
 

回复

6968

帖子

11

TA的资源

版主

8
 
bigbat 发表于 2024-2-6 10:50 我已经搞清楚了linked list模式和Standard Request模式的区别了,可以参考下面的链接文章 如何配置GPDMA ...

我前面在用599时拆腾了好久,调试了一晚上才找到问题。

此帖出自stm32/stm8论坛
 
 
 

回复

6968

帖子

11

TA的资源

版主

9
 
bigbat 发表于 2024-2-6 10:13 我做了一晚上的实验,你的.IOC文件可以输出代码,我只要修改一下通道就不可以了,请教一下 linked list ...

他需要配置这个链表才能正常使用吧,我也是照抄,没有去深入。

此帖出自stm32/stm8论坛
 
 
 

回复

41

帖子

0

TA的资源

一粒金砂(中级)

10
 

非常感谢分享

此帖出自stm32/stm8论坛

点评

感谢大佬的关注,论坛有很多的新开发板的试用机会,多来参与一下,期待您的作品。。。  详情 回复 发表于 2024-2-24 20:34
 
 
 

回复

6968

帖子

11

TA的资源

版主

11
 

感谢大佬的关注,论坛有很多的新开发板的试用机会,多来参与一下,期待您的作品。。。

此帖出自stm32/stm8论坛
 
 
 

回复

2640

帖子

6

TA的资源

五彩晶圆(初级)

12
 
lugl4313820 发表于 2024-2-6 09:05   我再看了一下,他的命名还是GPDMA。 引用ST的解释是:GPDMA是一个系统外围设备,并且是AHB总线上 ...

此帖出自stm32/stm8论坛
 
个人签名

希望做一些大家觉得好用的东西!

 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表