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秒的时间才能写入成功。目测是存在问题。但不知道是哪里的问题你在循环里用了HAL_Delay(4),如果是1000次循环,那总共就至少要4秒,这可能是主要的时间消耗点。 STM32F1的DAC可以用DMA或者定时器触发,你可以试试用TIM6触发DAC更新,这样不用手动延时,效率会高很多。 HAL_DAC_SetValue()只是写寄存器,不应该这么慢,会不会是其他地方导致的阻塞,比如中断或者任务调度? 你试过去掉HAL_Delay(4)看看会不会更快吗?如果去掉后输出混乱,那可能是DAC转换时间或刷新率的问题。 HAL_Delay(4)是基于SysTick的,如果有其他任务在跑,可能会影响到这个延时的精度,试试用us级别的精确延时函数? DAC的参考电压是多少?如果是VDDA=3.3V,你写入的数据会正确映射到0~3.3V的范围吗? 你试过用示波器看看实际的DAC输出波形吗?看看是不是有明显的更新延迟。 试试用HAL_DAC_Start_DMA()配合一个缓冲区,自动写入数据,这样可以连续输出,不用手动循环。 你的主频是多少?如果系统时钟比较低,那HAL函数的执行速度也会受到影响,可以检查一下SystemClock_Config()。 你是用的哪个F1型号?有的F103 DAC性能一般,刷新率受限,试试调高时钟源看看有没有改善。 在 STM32F1 单片机中,使用 HAL_DAC_SetValue 函数写入 DAC 值并配合 HAL_Delay 延时,理论上应该可以正常工作。但您提到写入需要 5-10 秒的时间,这显然是不正常的
HAL_Delay(4) 表示延时4毫秒,循环1000次的总延时为4秒
如果实际延时超过4秒,可能是系统时钟配置错误,导致HAL_Delay函数不准确
HAL_DAC_SetValue 函数本身执行速度较慢,可能是由于HAL库的实现效率问题
DAC的硬件写入速度可能受到时钟频率或总线速度的限制
如果系统中有高优先级中断频繁触发,可能会影响HAL_Delay和HAL_DAC_SetValue的执行
检查是否有其他中断占用大量 CPU 时间
DAC 硬件模块可能存在故障或配置错误。检查 DAC 的电源和参考电压是否正常
使用 SystemCoreClock 变量检查系统时钟频率是否正确。使用示波器或逻辑分析仪测量系统时钟信号,确认频率是否符合预期。如果时钟频率错误,检查 RCC 配置和时钟树设置
页:
[1]