打印
[STM8]

请教stm8l 151k4 ADC读入错误的问题

[复制链接]
1362|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hongweizy|  楼主 | 2018-1-3 10:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位老师,小弟遇到一个问题:STM8L 151K4T6的芯片,使用ADC读取电压数据时,总是不成功,现象是这样的,
无论在哪个位置(1--2.5V之间)读出的数据都是 0x04f0(上下几个bLs浮动),请老师们指教,小弟不胜感激!
程序如下:
void  ADC_Init ()               //ADC单元模块初始化
{
   CLK_PCKENR2 = 0x23;         //COMP1/COMP2、TIM1、ADC1时钟
   ADC1_CR1 = 0x00;             //单次转换,禁止中断、模拟看门狗,12位分辨率,关闭转换开关。
   ADC1_CR2 = 0x00;             //禁止外触发,ADC时钟为CPU时钟,采样时间4个ADC周期

   ADC1_SR  = 0x00;             //将标志位清0,这里只使用EOC(转换结束位)   
   ADC1_SQR1= 0x80;             //禁用DMA
   ADC1_SQR2= 0x00;  
   ADC1_SQR3= 0x00;
   ADC1_TRIGR4 = 0x07;          //0、1、2通道施密特禁用。  
   GPIO_init ( );        //引脚初始化函数,定义各引脚,PA5 引脚设置为悬浮输入。  
}  

Uint number=0;
     ADC1_SR  = 0x00;                    //将标志位清0,
     ADC1_SQR4 = 0x02;                  //选择目标通道AIN1 (PA5)
     ADC1_CR1_ADON = 1;                  //ADON置1,唤醒ADC
     Delay_Ms(10);
     ADC1_CR1_START = 1;                 //START置1,开始数据转换
     while(ADC1_SR_EOC == 0);           //当EOC(ADC1_SR的0位) 变为1时,停止等待  
     ADC1_CR1_ADON = 0;
     ADC1_SR_EOC = 0;             //将转换结束位清0,
     number |= (ADC1_DRH << 8);
     number |=  ADC1_DRL;



沙发
hongweizy|  楼主 | 2018-1-3 19:12 | 只看该作者
通过实验得知,ADC转换过程是正常的,就是不知道它从哪里取得的数据,更换了多个输入通道,转换结果是一样的(包括悬空和接地的引脚)。

使用特权

评论回复
板凳
hongweizy|  楼主 | 2018-1-4 09:25 | 只看该作者
本帖最后由 hongweizy 于 2018-1-5 19:54 编辑

好了,真是莫名其妙,程序是对的,可以用,弄了几天都不正常,今天早上意外的正常了。原因找到,是这个片子读入的第一个数据是错误的,每次连读两次,丢弃第一个,取第二个就正常了,只是还不稳定。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

157

帖子

0

粉丝