打印
[STM32F1]

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

[复制链接]
482|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性能一般,刷新率受限,试试调高时钟源看看有没有改善。

使用特权

评论回复
12
白马过平川| | 2025-3-22 01:23 | 只看该作者
STM32F1 单片机中,使用 HAL_DAC_SetValue 函数写入 DAC 值并配合 HAL_Delay 延时,理论上应该可以正常工作。但您提到写入需要 5-10 秒的时间,这显然是不正常的

使用特权

评论回复
13
失物招領| | 2025-3-22 02:34 | 只看该作者
HAL_Delay(4) 表示延时4毫秒,循环1000次的总延时为4

使用特权

评论回复
14
她已醉| | 2025-3-22 03:26 | 只看该作者
如果实际延时超过4秒,可能是系统时钟配置错误,导致HAL_Delay函数不准确

使用特权

评论回复
15
将爱藏于深海| | 2025-3-22 04:34 | 只看该作者
HAL_DAC_SetValue 函数本身执行速度较慢,可能是由于HAL库的实现效率问题

使用特权

评论回复
16
春日负喧| | 2025-3-22 05:21 | 只看该作者
DAC的硬件写入速度可能受到时钟频率或总线速度的限制

使用特权

评论回复
17
捧一束彼岸花| | 2025-3-22 06:23 | 只看该作者
如果系统中有高优先级中断频繁触发,可能会影响HAL_DelayHAL_DAC_SetValue的执行

使用特权

评论回复
18
西洲| | 2025-3-22 07:38 | 只看该作者
检查是否有其他中断占用大量 CPU 时间

使用特权

评论回复
19
风凉| | 2025-3-22 08:26 | 只看该作者
DAC 硬件模块可能存在故障或配置错误。检查 DAC 的电源和参考电压是否正常

使用特权

评论回复
20
温室雏菊| | 2025-3-22 09:37 | 只看该作者
使用 SystemCoreClock 变量检查系统时钟频率是否正确。使用示波器或逻辑分析仪测量系统时钟信号,确认频率是否符合预期。如果时钟频率错误,检查 RCC 配置和时钟树设置

使用特权

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

本版积分规则

7

主题

10

帖子

0

粉丝