You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DAC DMA输出信号异常求助:自动设置传输长度方案咨询

解决DAC DMA传输长度手动配置导致的信号异常问题

问题根源

你手动把HAL_DAC_Start_DMA的长度参数写死为89,但实际拼接后的样本总数是64(firstHalf)+50(hold_samples)+71(secondHalf)=185,DMA只传输了前89个样本,自然会出现信号截断、不连续的情况;长数组场景下手动计算长度更容易出错,导致输出不符预期。

解决方案:复用已计算的totalSize变量

你代码里已经通过sizeof准确计算了总样本数totalSize,直接用这个变量代替手动输入的89即可,让DMA自动传输所有拼接后的样本:

修改后的关键代码:

HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t*)value, totalSize, DAC_ALIGN_12B_R);
HAL_TIM_Base_Start(&htim4);

额外注意事项

  • 确保value数组容量足够:value的静态分配大小必须≥totalSize,否则会出现数组越界,导致程序崩溃或输出异常。比如可以这样定义:
    uint16_t value[200]; // 200 ≥ 185,留有余量方便后续调整参数
    
  • 检查DMA传输模式:如果需要持续循环输出信号,要在DMA初始化时开启循环模式(Circular Mode)(可通过CubeMX配置,或手动修改DMA句柄的Mode为DMA_CIRCULAR),否则DMA传输完一次就会停止,信号也会中断。
  • 验证TIM时钟配置:TIM4的定时频率决定了DAC的采样率,确保时钟配置符合你的信号输出需求,避免因采样率不匹配导致波形失真。

内容的提问来源于stack exchange,提问作者Meria Rajagukguk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 20:53:10