stm32之ADC应用实例(单通道、多通道、基于DMA)

  • 硬件:STM32F103VCT6
  • 开发工具:Keil uVision4
  • 下载调试工具:ARM仿真器

网上资料很多,这里做一个详细的整合。(也不是很详细,但很通俗)。
所用的芯片内嵌3个12位的模拟/数字转换器(ADC),每个ADC共用多达16个外部通道,2个内部通道。

3个:代表ADC1、ADC2、ADC3(下图是芯片固件库的截图)
这里写图片描述
12位:也叫ADC分辨率、采样精度。先来看看二进制的12位可表示0-4095个数,也就是说转换器通过采集转换所得到的最大值是4095,如:“111111111111”=4095,那么我们怎么通过转换器转换出来的值得到实际的电压值呢?如果我们要转换的电压范围是0v-3.3v的话,转换器就会把0v-3.3v平均分成4096份。设转换器所得到的值为x,所求电压值为y。
那么就有:
这里写图片描述
16个外部通道:简单的说就是芯片上有16个引脚是可以接到模拟电压上进行电压值检测的。16个通道不是独立的分配给3个转换器(ADC1、ADC2、ADC3)使用,有些通道是被多个转换器共用的。首先看看16个通道在固件库的宏定义(写代码要看的):
这里写图片描述
到这里大家可能会有疑问,每个通道到底对应哪个引脚呢?下面先给出部分引脚图:
这里写图片描述
16个通道的引脚都在上面的图中,拿其中的一个进行说明:

ADC123_IN10:字母“ADC”不用多说,“123”代表它被3个(ADC1、ADC2、ADC3)转换器共用的引脚,“10”对应刚才那张宏定义图里面的ADC_Channel_10,这样就能找到每个通道对应的引脚了。

2个内部通道:一个是内部温度传感器,一个是内部参考电压。


在某个项目中要用到芯片里面的AD转换器,那么要怎么写应用代码?(以下是代码讲解)

芯片固件的库函数为我们提供了很多封装好的函数,只要运用它提供的函数接口就可以了,宏观上来讲就搞懂两个事情就行了:

  • 初始化(设置用的哪个引脚、单通道、还是多通道同时转换、是否使用DMA等配置)?
  • 怎么让转换器进行一次数据获取?

以下分别讲述三种不同方式(单通道、多通道、基于DMA的多通道采集)的ADC应用实例:

/*单通道的ADC采集*/
void  Adc_Config(void)
{ 	
    /*定义两个初始化要用的结构体,下面给每个结构体成员赋值*/
	ADC_InitTypeDef ADC_InitStructure; 
	GPIO_InitTypeDef GPIO_InitStructure;
	
	/*
	  使能GPIOA和ADC1通道时钟
	  注意:除了RCC_APB2PeriphClockCmd还有RCC_APB1PeriphClockCmd&#
  • 342
    点赞
  • 1286
    收藏
    觉得还不错? 一键收藏
  • 95
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 95
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值