打印
[STM32F1]

DAC写入数据时,时间有点长,秒级

[复制链接]
132|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jerry尧|  楼主 | 2025-3-2 17:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在循环中写入DAC值时
例如,VALUE_to_WRITE = 1000;
for(int i = 0; i < VALUE_to_WRITE; i++)
{
HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_L, value);
HAL_DELAY(4); // 不少于这个时间
}
这个值的确被写入了。但是得5-10秒的时间才能写入成功。
目测是存在问题。但不知道是哪里的问题

使用特权

评论回复
沙发
公羊子丹| | 2025-3-3 07:44 | 只看该作者
你在循环里用了HAL_Delay(4),如果是1000次循环,那总共就至少要4秒,这可能是主要的时间消耗点。

使用特权

评论回复
板凳
周半梅| | 2025-3-3 07:48 | 只看该作者
STM32F1的DAC可以用DMA或者定时器触发,你可以试试用TIM6触发DAC更新,这样不用手动延时,效率会高很多。

使用特权

评论回复
地板
帛灿灿| | 2025-3-3 07:49 | 只看该作者
HAL_DAC_SetValue()只是写寄存器,不应该这么慢,会不会是其他地方导致的阻塞,比如中断或者任务调度?

使用特权

评论回复
5
童雨竹| | 2025-3-3 07:51 | 只看该作者
你试过去掉HAL_Delay(4)看看会不会更快吗?如果去掉后输出混乱,那可能是DAC转换时间或刷新率的问题。

使用特权

评论回复
6
万图| | 2025-3-3 07:52 | 只看该作者
HAL_Delay(4)是基于SysTick的,如果有其他任务在跑,可能会影响到这个延时的精度,试试用us级别的精确延时函数?

使用特权

评论回复
7
Wordsworth| | 2025-3-3 07:54 | 只看该作者
DAC的参考电压是多少?如果是VDDA=3.3V,你写入的数据会正确映射到0~3.3V的范围吗?

使用特权

评论回复
8
Bblythe| | 2025-3-3 07:55 | 只看该作者
你试过用示波器看看实际的DAC输出波形吗?看看是不是有明显的更新延迟。

使用特权

评论回复
9
Pulitzer| | 2025-3-3 07:57 | 只看该作者
试试用HAL_DAC_Start_DMA()配合一个缓冲区,自动写入数据,这样可以连续输出,不用手动循环。

使用特权

评论回复
10
Uriah| | 2025-3-3 07:58 | 只看该作者
你的主频是多少?如果系统时钟比较低,那HAL函数的执行速度也会受到影响,可以检查一下SystemClock_Config()。

使用特权

评论回复
11
Clyde011| | 2025-3-3 08:00 | 只看该作者
你是用的哪个F1型号?有的F103 DAC性能一般,刷新率受限,试试调高时钟源看看有没有改善。

使用特权

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

本版积分规则

3

主题

4

帖子

0

粉丝