jerry尧 发表于 2025-3-2 17:19

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

在循环中写入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()只是写寄存器,不应该这么慢,会不会是其他地方导致的阻塞,比如中断或者任务调度?

童雨竹 发表于 2025-3-3 07:51

你试过去掉HAL_Delay(4)看看会不会更快吗?如果去掉后输出混乱,那可能是DAC转换时间或刷新率的问题。

万图 发表于 2025-3-3 07:52

HAL_Delay(4)是基于SysTick的,如果有其他任务在跑,可能会影响到这个延时的精度,试试用us级别的精确延时函数?

Wordsworth 发表于 2025-3-3 07:54

DAC的参考电压是多少?如果是VDDA=3.3V,你写入的数据会正确映射到0~3.3V的范围吗?

Bblythe 发表于 2025-3-3 07:55

你试过用示波器看看实际的DAC输出波形吗?看看是不是有明显的更新延迟。

Pulitzer 发表于 2025-3-3 07:57

试试用HAL_DAC_Start_DMA()配合一个缓冲区,自动写入数据,这样可以连续输出,不用手动循环。

Uriah 发表于 2025-3-3 07:58

你的主频是多少?如果系统时钟比较低,那HAL函数的执行速度也会受到影响,可以检查一下SystemClock_Config()。

Clyde011 发表于 2025-3-3 08:00

你是用的哪个F1型号?有的F103 DAC性能一般,刷新率受限,试试调高时钟源看看有没有改善。

白马过平川 发表于 2025-3-22 01:23

在 STM32F1 单片机中,使用 HAL_DAC_SetValue 函数写入 DAC 值并配合 HAL_Delay 延时,理论上应该可以正常工作。但您提到写入需要 5-10 秒的时间,这显然是不正常的

失物招領 发表于 2025-3-22 02:34

HAL_Delay(4) 表示延时4毫秒,循环1000次的总延时为4秒

她已醉 发表于 2025-3-22 03:26

如果实际延时超过4秒,可能是系统时钟配置错误,导致HAL_Delay函数不准确

将爱藏于深海 发表于 2025-3-22 04:34

HAL_DAC_SetValue 函数本身执行速度较慢,可能是由于HAL库的实现效率问题

春日负喧 发表于 2025-3-22 05:21

DAC的硬件写入速度可能受到时钟频率或总线速度的限制

捧一束彼岸花 发表于 2025-3-22 06:23

如果系统中有高优先级中断频繁触发,可能会影响HAL_Delay和HAL_DAC_SetValue的执行

西洲 发表于 2025-3-22 07:38

检查是否有其他中断占用大量 CPU 时间

风凉 发表于 2025-3-22 08:26

DAC 硬件模块可能存在故障或配置错误。检查 DAC 的电源和参考电压是否正常

温室雏菊 发表于 2025-3-22 09:37

使用 SystemCoreClock 变量检查系统时钟频率是否正确。使用示波器或逻辑分析仪测量系统时钟信号,确认频率是否符合预期。如果时钟频率错误,检查 RCC 配置和时钟树设置
页: [1]
查看完整版本: DAC写入数据时,时间有点长,秒级