历史上的今天
今天是:2025年03月04日(星期二)
2020年03月04日 | stm8L051低功耗采集电池电量ADC例程
2020-03-04 来源:eefocus
自己记录一下,以防以后用
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];
}
下一篇:STM8L ADC功能
史海拾趣
|
VOID filterSendOriginatedBufferList( IN PMS_FILTER pFilter ) /* &nbs ...… 查看全部问答> |
|
1. 实验任务 利用取表的方法,使端口P1做单一灯的变化:左移2次,右移2次,闪烁2次(延时的时间0.2秒)。 麻烦帮忙检查下下面代码有什么问题,实在看不出来错在哪里 程序代码: ORG 0 START: MOV DPTR,#TABLE LOOP: CLR A MOVC A,@A+DPTR ...… 查看全部问答> |
|
之前玩TI的DSP,象PLL.I2C,I2S,SPI,DMA等等之类的功能单元,都有单独的编程手册给出编程步骤,第一次接触STM32,以 ...… 查看全部问答> |
|
Uint16 SCIHBAUD SCI波特率选高字节寄存器不是8位的吗?为什么参考代码里面是定义成16位的呢??? [ 本帖最后由 冰雨 于 2012-2-29 23:35 编辑 ]… 查看全部问答> |




