咚了个咚 发表于 2025-5-27 10:00

启用STM32F407的 DAC

使用 Stm32CubeIDE 和STM32F407 开发 touchGFX(在 800x480 的 LCD 上正常工作)。使用 DAC 通道(通道1-2)。无法启用 DMA 。通过设置为 Digital Output 来测试通道1 (PA4) 引脚,引脚正常。但是当我将此引脚设置为 DAC Out 模式时,引脚就像悬空一样。我怀疑某些配置强制了 Pin 状态,而 没有按照*.ioc 文件配置 DAC。哪些寄存器影响 DAC的 输出呢?

公羊子丹 发表于 2025-5-28 07:27

我之前也遇到过类似问题,后来发现是没有调用 HAL_DAC_Start(),确认你这步做了吗?

周半梅 发表于 2025-5-28 07:28

TouchGFX 有时候会重配置 GPIO 或者占用 DMA 通道,建议你检查一下 DMA 的分配情况,看是不是被别的模块占用了。

帛灿灿 发表于 2025-5-28 07:29

你有没有在 SystemClock 配置里启用 DAC 的时钟?__HAL_RCC_DAC_CLK_ENABLE() 这一句也很关键。

童雨竹 发表于 2025-5-28 07:30

PA4 设置为 DAC OUT1 的时候,不能再用作 GPIO,确认 IOC 文件里已经取消了对 PA4 的其他用途绑定吗?

万图 发表于 2025-5-28 07:31

看你说引脚像悬空一样,建议你用示波器量一下 PA4,看是始终 0V 还是高阻状态,可能是输出没有 enable。

Wordsworth 发表于 2025-5-28 07:31

检查一下 DAC_CR 寄存器的 EN1 和 TEN1 位是否设置了,尤其是 EN1,没开 DAC 当然没输出。

Bblythe 发表于 2025-5-28 07:32

TouchGFX 在启动时会初始化 LTDC 和 DMA2D,确保这些设置没影响到你 DAC 所用的 DMA 通道,比如 DMA1_Stream5 这些。

Pulitzer 发表于 2025-5-28 07:33

如果你用 DMA 给 DAC 输数据,记得用 HAL_DAC_Start_DMA(),而不是普通的 Start,不然不会自动更新输出值。

Uriah 发表于 2025-5-28 07:34

你在调试模式下试过直接写 DAC_DHR12R1 寄存器吗?比如给它写个 0x7FF 看看引脚有没有 1.65V 输出。

Clyde011 发表于 2025-5-28 07:35

*.ioc 的确不一定是最终配置,CubeMX 生成的代码可能被你代码中的初始化顺序覆盖,建议看下 MX_DAC_Init() 是否被正常调用。

t60yz 发表于 2025-5-31 23:40

DAC输出引脚为模拟功能,不用配置复用功能寄存器(AFR),设置为模拟即可。
页: [1]
查看完整版本: 启用STM32F407的 DAC