为了方便对照功能,照例贴上SOP8 Type0封装的MM32G0001A6T的引脚图:
芯片内部集成了12 位可编程分辨率的ADC,最大允许采集外部8路通道和1路内部通道(ADC的内部信号源通道连接了一个内部基准参考电压,大小为 1.2V,此通道把 1.2v 的参考电压输出转换为数字值)的数据,转换速度最大1MHz。
一、支持的工作模式
1、普通工作模式
1.1、单次转换模式: 指定通道完成一次转换
1.2、单周期扫描模式:在所有指定通道 (从低序号通道到高序号通道,或从高序号通道 到低序号通道) 完成一个周期转换
1.3、连续扫描模式: 连续执行单周期扫描模式直到软件停止 A/D 转换。若需中途修改 转换通道只能停止 A/D 转换,配置完相关寄存器再重新开启转换。
2、任意通道工作模式
2.1、单次转换模式:在指定通道完成一次转换
2.2、单周期扫描模式:在所有指定通道 (可按照任意顺序) 完成一个周期转换
2.3、连续扫描模式:连续执行单周期扫描模式直到软件停止 A/D 转换。若想修 改转换 通道,不必停止转换,可配置相应寄存器,在下一个扫描周期开始将进行新的通 道 转换。
二、启动工作的方式
1、使用软启动
2、外部触发启动,且软件可配置为外部延时触发
3、Timer1/3 匹配或 TRGO 信号,外部 EXTI 信号源
三、系统框图
四、相关寄存器
1、数据寄存器 (ADC_ADDATA)
2、配置寄存器 (ADC_ADCFG)
ADEN 位可给 ADC 上电。当第一次设置 ADEN 位时,它将 ADC 从断电状态下唤醒。
ADC 上电延迟一段时间后(大约 200ns),设置 ADCR 寄存器的 ADST 位开始进行转换。通过清除ADST 位可以停止转换,清除 ADEN 位可置于断电模式。
3、控制寄存器 (ADC_ADCR)
、
4、窗口比较寄存器 (ADC_ADCMPR)
比较模式下提供了上限和下限两个比较寄存器。可通过软件设定 CMPCH 位选择监控通道。当CPMHDATA ≥ CPMLDATA 时,比较结果大于或等于 ADCMPR 寄存器的 CMPHDATA 指定值或者小于CMPLDATA 指定值,状态寄存器 ADSTA 的 ADWIF 位置 1。
当 CPMHDATA < CPMLDATA 时,比较结果如果等于 CPMHDATA 指定值或者处于两个指定值之间,则状态寄存器 ADSTA 的 ADWIF 位置 1。
如果控制寄存器 ADCR 的 ADWIE 置位,将产生中断请求。
5、状态寄存器 (ADC_ADSTA)
6、数据寄存器 (ADC_ADDR0 ~ 8)
7、任意通道通道选择寄存器 0(ADC_CHANY0)
注:单周期扫描或连续扫描模式下,硬件会启动 ADC_CHANY0 影子寄存器,在 ADC 未开始工作时,软件写 ADC_CHANY0 的话,也会写到其影子寄存器;在 ADC 工作期间,若更改 ADC_CHANY0 的值,只会更新其影子寄存器,且当 ADC 开始转换最后一个通道时,影子寄存器的值会更新至ADC_CHANY0,这样即可完成动态切换通道。
8、任意通道通道选择寄存器 1(ADC_CHANY1)
注:单周期扫描或连续扫描模式下,硬件会启动 ADC_CHANY0 影子寄存器,在 ADC 未开始工作时,软件写 ADC_CHANY0 的话,也会写到其影子寄存器;在 ADC 工作期间,若更改 ADC_CHANY0 的值,只会更新其影子寄存器,且当 ADC 开始转换最后一个通道时,影子寄存器的值会更新至ADC_CHANY0,这样即可完成动态切换通道。
9、任意通道配置寄存器 (ADC_ANY_CFG)
注:单周期扫描或连续扫描模式下,硬件会启动 ADC_NUM 影子寄存器,在 ADC 未开始工作时,软件写 ADC_NUM 的话,也会写到其影子寄存器;在 ADC 工作期间,若更改 ADC_NUM 的值,只会更新其影子寄存器,且当 ADC 开始转换最后一个通道时,影子寄存器的值会更新至 ADC_NUM,这样即可完成动态切换通道。
10、任意通道控制寄存器 (ADC_ANY_CR)
注:在任意通道模式,且单周期/连续扫描模式下,关闭 ADC 时,必须先禁止 ADC_ADCR 的 ADST位,然后判断 ADC_ADSTA 的 BUSY 位是否为 0,即等到 ADC 转换完成,再禁止 ADC_ANY_CR的 CHANY_MDEN 位。
这一贴介绍了MM32G0001A6T的ADC功能,对于一个SOP8封装的芯片,ADC的功能委实有些复杂了,而且,他只有6、7、8三个引脚是可以作为ADC采样输入脚的,之后我会尽量把它的ADC功能,用程序走一遍,让和我一起学习的人有个参照、对比。