你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32U5系列TIMER+DMA+DAC应用经验分享

[复制链接]
攻城狮Melo 发布时间:2024-2-29 14:09
有人使用STM32U575芯片的DAC功能。他希望使用TIMER事件触发DMA,并通过DMA传输内存数据到DAC输出寄存器,进而产生相应的DAC输出波形。可他不知如何配置DMA并实现期望的DAC输出,在ST公司提供的HAL库里也没有找到相关例程可以参考。 微信图片_20240229140926.png 我这里简单演示一下实现过程,分享出来给有需要的人参考。我使用TIM3的更新事件触发DMA,每触发一次搬运一个数据到DAC数据寄存器。一共准备了200个数据,在定时器的触发下令DMA循环搬运,让DAC输出一系列正弦波。我使用的开发板是STM32U575 Nucleo板。通过CubeMx进行图形化配置,并基于STM32 HAL库组织代码。先看TIM3的配置,主要是要用它的更新事件,PWM输出不是必需的。 微信图片_20240229140920.png 下面是DAC1的基本配置。用到其通道1的对外输出,其它功能根据需要自行调整。 微信图片_20240229140916.png 基于TIM3的更新事件作为DMA请求触发源进行相关配置。DMA使用标准请求模式。源端是内存数据【数据定义为无符号32位】,目的端为DAC数据保持寄存器【访问宽度为32位】。DMA配置成Circular循环传输模式。 见下面的DMA配置截图【使用GPDMA Channel 8】: 微信图片_20240229140913.png 微信图片_20240229140909.png 配置完成后,创建初始化工程。添加如下必要的用户代码。主要是准备内存数据;开启DAC工作;调用DMA启动函数;使能TIM3更新事件的DMA触发功能;启动TIM3定时器。我把本人所用代码悉数贴出来,以供参考。至于通过CubeMx生成的初始化代码就没必要在这里贴出来了。 微信图片_20240229140905.png 验证输出结果。【下面截图中的蓝色部分是TIMER的PWM输出,没展开。】 微信图片_20240229140900.png 整体上,要实现上述功能,首先DMA配置要正确;其次就是组织代码时要适当做些灵活调整;再就是那个DMA启动函数里的数据个数要按源端的数据宽度和传输数据个数换算成总的字节数,即一轮DMA传输的数据字节数。比方这里,源端数据宽度为字【即4字节宽度】,最后设置总的传输个数时是数据个数乘以4。关于这点在本公众号之前的其它文章里也特意讨论过。上面演示的DMA应用,使用的是标准请求模式,如果使用链表模式也是可以的。有兴趣的话可以自行验证测试。关于DMA链表模式的配置,在本公众号的其它文章里也有介绍,记得也是基于STM32U5系列的。转载自: 茶话MCU如有侵权请联系删除
收藏 评论1 发布时间:2024-2-29 14:09

举报

1个回答
STMCU-管管 回答时间:2024-3-12 16:16:44

感谢分享

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版