STM32H743 DAC 上升/下降时间实验

Oscilloscope trace showing STM32H743 DAC rise and fall time of approximately 1 microsecond with output buffer enabled

此示波器轨迹是通过首先将 STM32H743ZI (Nucleo) DAC 设置为 0x00,然后无任何中间步骤将其设置为最大值 (4096) 获得的。

输出缓冲已启用。

从轨迹可以看出,上升/下降时间约为 1us。此示例没有时钟速度等信息(PlatformIO 上的 Arduino 使用标准设置)。然而,上升/下降时间似乎不是由更新速率引起的。将 GPIO 速度设置为最大不会改变该值。

这与数据手册提供的 1.7us(typ) 建立时间很匹配。

禁用输出缓冲时,结果如下:

Oscilloscope trace showing STM32H743 DAC rise and fall time with output buffer disabled showing slower transition

另一方面,当使用同一引脚作为 GPIO - 使用完全相同的测量设置(直接连接到 BNC,1M 测量阻抗)时,上升/下降时间几乎为零。

代码示例

stm32h743_dac_init.cpp
// Function to initialize the DAC
void MX_DAC_Init(void)
{
    DAC_ChannelConfTypeDef sConfig = {0};

    // Initialize DAC
    hdac.Instance = DAC1;
    if (HAL_DAC_Init(&hdac) != HAL_OK)
    {
        // Initialization Error
        __BKPT();
    }

    // Configure DAC channel
    sConfig.DAC_Trigger = DAC_TRIGGER_NONE;  // No trigger, free-running mode
    sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;

    if (HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_1) != HAL_OK)
    {
        // Channel configuration Error
        __BKPT();
    }

    // Enable DAC Channel and start the conversion
    if (HAL_DAC_Start(&hdac, DAC_CHANNEL_1) != HAL_OK)
    {
        // Starting Error
        __BKPT();
    }
}

DAC 值使用以下代码设置

stm32h743_dac_set_value.cpp
if (HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 4095) != HAL_OK) {
    // Setting DAC value Error
    __BKPT();
}

Check out similar posts by category: C/C++, STM32