我使用的是带有HAL库的STM32F072C8T6单片机。我编写了一个程序,通过微控制器的DAC引脚发送模拟电压,但它不能工作。我运行了调试器,我可以看到,当我逐步执行代码时,DAC寄存器没有任何变化。有人知道我是不是漏掉了密码里的东西吗?
我从其他人那里接管了这个项目。他从CubeMX生成了项目配置。但是,我没有项目.ioc文件(CubeMX文件),所以我必须手动添加DAC函数,而不是使用CubeMX。我所做的是取消#定义stm32f0xx_hal_conf.h中的HAL_DAC_MODULE_ENABLED,并将stm32f0xx_hal_dac.c和stm32f0xx_hal_dac_ex.c添加到Driver文件夹中。
以下是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){
}
}发援会的输出应为1/2*3.3V = 1.65V。然而,实际电压为0V,所有DAC寄存器都保持0x00。我还尝试用CubeMX创建一个新项目,DAC与这个新项目完美地工作,所以硬件不是问题。
发布于 2019-09-08 18:11:45
在RCC中为DAC启用时钟。在您的微控制器参考手册的重置和时钟控制章节中,准确地记录了应该设置哪个寄存器的位。
只要没有启用外围设备的时钟,它的所有寄存器都会读取0,并且外围设备无法使用。
https://stackoverflow.com/questions/57827510
复制相似问题