打印
[STM32F0]

STM32F051C8中不设置DAC的触发源也正常

[复制链接]
135|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
封存into|  楼主 | 2025-3-24 22:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用 STM32F051C8在STM32IDE中开发,不设置触发源LL_DAC_SetTriggerSource(DAC1, LL_DAC_CHANNEL_1, LL_DAC_TRIG_EXT_TIM15_TRGO);,竟然也能正常,代码如下。有什么说发么?
DAC_InitStruct.TriggerSource = LL_DAC_TRIG_EXT_TIM15_TRGO;DAC_InitStruct.OutputBuffer = LL_DAC_OUTPUT_BUFFER_ENABLE;LL_DAC_Init(DAC, LL_DAC_CHANNEL_1, &DAC_InitStruct);

使用特权

评论回复
沙发
xuanhuanzi| | 2025-3-25 11:02 | 只看该作者
在 STM32 的 LL 库中,LL_DAC_Init() 函数已经内部处理了触发源的设置。以下是关键点解释:

初始化结构体的作用
当你通过 DAC_InitStruct.TriggerSource = LL_DAC_TRIG_EXT_TIM15_TRGO; 设置触发源时,LL_DAC_Init() 函数会直接将这个值写入 DAC 的控制寄存器(CR)。因此,无需再额外调用 LL_DAC_SetTriggerSource()。

LL 库的设计逻辑

LL_DAC_Init() 是一个“全配置”函数,它会根据传入的结构体参数完整初始化 DAC 通道。

LL_DAC_SetTriggerSource() 是一个“单参数修改”函数,通常用于运行时动态调整触发源,无需重新初始化整个 DAC 通道。

代码正常工作的原因
你的代码通过 LL_DAC_Init() 正确配置了触发源,因此即使没有显式调用 LL_DAC_SetTriggerSource(),DAC 仍然能通过 TIM15_TRGO 触发。这说明:

触发源配置已通过初始化结构体生效。

库函数内部逻辑已正确处理寄存器写入。

潜在隐患
如果在调用 LL_DAC_Init() 之后 其他代码意外修改了触发源(例如通过寄存器直接操作),则需要用 LL_DAC_SetTriggerSource() 重新修正。但你的当前代码不存在这种场景。

使用特权

评论回复
板凳
xuanhuanzi| | 2025-3-25 11:03 | 只看该作者
你的代码是正确且高效的,直接通过 LL_DAC_Init() 设置触发源是官方推荐做法,无需冗余调用 LL_DAC_SetTriggerSource()

使用特权

评论回复
地板
Wordsworth| | 2025-3-26 08:18 | 只看该作者
STM32F0 的 DAC 相对简单,可能默认就是连续模式,触发源只在特定模式下才需要。

使用特权

评论回复
5
Bblythe| | 2025-3-26 08:20 | 只看该作者
你用的是 DMA 传输数据给 DAC 吗?有时候 DMA 传输会隐式触发 DAC 更新。

使用特权

评论回复
6
Pulitzer| | 2025-3-26 08:20 | 只看该作者
查一下参考手册,看看 DAC 的寄存器在没有设置触发源时的默认值是什么。

使用特权

评论回复
7
Uriah| | 2025-3-26 08:21 | 只看该作者
你可以试着换个触发源,比如 TIM6,看它的行为有没有变化。

使用特权

评论回复
8
Clyde011| | 2025-3-26 08:22 | 只看该作者
这可能是 HAL/LL 库的某种默认行为,不过如果能正常工作,那应该问题不大。

使用特权

评论回复
9
公羊子丹| | 2025-3-26 08:23 | 只看该作者
这确实有点奇怪,理论上 DAC 需要触发源才能正常工作,难道是默认使用了软件触发?

使用特权

评论回复
10
周半梅| | 2025-3-26 08:24 | 只看该作者
你试过 LL_DAC_SetTriggerSource(DAC1, LL_DAC_CHANNEL_1, LL_DAC_TRIG_SOFTWARE); 这个吗?看看有没有区别。

使用特权

评论回复
11
帛灿灿| | 2025-3-26 08:25 | 只看该作者
可能是 DAC 默认启动时就进入了自由运行模式,所以即使没有显式设置触发源也能正常输出。

使用特权

评论回复
12
童雨竹| | 2025-3-26 08:26 | 只看该作者
你在调试时有没有观察 DAC 输出的波形?会不会是某个默认状态让它保持输出?

使用特权

评论回复
13
万图| | 2025-3-26 08:27 | 只看该作者
试试手动清空 TriggerSource 这个参数,看会不会导致 DAC 停止工作。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

11

帖子

0

粉丝