你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM8S105的连续ADC转换模式怎么理解?

[复制链接]
sinba2021 提问时间:2015-6-20 11:47 /
如果缓存功能被使能(DBUF=1),那么某个选定通道上的8个或者10个连续的转换结果会填满数据缓存,当满数据缓存,当缓存被填满时,EOC(转换结束)标志被置位,如果EOCIE位已被置位,则会产生一个中断,然后一个新的转换自动开始。如果某个数据缓存寄存器在被读走之前被覆盖,OVR标志将置1。

   上面是数据手册中,介绍的ADC连续转换的功能介绍;用到内部缓存区;
  问题是: 1,应该是单片机内部只有10个缓存区,STM8S105;只能对一个通道做连续转换并且缓存10个转换结果。??是不是这样理解;
                2,如果是上面的理解正确;如果我想在缓存满后,停止这个通道转换,并且转换到另一个通道?


收藏 评论3 发布时间:2015-6-20 11:47

举报

3个回答
你好我好大家好! 回答时间:2015-6-20 12:16:13
转换完这一次后紧接着转换下一次
sinba2021 回答时间:2015-6-20 16:46:34

通过反复试验得到了一个比较好用的带缓存,带平均滤波的ADC读取方法,提供出来给各位参考。各位大侠欢迎拍砖。

u16 adc_trans(u8 channel)
{
        u8 k = 0;
        u32 sum_adc = 0;
        u16 sum;
       
                ADC_CSR = channel;      //选择通道
                ADC_CR2|=0x08;     //        数据排列,右对齐
                //ADC_TDRL=0x20;   //初始化ADC程序
               
                ADC_CR1|=0x01|0x02;    //将CR1寄存器的最低位置1开启adc转换,开启连续转换
                ADC_CR3|=0X80;
                for(k=0;k<200;k++);    //延时一段时间,至少7uS,保证ADC模块的上电完成

                ADC_CR1|=0x01;         //再次将CR1寄存器的最低位置1,开启AD转换
                while((ADC_CSR & 0x80)!=0x80);  // 等待转换结束
                                                                                                         //sum = ADC_DR;//直接读取16位数据
                ADC_CSR&=(~0x80);      //软件清零 转换结束 标志位
                ADC_CR1 &= (~0x03);    //停止转换       
                       
                sum_adc = ADC_DB0R + ADC_DB1R + ADC_DB2R + ADC_DB3R + ADC_DB4R + ADC_DB5R + ADC_DB6R + ADC_DB7R + ADC_DB8R + ADC_DB9R;
               
                sum = sum_adc / 10;
         return sum;
}
w小菜才 回答时间:2015-6-20 16:49:14
帮顶................
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版