欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-09 08:37:41
...

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

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

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

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

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

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

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

最后

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