[STM8] STM8L ADC1转换内部参考电压代码

[复制链接]
5462|5
 楼主| gym216 发表于 2015-12-13 21:45 | 显示全部楼层 |阅读模式
#include "stm8l15x.h"

u16 value[10];
void delay_us(u16 n);

void main(void)
{
  u8 i=0;
  CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
  CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);
  ADC_DeInit(ADC1);
  ADC_Init(ADC1,ADC_ConversionMode_Single,ADC_Resolution_12Bit,ADC_Prescaler_2);
  ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels,ADC_SamplingTime_384Cycles);
  ADC_SamplingTimeConfig(ADC1, ADC_Group_FastChannels,ADC_SamplingTime_9Cycles);
  ADC_DMACmd(ADC1, DISABLE);
  /* Infinite loop */
  while (1)
  {
    ADC_ChannelCmd(ADC1, ADC_Channel_Vrefint,ENABLE);//选择内部基准通道
    ADC_Cmd(ADC1, ENABLE);//ADON
    ADC_VrefintCmd(ENABLE);//TSON
    delay_us(5);
    for (i=0;i<10;i++)
    {
      ADC_SoftwareStartConv(ADC1);//START
      while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)==0){}//wait for EOC
      value[i] = ADC_GetConversionValue(ADC1);
    }
    ADC_Cmd(ADC1, DISABLE);//ADON复位
    ADC_VrefintCmd(DISABLE);//TSON复位
    ADC_ChannelCmd(ADC1, ADC_Channel_Vrefint,DISABLE);//关闭通道
    delay_us(0xff);
  }
}
/*****************延时us函数*******************/
void delay_us(u16 n)
{
  u32 i=n*16;
  while(--i){}
}
 楼主| gym216 发表于 2015-12-13 21:48 | 显示全部楼层
看了几遍手册,代码重写了n次,用stlink调试,value的结果老是乱跑,用的是stm8l152r8,求解
金融小数 发表于 2015-12-13 23:03 | 显示全部楼层
别玩了,内部参考电压不准
lbm232119 发表于 2016-2-22 15:33 | 显示全部楼层
gym216 发表于 2015-12-13 21:48
看了几遍手册,代码重写了n次,用stlink调试,value的结果老是乱跑,用的是stm8l152r8,求解 ...

楼主说的这个问题解决了吗,我也是遇到这个问题,读出来的value总是不稳定。我用的是8l052c6
hn_sun 发表于 2017-1-15 00:28 | 显示全部楼层
我是用的STM8L052R8T6,不妨把STM8L的内部参考电压输出来,我这个IC是在PC2上,电压会变动,曾输出过 1.210, 1.213, 1.215, 1.217,所以根本不能用。。。
zhhj526646801 发表于 2019-7-20 12:47 | 显示全部楼层
lbm232119 发表于 2016-2-22 15:33
楼主说的这个问题解决了吗,我也是遇到这个问题,读出来的value总是不稳定。我用的是8l052c6 ...

有没有程序提供一下,刚好想调一下这个。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

62

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部