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

[复制链接]
1221|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()只是写寄存器,不应该这么慢,会不会是其他地方导致的阻塞,比如中断或者任务调度?
童雨竹 发表于 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_DelayHAL_DAC_SetValue的执行

西洲 发表于 2025-3-22 07:38 | 显示全部楼层
检查是否有其他中断占用大量 CPU 时间

风凉 发表于 2025-3-22 08:26 | 显示全部楼层
DAC 硬件模块可能存在故障或配置错误。检查 DAC 的电源和参考电压是否正常

温室雏菊 发表于 2025-3-22 09:37 | 显示全部楼层
使用 SystemCoreClock 变量检查系统时钟频率是否正确。使用示波器或逻辑分析仪测量系统时钟信号,确认频率是否符合预期。如果时钟频率错误,检查 RCC 配置和时钟树设置

您需要登录后才可以回帖 登录 | 注册

本版积分规则

58

主题

82

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部