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

[复制链接]
 楼主| 封存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 相对简单,可能默认就是连续模式,触发源只在特定模式下才需要。
Bblythe 发表于 2025-3-26 08:20 | 显示全部楼层
你用的是 DMA 传输数据给 DAC 吗?有时候 DMA 传输会隐式触发 DAC 更新。
Pulitzer 发表于 2025-3-26 08:20 | 显示全部楼层
查一下参考手册,看看 DAC 的寄存器在没有设置触发源时的默认值是什么。
Uriah 发表于 2025-3-26 08:21 | 显示全部楼层
你可以试着换个触发源,比如 TIM6,看它的行为有没有变化。
Clyde011 发表于 2025-3-26 08:22 | 显示全部楼层
这可能是 HAL/LL 库的某种默认行为,不过如果能正常工作,那应该问题不大。
公羊子丹 发表于 2025-3-26 08:23 | 显示全部楼层
这确实有点奇怪,理论上 DAC 需要触发源才能正常工作,难道是默认使用了软件触发?
周半梅 发表于 2025-3-26 08:24 | 显示全部楼层
你试过 LL_DAC_SetTriggerSource(DAC1, LL_DAC_CHANNEL_1, LL_DAC_TRIG_SOFTWARE); 这个吗?看看有没有区别。
帛灿灿 发表于 2025-3-26 08:25 | 显示全部楼层
可能是 DAC 默认启动时就进入了自由运行模式,所以即使没有显式设置触发源也能正常输出。
童雨竹 发表于 2025-3-26 08:26 | 显示全部楼层
你在调试时有没有观察 DAC 输出的波形?会不会是某个默认状态让它保持输出?
万图 发表于 2025-3-26 08:27 | 显示全部楼层
试试手动清空 TriggerSource 这个参数,看会不会导致 DAC 停止工作。
过期的塔头 发表于 2025-3-31 23:07 | 显示全部楼层
代码中可能并没有看到显式的硬件触发源配置,但是在软件模式下,DAC 输出的更新仍然能正常工作。
丢丢手绢666 发表于 2025-3-31 23:32 | 显示全部楼层
可以在 LL_DAC_Init() 后检查 DAC 和定时器的配置,确保定时器的触发信号与 DAC 正确连接。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

111

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部