STM32自学历程——AD单通道转化

ADC转换的重要性

        ADC非常重要,学会ADC单通道转换后就可以进行一些简答的小项目了,比如:温湿度检测、煤气浓度检测等等。

简单认识ADC

        ADC(Analog-Digital Converter)模拟-数字转换器。

        ADC是用来将输入的模拟信号转换成数字信号,对应的,也可以将数字信号转换成模拟信号,这就是DAC功能,但STM32C8T6并没有自带DAC外设。除了DAC可以将数字信号转换成模拟信号,老朋友PWM也可以将数字信号转换成模拟信号,通过占空比控制舵机旋转角度就是一个例子。

ADC 位数

        因为ADC有12位,所以它最大测量范围是0~4095。

最大转化时间

        1us,也就是1Mhz。

测量通道

        18个输入通道,可测量16个外部和2个内部信号源。16个外部信号就是可以测量16个GPIO引脚,2个内部信号就是1个内部温度传感器信号,一个稳压信号。

ADC通道

C8T6中一共有2个ADC,分别是ADC1和ADC2,而每个ADC在C8T6里面又有10个通道。

如图为引脚分布图。

ADC12表示ADC1和ADC2都有,IN0-IN9表示对应的通道。

这里有个问题,就是ADC1和2可以使用同一个引脚,那会不会出问题呢?其实这是故意设计的,这就是ADC的双通道使用,只需要知道是这个东西就行了,不需要了解。

如下图是引脚整理图.

ADC转换步骤

抽样-保持-量化-编码

ADC的总转换时间为:

TCONV=采样时间+12.5个ADC周期

代码分析

1,配置时钟

ADC要单独一个时钟

ADC通道要单独一个时钟

ADC时钟要单独分频

2,配置GPIO引脚

引脚需要使用模拟输入,也就是ADC的专属配置:GPIO_Mode_AIN

3,选择规则组的输入通道

使用ADC_RegularChannelConfig函数进行配置

ADC_RegularChannelConfig函数结构体里面有:

第一个参数是ADCx:就是确定是哪个ADC,C8T6里面只有ADC1和ADC2。

第二个参数是ADC通道:ADC通道有18个,16个外部通道,也就是对应的16个引脚;两个内部通道,也就是内部温度和电压。

第三个参数是菜单列表序号:菜单列表一共有16位,一般选第一位就行了。

第四个参数是采样时间:数字越小表示采样速度越快,数字越大,表示采样越稳定。

4,配置ADC结构

使用函数ADC_Init

ADC_Init需要配置6个参数。

第一个是ADC的模式:选择单独模式,还是双模式

第二个是ADC的通道选择:选择单通道,还是多通道

第三个是ADC的模式选择:选择连续模式,还是单独模式

第四个是ADC的读取源选择:是外部读取,还是内部读取

第五个是ADC的数据排列方式:是右对齐,还是左对齐。一般是右对齐

第六个是ADC的读取列表有多少位:1-16

5,开启ADC电源

其实就是给STM32说,我要使用ADC了,让STM32把ADC打开。

使用函数ADC_Init(ADCx,ENABLE)

6,开始校准

这一部分的代码是死代码,只需要改ADCx就可以了。

7,ADC读取函数

  1. 选择软件触发转换

使用ADC_SoftwareStartConvCmd(ADCx,ENABLE)函数

  1. 获取标志位状态

使用ADC_GetFlagStatus函数

函数返回值为1时,表示转换完成,为0表示转换未完成。

  1. 返回读取值

ADC_GetConversionValue,这个函数可以直接读取ADC转换的值直接加一个return就可以了。

8,AD转换成电压值

因为AD转换的值是16位2进制数,结果显示为0-4095,所以可以根据线性关系求出自己需要得到的值数值。比如我想求电压值,就可以利用等式:

0/3.3=0/4095

这样就可以写成:所测电压=AD值/4095*3.3。

C语言小知识

浮点数不能用来取余

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值