您的位置 首页 报告

怎么运用STM8S单片机的多通道AD转化

STM8S单片机的AD结构简介:具有ADC1ADC2(部分型号没有ADC2)最多提供16个转换通道,AD转换的各个通道可以执行单次和连续的转换模式

STM8S单片机的A/D结构简介:

具有ADC1 ADC2(部分类型没有ADC2)最多供给16个转化通道,A/D转化的各个通道能够履行单次和接连的转化方法。

1.电压0到Vdda;

2.在64和80引脚封装的有独立的Vref,其他的封装方法Vref衔接在Vdda

3.续转化方法;

4.时刻14个时钟周期;

5.10位转化精度;

6.发生转化完毕中止;

ADC1结构图

编程中留意的知识点:

过置位ADC_CR1寄存器的 ADON位来敞开ADC。当初次置位ADON位时,ADC从低功耗方法唤醒。为了发动转化有必要第2次运用写指令来置ADC_CR1寄存器的ADON 位。在转化完毕时ADC会坚持在上电状况,用户只需要置位ADON位一次来发动下一次的转化。

假如长时刻没有运用ADC,引荐将ADC模块切换到低功耗方法来下降功耗,这能够经过清零 ADON 位来完结。ADC模块上电后,所选通道对应的I/O口输出模块是被禁用的。因而引荐在ADC上电之前要挑选适宜的ADC转化通道。

假如单次方法在单次转化方法中,ADC仅在由ADC_CSR寄存器的CH[3:0]选定的通道上完结一次转化。该方法是在当CONT位为0时经过置位ADC_CR1寄存器的ADON位来发动的。

一旦转化完结,转化后的数据存储在ADC_DR寄存器中,EOC(转化完毕)标志被置EOCIE 被置位将发生一个中止。

代码如下:

#include “adc.h”

u16 TempADC;

void ADC_Config(void)

{

ADC_CR1 |= 0x01; //开端发动初始化有必要发动一次

//第一次写1,ADC从低功耗唤醒,第2次写1,发动ADC转化

//ADC_CR1 |= 0x20; //使能转化完毕中止,本例中选用的查询方法。

}

uint16_t Get_ADCCH_Value(ADC1_Channel_TypeDef ADC_Channel)

{

ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS,ADC_Channel, ADC1_PRESSEL_FCPU_D2,

ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_ALL, DISABLE);

//你也能够用操作寄存器的方法代码如下,但未验证。

#if 0

ADC_CR2 = 0x00; // A/D成果数据左对齐

CLK_PCKENR2 |= 0x08; // 使能fMASTER与ADC的衔接

ADC_CR1 = 0x00;// ADC时钟=主时钟/2=8MHz,单次转化方法

ADC_CSR = 0x01; // 挑选通道2

ADC_TDRL = 0x01; // 制止施密特触发功用

ADC_TDRH = 0x01;

ADC_CR1 = 0x03; //2分频,接连转化,发动ADC

ADC_CR2 = 0x31; //外部事情保存,数据右对齐,制止扫描方法,

ADC_CSR|= 0x01; //挑选通道1

#endif

ADC1_ConversionConfig(ADC1_CONVERSIONMODE_CONTINUOUS, ADC_Channel,ADC1_ALIGN_RIGHT);

ADC_CR1 |= 0x01; //开端发动转化

while(!(ADC_CSR & 0x80)); //等候转化完毕

return ADC1_GetConversionValue(); //回来ADC成果

}

//这个初始化代码很重要,不能省,每次切换通道都要初始化一次!

在main函数中直接调用即可:

TempADC=Get_ADCCH_Value(ADC1_CHANNEL_1); //获取AD转化值

WetADC=Get_ADCCH_Value(ADC1_CHANNEL_3; //获取AD转化值

到此完毕!开端你的代码高兴之旅吧~~~~

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/baogao/260489.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部