首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STM32 -为什么代码不像它应该修改的那样修改寄存器?

STM32 -为什么代码不像它应该修改的那样修改寄存器?
EN

Stack Overflow用户
提问于 2019-09-06 19:22:15
回答 1查看 729关注 0票数 4

我使用的是带有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的代码:

代码语言:javascript
复制
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与这个新项目完美地工作,所以硬件不是问题。

EN

回答 1

Stack Overflow用户

发布于 2019-09-08 18:11:45

在RCC中为DAC启用时钟。在您的微控制器参考手册的重置和时钟控制章节中,准确地记录了应该设置哪个寄存器的位。

只要没有启用外围设备的时钟,它的所有寄存器都会读取0,并且外围设备无法使用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57827510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档