×
嵌入式 > 技术百科 > 详情

STM8L ADC功能

发布时间:2020-12-16 发布时间:
|

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,这个地方不知道是我的配置出了问题还是这个参考电压本身有问题。

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
联发科高端芯片系列出新品Helio P10 中文名[曦力"