最近做项目需要用到STM32H750自带的DA输出功能,程序写的差不多后发现DA没有输出,于是用STM32CUBEMX生成了一个只有DA输出的代码。
开始用的DMA输出,无电压,于是改成直接输出,就两句话的事情,竟然也没有输出,无语了。
..............略
MX_DAC1_Init(); //DA初始化
HAL_DAC_Start(&hdac1,DAC_CHANNEL_1);//先启动DA
while (1)
{
HAL_Delay(1);
HAL_DAC_SetValue(&hdac1,DAC_CHANNEL_1,DAC_ALIGN_12B_R,2048);
//利用该函数设置输出值,4096对应3.3V,0对应0V
}
}
这份代码非常简单,初始化DA后,启动DA输出,然后设置输出值,用示波器测量基本没反应,测量输出电压非常小(2048应该输出1.6V左右).
下面是我的调试步骤:
- 步骤1:看了一下代码应该没错,我的DA输出是通过PA4引脚,我的PA4引脚输出后连接运放等一系列电路,于是我将PA4引脚隔离开(PA4和后续电路断开),然后测量PA4输出电压,发现几乎没变化,看来不是后面的负载造成的电压降低。
- 步骤2:接下来用Debug调试,调试前建议先把芯片DAC寄存器这一块好好学一编,然后可以根据寄存器情况判断。我有一块h750的开发版,同样的程序单步调试有电压输出。单步调试的时候要看DAC的寄存器,我的DAC寄存器看着也正常,程序可以正常执行(不会卡在某个地方)数据可以正常输入和转移。
我配置的是DAC1通道,ENX调试可以自动置1
数据可以存入DAC_DHR12R1寄存器
数据可以从DHR转入DOR寄存器中(到这里感觉没啥问题呀,就是没输出)
- 步骤3:虽然PA4输出值低的离谱,我还是试着改变HAL_DAC_SetValue函数值,从0-4096,看看输出电压是否有变化。现象如下:
Vlaue值 PA4测试电压 参考值 0 0.0006V 0V 500 0.0397V 略 1000 0.0513V 略 1500 0.0606V 略 2000 0.0875V 略 2500 0.1183V 略 3000 0.1776V 略 3500 0.3347V 略 4000 0.9636V 略 4095 0.1997v 3.3V 可以看到DA输出是可以随着设置值改变的,但是输出值远打不到参考值。
- 步骤4:再次检查程序,感觉不是软件的事情,突然想到还有一个地方没有测试,那就是DA的电压参考值:VERF+ .这个引脚应该是3.3V,我拿开发版实测是3.3V,而我的项目板只有0.4V。
这个地方电压表实测,3.3v供电没有给过来,经检查有个地方虚焊,重新焊接后VERF+恢复3.3V,然后测PA4,设置2048输出1.6V,4095输出3.3V,终于调试成功。
寄存器资料:http://链接:https://pan.baidu.com/s/1b6TpRD9z9U7c6Yg10UpzHQ 提取码:kb24