STM8L ADC功能

来源:互联网 发布:所有腾讯软件下载 编辑:程序博客网 时间:2024/06/14 17:45

STM8L系列单片机集成了AD功能,有一个ADC模块,但是有最多可达28个AD通道,可以配置为单次采样或者连续采样。


ADC的精度最多可配置为12位精度,另外可以选择6位、8位、10位的精度。


下面举例初始化一个ADC的配置函数:

void ADC21Conver_Init(){  ADC_ChannelCmd(ADC1,                 ADC_Channel_0,         //关闭其他的采样通道                 DISABLE);
  ADC_Cmd(ADC1 , DISABLE);               //关闭ADC    CLK_PeripheralClockConfig(CLK_Peripheral_ADC1 , ENABLE);              //使能ADC1时钟    GPIO_Init(GPIOD , GPIO_Pin_1 , GPIO_Mode_In_FL_No_IT);  //配置AD引脚      ADC_Init(ADC1,           ADC_ConversionMode_Single,   //单次转换模式           ADC_Resolution_12Bit,        //12位精度转换精度           ADC_Prescaler_1              //时钟设置为1分频             );      ADC_ChannelCmd(ADC1,                 ADC_Channel_21,         //设置为通道21进行采样                 ENABLE);    ADC_Cmd(ADC1 , ENABLE);               //使能ADC  }


因为只有一个ADC,所以在配置之前需要先之前使用的其他的AD通道,这里如果不关闭之前使用的AD通道的话,无法打开新的AD采集通道。

ADC可以选择时钟为1分频或者2分频,可以选择采样精度和采样方式。

下面列举一个读取ADC采样结果的函数:

void ADC_Data_Read(unsigned int *AD_Value){    ADC_SoftwareStartConv(ADC1);      //启动ADC    while(ADC_GetFlagStatus(ADC1 , ADC_FLAG_EOC) == 0);  //等待转换结束    ADC_ClearFlag(ADC1 , ADC_FLAG_EOC);                 //清除中断标志    *AD_Value = ADC_GetConversionValue(ADC1);           //读取ADC1,通道1的转换结果  }

使用上面两个函数即可实现ADC采样功能,但是有个地方很奇怪,每次采集ADC值的时候第一次采集到的数据都是不准确的,所以第一次采集到的值是不能使用的。


另外STM8L内部还提供了1.2V的参考电压,但是在使用这个参考电压的时候有一些不稳定的现象。


比如在采集这个参考电压时,如果在读取函数前面加延时,延时的时间不一样得到的采样结果是不一样的,另外,这个参考我根据外面提供的VCC作为参考电压来计算的话,得到的值也不是1.2V,这个地方不知道是我的配置出了问题还是这个参考电压本身有问题。

原创粉丝点击