(HAL库学习3)STM32CubeMX HAL库 ADC与DAC使用

这次的教学是用CubeMX开启STM32的ADC 与 DAC功能

本次测试再次换了一块板子,用的是STM32F103RCT6,并不是我想换哈,hal库无论你用啥板子,函数几乎都没发生改变,底层驱动又是软件默认帮我们设置好的,之所以换板子是因为系列中中低端的大多数板子是没有DAC功能的(ADC都有),以下赋一张F1的图

(HAL库学习3)STM32CubeMX HAL库 ADC与DAC使用_第1张图片
本次使用的RCT6就是F1系列上面这个48kbRAM这个,室友两个DAC的哈。

第一步:在CubeMX中使能ADC与DAC

(HAL库学习3)STM32CubeMX HAL库 ADC与DAC使用_第2张图片
以上是ADC的使能,有些特性我也没有用过,不过直接使用默认的已经能完成测测出精准电压的功能了
(HAL库学习3)STM32CubeMX HAL库 ADC与DAC使用_第3张图片
以上是DAC的开启设置,同样使用默认的即可

第二步:生成工程后使用HAL库输出DAC,读取ADC

(HAL库学习3)STM32CubeMX HAL库 ADC与DAC使用_第4张图片
按照上面的就可以使用ADC与DAC了,记住自己添加 uint16_t AD_Value = 0;在前面(main函数前面),作为ADC值读取的缓存,还有记住自己的代码写在BEGIN和END之间,这样你在CubeMX上随便增加删除硬件驱动,你都可以动态加入到自己工程里,你自己写的东西不得被删除

  //这是DAC的相应函数
  HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 1024);  
  HAL_DAC_Start(&hdac, DAC_CHANNEL_1);
  //这是ADC的相应函数,放在循环里面就可以一直读取
  HAL_ADC_Start(&hadc1);  //启动ADC装换
    HAL_ADC_PollForConversion(&hadc1, 50);  //等待转换完成,第二个参数是超时时间,单位是ms.
		if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))  //判断转换完成标志位是否设置
    {
      /*开始获取转换值*/
      AD_Value = HAL_ADC_GetValue(&hadc1);    //获取adc转换的数据
      printf("adc读取的电压为: %.1fmv(%.2fv)\r\n",(double)(AD_Value*3300)/4096,(double)(AD_Value*3.3)/4096);
    }

结果:

(HAL库学习3)STM32CubeMX HAL库 ADC与DAC使用_第5张图片
这里可以看出来,本来该是0.825,但是我的只有0.782,是因为我的单片机电源电压测出来只有3v左右,按上面的算法换算出来就是准确的,所以那个算法是针对严格3.3v的哈

最后

我是一个新人博主,目前也是一个大学生,但是真心喜欢嵌入式和物联网,已经自学3年了,我会带着热爱一直把博文写下去,也是自己记笔记的一种方式,大家可以关注我,给我留言,一起学习

你可能感兴趣的:(STM32_HAL库相关操作)