stm8L051低功耗采集电池电量ADC例程

自己记录一下,以防以后用

uint  ADC_ReadValue(uchar  channel)
{	
    uchar   i;
    static uint ADC_Buf[5];
    uint vrefint;
    ulong adcValue;

    CLK_PCKENR2 = CLK_PCKENR2 | 0X01;		 //使能外设ADC的时钟,之后对ADC的寄存器操作有效
    ADC1_CR1 = 0x01;						 //开启AD模块电源,使用Sing mode;
    ADC1_CR2 = 0X02;						 //使用MCU系统时钟频率作ADC的时钟;
    ADC1_TRIGR1 |= 0x10;		//使能内部参考电压		
    ADC1_SQR1_DMAOFF = 1;					 //禁止DMA传输;
    Delay_ms(5);
    for(i = 0; i < 5; i++)
    {
        // 读取内部参考电压的采样值  
        ADC1_SQR1 |= 0x10; 
        ADC1_CR1_START = 1; 		//启动AD转换 
        while(ADC1_SR_EOC == 0);   //等待AD转换完成。
        ADC1_SR_EOC = 0;
        vrefint = ADC1_DRH; 		//右对齐数据
        vrefint = (vrefint << 8) | ADC1_DRL;		//读取寄存器数据
        ADC1_SQR1 = 0x80;

            ADC_Buf[i] = (ulong)4096 * 1224 / vrefint;

        Delay_us(10);
    }

    ADC1_SQR2 = 0x00;
    ADC1_TRIGR1 = 0x00;  
    ADC1_CR1 = 0x00;						  //关闭AD模块电源
    CLK_PCKENR2 = CLK_PCKENR2 & 0xFE;		  //关闭AD时钟	 

    Sort_Detection(ADC_Buf, 5);//取平均值
    return  ADC_Buf[2];
}
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值