【发布时间】:2020-01-09 15:45:09
【问题描述】:
我正在使用带有 HAL 库的 STM32F072C8T6 微控制器。我编写了一个程序,通过微控制器的 DAC 引脚发送模拟电压,但它不起作用。我运行了调试器,当我单步执行代码时,我可以看到没有任何 DAC 寄存器发生变化。有谁知道我是否遗漏了代码中的某些内容?
我从其他人那里接手了这个项目。他从 CubeMX 生成项目配置。但是,我没有项目 .ioc 文件(CubeMX 文件),所以我必须手动添加 DAC 函数,而不是使用 CubeMX。我所做的是我取消了 stm32f0xx_hal_conf.h 中的 #define HAL_DAC_MODULE_ENABLED 的注释,并添加了 stm32f0xx_hal_dac.c 和 stm32f0xx_hal_dac_ex.c 进入 Drivers 文件夹。
这是 main.c 中 DAC 的代码:
DAC_HandleTypeDef hdac;
int main(void){
HAL_Init();
SystemClock_Config();
DAC_ChannelConfTypeDef sConfig = {0};
hdac.Instance = DAC;
if (HAL_DAC_Init(&hdac) != HAL_OK)
{
Error_Handler();
}
sConfig.DAC_Trigger = DAC_TRIGGER_NONE;
sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
if (HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
HAL_DAC_Start( &hdac, DAC_CHANNEL_1);
HAL_DAC_SetValue( &hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 2048);
while(1){
}
}
DAC 输出应为 1/2*3.3V = 1.65V。但是实际电压为 0V,所有 DAC 寄存器保持为 0x00。我还尝试使用 CubeMX 创建一个新项目,DAC 与这个新项目完美配合,因此硬件不是问题。
【问题讨论】:
-
您确定正确链接了 DAC 功能吗?如果您的调试器支持单步执行代码,您确定执行一直通过循环吗?您能否正确地进入 HAL DAC 功能,还是调试器会感到困惑?当出现故障时
Error_Handler()的预期行为是什么?您看到这种行为了吗? -
我以前没有使用过这些 MC 或 CubeMX,但是 MC 构建系统可能对它们如何构建和链接代码非常挑剔。我会怀疑你的手工工作只是为了让它编译。另外,请考虑在Electrical Engineering Stack Exchange 上打开嵌入式问题。这是这里的主题,但他们在那里做了很多低级编程。如果您移动此问题,请确保在 SO 上删除此问题,以免它在 SE 网络内的多个站点上重复。
-
@skrrgwasme:我可以正确地进入 HAL DAC 功能。我什至尝试直接在主文件中修改 DAC 寄存器,但它没有改变。
-
@cuckoo 你在哪个 IDE 上工作?,我认为
HAL_DAC_SetValue( &hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 2048);专注于它的论点是错误的,用 CubeMX 软件制作一个项目并使用 DAC 模块,然后看看如何正确启动和更改 DAC 值。