历史上的今天
返回首页

历史上的今天

今天是:2025年02月19日(星期三)

正在发生

2020年02月19日 | STM8S003xx学习笔记(1):模拟 / 数字转换器(ADC)

2020-02-19 来源:eefocus

虽然使用STM8S003F有一年了,但是对于其中的一些知识还是不是很详尽,从今天开始对照芯片资料做一个完整的学习。这篇文章作为模拟 / 数字转换器(ADC)的学习笔记,主要是根据《STM8S参考手册_中文》(以下简称《参考手册》)和《STM8S003K3_STM8S003F3_Datasheet_EN》(以下简称《数据手册》)来学习。


一 综述

根据《参数手册》我们知道,ADC1和ADC2是10位的逐次比较型模拟数字转换器。提供多达16个多功能的输入通道(实际准确的通道数量在数据手册的引脚描述说明)。A/D转换的各个通道可以执行单次和连续的转换模式。相对于ADC2,ADC1具有一些扩展功能,包括扫描模式、带缓存的连续模式、模拟看门狗。我们在使用的时候要根据《数据手册》来了解不同产品型号的ADC1和ADC2的功能信息。(STM8S003xx只有ADC1——编者注)


二 详细介绍

2.1 功能介绍

主要功能如下(ADC1和ADC2的功能):


10位的分辨率 

单次和连续的转换模式 

可编程的(转换频率的)预分频:fMASTER 可以被分频 2 到 18 

可以选择ADC专用外部中断(ADC_ETR)或者定时器触发信号(TRGO)来作为外部触发信号 

模拟放大(对于具有VREF引脚的型号)

转换结束时可产生中断 

 灵活的数据对齐方式 

ADC 输入电压范围: VSSA ≤ VIN ≤ VDDA

ADC1具有以下扩展功能

带缓冲的连续转换模式(数据缓存大小依不同型号而异(10X10bit或8X10bit),详情参见《数据手册》)

单次和连续转换的扫描模式 

具有上限和下限门槛的模拟看门狗 

模拟看门狗事件发生可产生中断

根据《数据手册》我们知道,STM8S003xx产品包含10位逐次比较A/D转换器(ADC1),最多包含5个外部多路输入通道,其他特性如下:


输入电压范围:0~VDD

转换时间:14个时钟周期

有单次、连续和缓冲连续3种转换模式

当n=输入通道数时,缓存区的大小为:n*10bits

通道序列的单次和连续转换的扫描模式

有可编程上限和下限阈值的模拟看门狗(具有上限和下限门槛的模拟看门狗 )

模拟看门狗中断(模拟看门狗事件发生可产生中断 )

外部触发输入

TIM1 TRGO的触发器

转换结束(EOC)中断

根据《数据手册》我们知道,10位ADC特性如下(除另有规定外,VDD、fMASTER、TA都受一般操作条件的限制):

表44:ADC特性

(1)在采样时间期间,输入电容CAIN(最大3pF)可由外部源充电/放电。内部模拟源的电阻必须允许电容达到其最终电压水平tS。在最后采样时间tS底之后,模拟输入电压的变化对转换结果没有影响。采样时钟tS的值取决于编程。

ADC准确特性待完成【】


四 引脚描述

表64 ADC引脚(《参考手册》)

五 功能描述

5.1 ADC开关控制

通过置位ADC_CR1寄存器的 ADON(bit0)位来开启ADC。当首次置位ADON位时,ADC从低功耗模式唤醒。为了启动转换必须第二次使用写指令来置位 寄存器的 位。在转换结束时ADC会保持在上电状态,用户只需要置位ADON位一次来启动下一次的转换【注:置位(Set):使变量的某一位为1;复位(Reset):使变量的某一位为0;】。 如果长时间没有使用ADC,推荐ADON 位来实现。 当ADC模块上电后,所选通道对应的I/O口输出模块是被禁用的。因此推荐在ADC上电之前要选择合适的ADC转换通道。


5.2 ADC时钟

ADC 的时钟是由fMASTER时钟经过预分频后供给的。时钟的预分频因子是由 ADC_CR1寄存器的 SPSEL[2:0]决定的。 


5.3 通道选择

STM8系列单片机有多达 16 个外部输入通道。但实际外部通道的数量取决于MCU 封装大小。STM3S003F3有5个外部输入通道。如果在一次转换过程中改变通道选择,那么当前的转换被复位同时一个新的开始指令脉冲被发 送到 ADC。


5.4 转换模式

ADC支持5种转换模式:单次模式,连续模式,带缓存的连续模式,单次扫描模式,连续扫描模式。 


5.4.1 单次模式

在单次转换模式中,ADC仅在由ADC_CSR寄存器的CH[3:0]选定的通道上完成一次转换。该模式是在当CONT位为0时通过置位ADC_CR1寄存器的ADON位来启动的。 


一旦转换完成,转换后的数据存储在ADC_DR寄存器中,EOC(转换结束,在ADC_CSR中)标志被置位,如果EOCIE (在ADC_CSR中)被置位将产生一个中断。(噪音采集用的单次) 


5.4.2 连续模式和带缓存的连续模式

在续转转换模式中 ADC在完成一次转换后就立刻开始下一次的转换。当CONT位被置位时即将ADC设为连续模式,该模式是通过置位 ADC_CR1寄存器的 ADON 位来启动的。 


● 如果缓冲功能没有被使能(ADC_CR3寄存器的DBUF位=0),那么转换结果数据保存在ADC_DR寄存器中,同时 EOC 标志被置位。如果EOCIE 位已被置位时将产生一次中断。然后开始下一次转换。 

● 如果缓存功能被使能(ADC_CR3寄存器的DBUF=1),那么某个选定通道上的8个或者10个连续的转换结果会填满数据缓存,当缓存被填满时,EOC(转换结束)标志被置位,如果EOCIE位已被置位,则会产生一个中断,然后一个新的转换自动开始。如果某个数据缓存寄存器在被读走之前被覆盖,OVR(在ADC_CR3中)标志将置1。(见24.5.5) 


如果要停止连续转换,可以复位清零CONT位来停止转换或者复位清零ADON位来关闭ADC的电源。 


5.4.3 单次扫描模式

一定要注意,单次模式和单次扫描模式是不一样的!该模式是用来转换从AIN0到AINn之间的一连串模拟通道,'n’是在 ADC_CSR寄存器的CH[3:0]位中指定的通道编号。在扫描转换的过程中,序号 CH[3:0]位的值是被硬件自动更新的。它总保存当前正在被转换的通道编号。单次转换模式可以在在SCAN 位(在    中)被置位且COUNT位以清零时通过置位ADON来启动。


注意:当使用扫描模式时,不可以将AIN0到AINn之间通道对应的I/O口设为输出状态,因为ADC的多路选择器已经将这些I/O口的输出模块禁用了。 对于单次扫描模式,转换是       从AIN0通道开始的,而且结果数据被存储在数据缓冲寄存器ADC_DBxR 中,当最后一个通道(通道‘n’)被转换完成后,EOC(转换结束)标志被置位,当EOCIE 位已被置位时将产生一个中断。 


可以从缓冲寄存器中读取各个通道的转换结果值。如果某个数据缓存寄存器在被读走之前被覆盖,OVR标志将置1。(见24.5.5) 


转换序列正在进行过程中不要清零SCAN位;单次扫描模式可通过清零ADON位来立即停止。 为了开启一次新SCAN扫描转换,可以通过对ADC_CR1寄存器的EOC位清零和ADON位置位来实现。 


5.4.4 连续扫描模式

该模式和单次扫描模式相近,只是每一次在最后通道转换完成时,一次新的从通道0到通道n扫描转换会自动开始。如果某个数据缓存寄存器在被读走之前被覆盖,OVR标志将置1(见24.5.5) 。连续扫描模式是在当SCAN位和CONT位已被置时,通过置位ADON位来启动的。 在转换序列正在进行过程中不要清零SCAN位。 连续扫描模式可以通过清零ADON位来立即停止。另外一种选择就是当转换过程中清除CONT位那么转换会在下一次的最后一个通道转换完成时停止。


注意:在扫描模式中,不要使用位操作指令(BRES)去清除EOC标志位,这是因为该指令是对整个ADC_CSR寄存器的一个读-修改-写操作。从CH[3:0]寄存器中读取当前的通道编号和写回该寄存器,将会改变扫描系列的最后通道编号。


在连续扫描模式中正确的清除EOC标志位的方法是 从一个RAM变量中载入一个字节到ADC_CSR寄存器,这样来清除 EOC标志位同时还重新载入扫描系列新的最后通道编号。 


5.4.5 溢出标志位

在带缓冲的连续模式,单次扫描模式或者连续扫描模式中,溢出错误标志位OVR位是由硬件置位的。它是用来指示10个缓冲寄存器中的某个值在被读走之前被一个新的转换结果值覆盖。在这种情况下,推荐重新开启一次新的转换过程(因为某个有效的结果已经被覆盖了)。(言外之一就是说,在出现错误就重启ADC转换,以前的值丢弃。——编者注) 

注意:置位ADON位会自动清除OVR标志位。


5.4.6 模拟看门狗

暂时未看

5.4.7 基于外部触发信号的转换

暂时未看

5.4.8 模拟放大

暂时未看


5.4.9 时序图

如 图149所示,在ADC上电后,在开始精确转换之前ADC需要一个稳定时间tSTAB (等于一次转换的时间 tCONV),对于之后接下来的转换就不需要稳定延时,而且ADON位只需要被置位一次。一次ADC转换需要14个时钟周期,在转换完成后EOC标志被置位,同时转换结果保存在10位ADC数据寄存器里面。


图149 单次模式的时序图(CONT=0)

图150 连续模式的时序图(CONT=1)

六 低功耗模式

暂时未看


七 中断

暂时未看


八 数据对齐

ADC_CR2寄存器中的ALIGN位用于选择转换后数据的对齐方式。 数据可以按如下方式对齐:

左对齐:8个高位数据被写入ADC_DH寄存器中,其余的低位数据被写入ADC_DL寄存器中。读取时必须先读高位再读低位。


右对齐:8个低位数据被写入ADC_DL寄存器中,其余的高位数据被写入ADC_DH寄存器中。读取时必须须先读低位再读高位。


图152 数据左对齐

图151 数据右对齐

九 读取数据转换结果

当读取ADC转换结果时,须注意要依据所选择的数据对齐方式,按照指定的方式连续使用两条指令来读取数据寄存器 (什么叫连续使用两条指令?——编者注)。为了保证数据一致性,MCU采用内部锁存机制。对应ADC_DR的高位寄存器和低位寄存器,直到读取一个指定数据寄存器之前,另一个寄存器的转换数据结果不会被修改。因此,按照错误的顺序来读取寄存器将得到错误的结果。 寄存器读取顺序由数据对齐方式决定(参考《笔记1》——八 数据对齐) 


为了得到正确的结果: 

● 在左对齐模式下,先读高位字节寄存器(ADC_DRH),再读低位字节寄存器(ADC_DRL)。 

● 在右对齐模式下,先读低位字节寄存器(ADC_DRL),再读高位字节寄存器(ADC_DRH) 。此时,用户也可以选择使用LDW指令来读取整个ADC_DR,因为该指令和右对齐模式采用同样的读取顺序。 


十 施密特触发器禁止寄存器

暂时未看

十一  寄存器描述

11.1 寄存器(ADC_DBxRH)(x=0..7 or 0..9) ADC高位数据缓存

暂时未写

11.2  ADC低位数据缓存寄存器(ADC_DBxRL)(x=0..7 or 0..9)

暂时未写

11.3 ADC控制/状态寄存器(ADC_CSR) configure state register

地址偏移值:0x00

复位值:0x00 


11.4 ADC配置寄存器1(ADC_CR1 )configure register 1

地址偏移值:0x01 

复位值: 0x00 


11.5 ADC 配置寄存器 2 (ADC_CR2) configure register 2

地址偏移值:0x02 

复位值: 0x00 


11.5 ADC 配置寄存器 2 (ADC_CR2)

暂时未写

11.6 ADC配置寄存器 3 (ADC_CR3)

暂时未写

11.7 ADC 数据高位寄存器(ADC_DRH)

暂时未写

11.8 ADC 数据低位寄存器(ADC_DRL)

暂时未写

11.9 ADC 施密特触发器禁止寄存器高位 (ADC_TDRH)

暂时未写

11.10 ADC 施密特触发器禁止寄存器低位 (ADC_TDRL)

暂时未写

11.11 ADC 上限门槛值高位寄存器(ADC_HTRH)

暂时未写

11.12 ADC 上限门槛值低位寄存器(ADC_HTRL)

暂时未写

11.13 ADC 下限门槛值高位寄存器(ADC_LTRH)

暂时未写

11.14 ADC 下限门槛值低位寄存器(ADC_LTRL)

暂时未写

11.15 ADC看门狗状态高位寄存器(ADC_AWSRH)

暂时未写

11.16 ADC看门狗状态低位寄存器(ADC_AWSRL)

暂时未写

11.17 ADC看门狗控制高位寄存器(ADC_AWCRH)

暂时未写

11.18 ADC看门狗控制低位寄存器(ADC_AWCRL)

暂时未写

十一  ADC寄存器映像表和复位值

暂时未看

十二 结束语

这是一篇学习文档,由于内容较多,所以只对重点的地方和用到了的地方进行了一个阅读。


<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

版本:V1.0

时间:2015.11.10 

作者:Alan

说明:完成文章。

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

推荐阅读

史海拾趣

台湾唯圣(GW)公司的发展小趣事
用于肌肉康复、神经康复等,通过间动电流刺激促进肌肉收缩,帮助恢复肌肉力量和神经传导功能。
福声科技(FUET)公司的发展小趣事

福声科技(FUET)的初创可以追溯到几年前,当时电子产业正蓬勃发展,对高质量电声元器件的需求日益增长。公司创始人凭借在电声领域的深厚积累,决定成立一家专注于电声产品研发、生产和销售的企业。初期,福声科技聚焦于贴片式无源蜂鸣器、高分贝报警器等产品,凭借其高性价比和稳定的性能,迅速在家电、移动通讯设备等领域获得市场认可,为公司的后续发展奠定了坚实基础。

明波通信(BWAVE)公司的发展小趣事

随着汽车产业的快速发展,车载电子系统成为了新的增长点。明波通信凭借在通信领域的深厚积累,迅速拓展车载电子系统业务。公司成功开发了车载导航、车载音响系统等项目,并与多家知名汽车厂商建立了合作关系。这一举措不仅为明波通信带来了新的增长点,也进一步巩固了其在电子行业的地位。

恒连电子(EVERCOM)公司的发展小趣事

恒连电子注重企业文化建设和团队建设,为员工创造了一个良好的工作环境和发展平台。公司倡导“以人为本”的管理理念,关注员工的成长和发展,为员工提供丰富的培训和学习机会。同时,公司还建立了完善的激励机制和福利制度,激发员工的工作积极性和创造力。在团队建设方面,公司注重团队协作和沟通能力的培养,鼓励员工相互学习、共同进步。通过优秀的团队建设和企业文化建设,恒连电子打造了一支高效、专业、团结的队伍,为公司的发展提供了有力的人才保障。

常忆科技(CHINGIS)公司的发展小趣事

展望未来,常忆科技将继续坚持创新驱动的发展战略。公司将不断加大在研发和创新方面的投入,推动产品技术的持续升级和迭代。同时,常忆科技还将积极拓展新的应用领域和市场空间,以满足更多客户的需求。

为了实现可持续发展,常忆科技还将注重环境保护和社会责任。公司将致力于推广绿色环保的生产方式和产品应用,为社会的可持续发展做出贡献。在未来的发展中,常忆科技有望凭借其卓越的技术实力和创新精神,继续在电子行业中书写新的辉煌篇章。

Abbotec Incorporated公司的发展小趣事

Abbotec深知人才是企业发展的核心。因此,公司一直注重人才培养和团队建设。公司定期举办各种培训活动,提升员工的专业技能和管理能力。同时,Abbotec还积极引进外部优秀人才,为公司的发展注入新的活力。

问答坊 | AI 解惑

求“走进嵌入式开发的大门_刘贤玉”PPT版本资料一份

哪位朋友有这个版本的资料啊?能否共享出来啊!在下先 了…

查看全部问答>

SD卡问题

最近在调试SD卡驱动。。。。我在卡刚插入时用了很多打印,发现。。。在我插入时读取卡的分区表时突然把卡拔掉。。这是机器死掉了。。。。。问下有过SD卡经验的人。。。这里有什么大的问题呢…

查看全部问答>

vxworks模块加载

我用Tornado2.2(vxworks5.5),在虚拟机上建立文件系统FAT16格式,通过ftp从windows向目标机vxworks传递应用模块api.o,文件 可以用ls查看到,在目标机sell上运行ld(1,0,\"C:/api.o\"),报错\"error loading,errno=0x3d0001\".该文件在Tornado用target se ...…

查看全部问答>

ARM芯片GPIO等寄存器的地址 常见的此类地址有什么啊

小弟正在看嵌入式 水平非常的水 还请各位大侠不吝点化 看程序中有如下语句 #define GPBCON                  (*(volatile unsingned long *)0x56000010) #define GPBDAT  &nb ...…

查看全部问答>

高价求购 Tornado V 2.2.1的序列号

高价求购 Tornado V 2.2.1的序列号 联系方式:站内消息.…

查看全部问答>

DIY湿度计51板子的SHT程序

DIY湿度计51板子的SHT程序 根据ZhangDongping的C8051F板子程序改编。 板子才拿到不久,由于前段时间出差才回来,还没来得及做,小志妹妹又赶着俺要进度,先整理了一下SHT21的读写程序,适用于51板。大家就参考一下吧。…

查看全部问答>

2812 pwm没反应

我最近刚开始使用2812,使用pwm例程时出现问题,例程能通过编译,下载后也能执行,但是用示波器观察不到波形…

查看全部问答>

请教EK-LM3S811板用作调试器调试外部芯片要怎么弄?直接插上去吗?

请教EK-LM3S811板用作调试器调试外部芯片要怎么弄?直接插上去吗?…

查看全部问答>

12月3号的颁奖什么情况啊

本帖最后由 paulhyde 于 2014-9-15 03:41 编辑 2011电子设计大赛,12月3号的颁奖什么情况啊  …

查看全部问答>

INTx.y真的很烦人

TI的F28035的中断源很多,给设计带来了很大的方便。然而,初搞这颗CPU,看着它就象一堆乱麻,谁有什么好办法理清它?…

查看全部问答>