HAL+Cube MX 学习之ADC与DAC

记录HAL库+Cube MX的学习过程,不定期更新……

一、DAC(Digital to Analog Converter)

DAC的Cube MX设置很简单,选择在Analog中选择DAC,设置OUT1,会自动对应PA4。当然,如果看过原理图,知道PA4引脚可以选择为DAC_OUT1 ,也可以直接对PA4进行设置。
在这里插入图片描述
打开生成的工程,插入下列代码,

HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R,2048); // 设置DAC的大小
HAL_DAC_Start(&hdac, DAC_CHANNEL_2);//开启DAC转换

在PA4口检测,就可以检测到电压。

二、DAC and ADC’s Introduction

DAC:

我一直不能理解DA与AD的转换到底是怎么一回事,在做过两个实验之后,开始理解这个过程:DA就是将一个数字转换成电压,这个电压值可以通过电压表读出来。比如上面的数字2048,来说说这个数字是怎么得出来的,最后通过2048这个数字(D)转化成的电压(A)又是多少,下面开始:
STM32 DAC模块是12位的数字输入,计算机都是以2进制进行运算的,也就是说12位数字就是1111 1111 1111,值为 2 13 2^{13} 213,即4095,STM32电压输出最大为3.3V,通过对DAC的设置就可以将一个小于等于4095的值与一个小于等于3.3V的电压输出,要注意输出的电压是一个模拟信号,用电压表测量只是把这个电压变成一个符合我们认知的值显示。根据这一原理就可以让引脚输出任意值的电压。

ADC:

AD转换就是将特定引脚的电压转化为一个数字,那我们要怎么得知这个数字呢?在电脑上读取的方法一般是用串口打印。比如在一个引脚输入一个电压,就可以把这个电压转化为数字,再稍微转化一下就可以化为电压值。这个电压值最大为3.3V,数字最大为4096,跟上面DAC的数字范围以及转化相同。

三、ADC(Analog to Digital Converter)

在Analog的ADC1选项中设置IN0后,Cube MX会自动自动配置对应的引脚,IN0对应的引脚是PA0,
在这里插入图片描述
在下面Parameter(参数)的设置中,使能Continuous Conversion Mode(连续转换模式)。
在这里插入图片描述
串口的设置很简单,在Connectivity的USART1选型中设置模式为Asynchronous(异步通信),Cube MX同样配置好了相关引脚,就可以直接生成代码了。
在这里插入图片描述
在while(1)中插入如下代码,下载程序后,打开串口助手,对PA0端口加电压就能在串口助手上打印出电压值AD_Value。

while(1){
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转换数据, 数据为12位
printf("[info]main.c:v=%.1fmv\r\n",AD_Value*3300.0/4096);//打印日志
}
}

要注意的是,一些变量需要对其赋值,串口打印函数printf也要添加头文件跟函数,相关的设置会在串口通信的内容中说明。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值