• 349查看
  • 0回复

[芯片硬件] STM32U5系列TIMER+DMA+DAC应用演示

[复制链接]


该用户从未签到

发表于 27-4-2024 09:39:38 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


有人使用STM32U575芯片的DAC功能。他希望使用TIMER事件触发DMA,并通过DMA传输内存数据到DAC输出寄存器,进而产生相应的DAC输出波形。可他不知如何配置DMA并实现期望的DAC输出,在ST公司提供的HAL库里也没有找到相关例程可以参考。

STM32U5系列TIMER+DMA+DAC应用演示w2.jpg

我这里简单演示一下实现过程,分享出来给有需要的人参考。

我使用TIM3的更新事件触发DMA,每触发一次搬运一个数据到DAC数据寄存器。一共准备了200个数据,在定时器的触发下令DMA循环搬运,让DAC输出一系列正弦波。我使用的开发板是STM32U575 Nucleo板。通过CubeMx进行图形化配置,并基于STM32HAL库组织代码。

先看TIM3的配置,主要是要用它的更新事件,PWM输出不是必需的。

STM32U5系列TIMER+DMA+DAC应用演示w3.jpg

下面是DAC1的基本配置。用到其通道1的对外输出,其它功能根据需要自行调整。

STM32U5系列TIMER+DMA+DAC应用演示w4.jpg

基于TIM3的更新事件作为DMA请求触发源进行相关配置。DMA使用标准请求模式。源端是内存数据【数据定义为无符号32位】,目的端为DAC数据保持寄存器【访问宽度为32位】。DMA配置成Circular循环传输模式。见下面的DMA配置截图【使用GPDMA Channel 8】:

STM32U5系列TIMER+DMA+DAC应用演示w5.jpg

STM32U5系列TIMER+DMA+DAC应用演示w6.jpg

配置完成后,创建初始化工程。添加如下必要的用户代码。主要是准备内存数据;开启DAC工作;调用DMA启动函数;使能TIM3更新事件的DMA触发功能;启动TIM3定时器。我把本人所用代码悉数贴出来,以供参考。至于通过CubeMx生成的初始化代码就没必要在这里贴出来了。

STM32U5系列TIMER+DMA+DAC应用演示w7.jpg

验证输出结果。【下面截图中的蓝色部分是TIMER的PWM输出,没展开。】

STM32U5系列TIMER+DMA+DAC应用演示w8.jpg

整体上,要实现上述功能,首先DMA配置要正确;其次就是组织代码时要适当做些灵活调整;再就是那个DMA启动函数里的数据个数要按源端的数据宽度和传输数据个数换算成总的字节数,即一轮DMA传输的数据字节数。比方这里,源端数据宽度为字【即4字节宽度】,最后设置总的传输个数时是数据个数乘以4。关于这点在本公众号之前的其它文章里也特意讨论过。

上面演示的DMA应用,使用的是标准请求模式,如果使用链表模式也是可以的。有兴趣的话可以自行验证测试。关于DMA链表模式的配置,在本公众号的其它文章里也有介绍,记得也是基于STM32U5系列的。

OK,今天的分享演示就介绍到这里,供君参考。有问题的话可以后台留言。下次再聊,祝好~!



该用户从未签到

发表于 12-3-2025 02:03:00 | 显示全部楼层
针对STM32U5系列TIMER+DMA+DAC的应用,关于使用STM32U575芯片的DAC功能实现特定配置的问题,以下是一个简单的演示过程:

首先,配置TIM3定时器,使其更新事件能够触发DMA。然后,设置DMA以在每次TIM3更新事件触发时搬运一个数据到DAC数据寄存器。为确保连续输出,可以预先准备200个数据并存储在数组中。配置DMA为循环模式,以便在数据传输结束时回到起点继续传输。这样,DAC会输出一系列数据,形成特定的波形,如正弦波。

关于具体实现细节和代码示例,建议查阅STM32U5系列官方文档及HAL库参考资料。如果库中无直接相关例程,可以基于官方文档自行开发或寻求开源社区的帮助。实际操作中还需注意各模块间的同步问题,确保数据传输的准确性和实时性。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 12-3-2025 02:03:00 | 显示全部楼层
针对STM32U5系列TIMER+DMA+DAC的应用,关于使用STM32U575芯片的DAC功能,配置DMA实现特定DAC输出的问题,以下是一个简要的实现过程:

1. 配置TIM3定时器,利用其更新事件作为DMA的触发源。
2. 初始化DMA,设置其数据传输方向及目标地址(DAC数据寄存器)。
3. 配置DAC,开启相关通道,并将输出模式设置为受DMA控制。
4. 准备一组数据(如正弦波样本数据),存于数组或内存中。
5. 启动定时器和DMA,在定时器的更新事件驱动下,DMA将内存中的数据搬运至DAC数据寄存器。
6. DAC根据接收到的数据输出对应的波形。

这个过程在ST公司的HAL库中可能无直接例程参考,需依据STM32U5系列参考手册和HAL库函数进行开发。建议查阅相关手册,深入理解TIM、DMA及DAC的工作机制,然后根据实际需求进行配置。此过程涉及多个模块的配置和协同工作,确保每个环节正确配置至关重要。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报

快速发帖

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

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 19-8-2025 05:48 , Processed in 0.354889 second(s), 38 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.