【STM32F103笔记】8、数据采集之ADC——做个数字电压表吧

咳咳,这一篇来玩一下STM32的ADC(Analog to Digital Converter),也就是可以把输入的模拟量转换为数字量,这样就可以做个电压表了,再加上一些辅助电路,就能够自己做一个万用表了,非常完美。(嗯,这篇我们只做数字电压表~就是这么懒)

从这一篇开始,对STM32内部结构和寄存器的介绍会更加详细一点,要开始深入了解了,感兴趣的朋友还可以对照前几篇自个儿深入了解一下,嘿嘿~ . ~

ADC介绍

打开STM32F103C8T6的数据手册,第一页就对其拥有的外设进行了简单的列举介绍,找到ADC的相关介绍:
在这里插入图片描述
从介绍中可以知道:

  • STM32F103C8T6有2个12位的A/D转换器,支持16个通道,转换时间最小可达1us;
  • A/D转换电压范围是0到3.6V,这个非常重要,不要把超过范围的电压接入电压采集引脚,轻则导致转换结果超出范围,读数不准,严重可能会烧坏引脚;因此在使用ADC进行电压转换的时候,要根据采集的电压范围进行相应的分压设计;
  • 2个ADC可以同步采集,并且可由定时器控制,还具有内部温度传感器;
  • 其它说明等用到的时候再看。
ADC内部结构

在STM32手册中,找到ADC章节,其内部结构图如下(看不清的话请点击放大):
在这里插入图片描述
有几个需要关注的部分:

  • 正中间就是STM32的A/D模块的核心部分——ADC,模数转换器;
  • 左侧上面的红框中:
    • VREF+与VREF-是ADC的参考电压,这个电压的要求是精度高且稳定,由于笔者的最小系统板用的是STM32F103C8T6,引脚数是48,而64引脚及以下的芯片VREF在内部连接到VDDA,仅有100脚以上的芯片才会将VREF引到外部引脚;
    • VDDA和VSSA是ADC的供电电源,在笔者的最小系统板上通过电感电容组成LC滤波电路,与供电VDD连接,提供一个较为稳定的3.3V电源:
      在这里插入图片描述
  • 左侧下面的红框中就是外部电压的输入引脚了(常规的输入引脚),而VDD为3.3V供电电压,因此VREF电压为3.3V,即AD采样转换的电压范围为0~3.3V,而ADC为12位,故采样结果 0 - 4095 对应电压 0 - 3.3V;
  • 在右侧的红框中是ADC所使用的时钟,在进入ADC之前有一个预分频器,而在第二篇中的时钟分析里可知,ADC挂载在APB2总线上,因此APB2总线时钟信号(72MHz)经过这个预分频器最后进入ADC,提供时钟信号,这里注意进入ADC的时钟不能超过14MHz,因此在72MHz的APB2总线时钟下,预分频系数只能设置为8分频或6分频;
  • 在图中还可以看出,ADC还可以用定时器进行控制,并可以触发中断,在这里暂时不用这些功能。
ADC寄存器

了解了ADC的内部结构之后,就要开始对其寄存器进行分析,那么就会问了,我们用的是库开发,为什么还要去看寄存器呢;这里简单说明一下,库开发是为了方便程序的开发,也是建立在寄存器控制之上的,如果不了解相关的寄存器的话,可能会不知道用哪些库函数,并且作为单片机开发,了解其寄存器对后续程序移植等等都有很大的好处。当然,在刚开始看寄存器的时候难免会晕,熟悉了就好了(づ ̄ v ̄)づ

建议大家在开发单片机程序时,用这么个流程:确定相关外设后,先看板子的电路图,确定硬件电路的关系,然后在手册中找对应的外设章节进行了解,然后查看相关寄存器的配置说明,并结合手册中的功能说明进行分析,最后确定程序设计思路,然后就是写程序,最后就到了最重要的Debug,也就是改bug……

1、ADC status register (ADC_SR)

ADC_SR为ADC的状态标志寄存器,提供AD转换中的一些标志:
在这里插入图片描述

  • Bit 31:15:保留位,不需要进行设置,但是必须保持清0;
  • Bit 4 STRT:普通通道AD转换开始标志位,转换开始后由硬件置1,结束后由软件清0;
  • Bit 3 JSTRT:注入通道AD转换开始标志位,同上;
  • Bit 2 JEOC:注入通道AD转换完成标志位,转换完成时硬件置1,由软件清0;
  • Bit 1 EOC:通道AD转换完成标志位,转换完成时硬件置1,由软件清0;
  • Bit 0 AWD:模拟看门狗功能,当AD转换值超过设定的电压范围时置1,由软件清0;
    所谓由软件清0就是在程序中要向该位写入0。

这里Bit 1 EOC可以用于判断AD转换是否完成,若完成就可以读取AD转换的数据了。

2、ADC control register 1 (ADC_CR1)

ADC_CR1是ADC的控制寄存器1,用于对ADC进行设置:
在这里插入图片描述

  • Bit 31:24:保留位,不需要进行设置,但是必须保持清0;
  • Bit 23 AWDEN:普通通道模拟看门狗使能,置1使能,清0禁用;
  • ……
  • Bit 19:16 DUALMOD[3:0]:设置2个ADC的使用方式:
    • 0000 - 独立模式,2个ADC不同时工作;
  • ……
  • Bit 11 DISCEN:普通通道非连续模式设置,置1使能非连续模式,清0禁用;
  • Bit 8 SCAN:当需要采集多路电压数据时,可以使用SCAN模式,扫描模式,置1使能,清0禁用,这里我们不需要使用禁用就可以;
  • ……
  • Bit 5 EOCIE:转换完成触发中断使能位,置1使能,清0禁用,这里我们不需要使用禁用就可以;
  • ……

由于我们只进行一路ADC的采集,只需要用到一个ADC,因此设置成独立模式即可。

3、ADC control register 2 (ADC_CR2)

ADC_CR2是ADC的控制寄存器2,用于对ADC进行设置:
在这里插入图片描述

  • Bit 31:24:保留位,不需要进行设置,但是必须保持清0;
  • Bit 23 TSVREFE:温度传感器使能;
  • Bit 22 SWSTART:普通通道转换开始
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值