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

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

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

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


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];

}

 

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

热门文章 更多
起重变频调速系统中制动电阻功率的计算