ADC的位数决定了ADC的精度,有8位的,12位的,16位的等。
还有一个很重要的参数就是转换时间。
STM32f103RBT6有2个ADC控制器。128KFlash,20KRAM
每一个ADC控制器都有多个通道,例如ADC1的外部通道有16个,可以理解为有一个开关分别连接各个通道。
每个通道的采样间隔和采样时间都可以设置。
三。ADC各通道与IO管脚对应表
一般负参考电压接地,正参考电压接3.3V。
模拟输入电压不能超过3.3V,否则输入引脚可能被烧毁。
ADC框图
Vref+连接到VDDA,Vref-连接到VSSA。
最多4个通道连接到注入通道,最多16个通道连接到规则通道。
什么是规则通道:相当于正常运行的程序,最多16个通道,规则通道和它的转换顺序在ADC_SQRx中选择,规则组转换的总数应写入ADC_SQR1寄存器的L[3:0]中。
规则通道转换的结果保存在规则通道中。
什么是注入通道:相当于中断,最多4个注入通道。注入组和它的转换顺序在ADC_JSQR寄存器中选择,注入组里转换的总数应写入ADC_JSQR寄存器的L[1:0]中。
注入通道转换的结果保存在注入通道的数据寄存器中。
规则通道VS注入通道
四。单次转换VS连续转换
单次转换完成后不会自动转到另外一个通道的转换,需要手动设置才能启动,连续转换是ADC转换结束后马上就自动启动另一次转换。
扫描模式
只在最后一个通道转换完毕后才会产生EOC或JEOC中断。一般通过DMA读取数据。
五。ADC中断
六。ADC的时钟配置
例如:系统时钟是72M,就要选择6分频或8分频,6分频为12M。
七。ADC_CR1寄存器
这里我们一般选择独立模式。
八。ADC_CR2寄存器
九。对齐方式
因为STM32为12为AD,寄存器为16位,所以需要选择对齐方式。
本次实验中选择的软件转换,也就是19:17位设置为111.
十。ADC_SMPR1寄存器
十一。ADC_SMPR2寄存器
ADC的时钟已经有RCC_CFGR寄存器设置。
ADC_SMPR1和ADC_SMPR2寄存器用来设置通道0到通道17的采样时间。ADC每个通道都可以独立设置采样时间。
注:应该是最小转换时间为1us
最小的转换时间是1us。
十二。ADC_SQR1,SQR2,SQR3规则序列寄存器
设置规则通道序列的长度,第一个转换对应哪一个通道,第二个转换对应哪个通道等等。
十三。ADC_JSQR注入系列寄存器
十四。ADC_DR 规则通道数据寄存器
我们这里主要用到低16位。
十五。ADC_SR 状态寄存器
十六。ADC常用的库函数
例:
关键字:STM32 ADC
引用地址:
STM32之ADC原理
推荐阅读最新更新时间:2024-03-16 16:25
MSP430 ADC12采样分析
AD部分主要配置ADC12模块的时钟、参考源、采样通道、采样模式、存储和采样保持。 我就一个部分一个部分来 第一个是ADC12模块的时钟,这个是模块运行时的时钟,跟采样定时器是两个概念,曾经我有一段时间被迷惑住了。这个由ADC12CTL1里面的ADC12SSEL和ADC12DIV配置,可以选择ADC12OSC/ACLK/SMCLK/MCLK,TI例程里面好像都是选择的ADC12OSC,这个是5MHZ,不过频率容易受外界影响而改变。这个部分配置好了就得到了ADC12CLK。 第二个参考源,这个部分可以用单片机的参考模块控制,也可以用ADC12模块控制,REFCTL0 &= ~REFMSTR;这句就是设置ADC模块直
[单片机]
STM32入门系列-使用C语言封装寄存器
前面介绍了存储器映射、寄存器和寄存器映射,这些都是为了介绍使用 C语言封装寄存器做铺垫。这里我们通过一个实例来对 C 语言封装寄存器进行介绍。 具体实例:控制 GPIOC 端口的第 0 管脚输出一个低电平。首先我们需要知道GPIOC 端口外设是挂接在哪个总线上的,然后根据总线基地址和本身的偏移地址得到 GPIOC 外设基地址,最后通过这个外设基地址得到里面各种寄存器基地址。 总线和外设基地址封装 根据寄存器的概念,我们可以使用 C 语言中的宏定义对寄存器进行定义。具体代码如下: //定义外设基地址 #define PERIPH_BASE ((unsigned int)0x40000000) 1) //定义 APB2 总线基地址
[单片机]
STM32开发笔记23: 使用__weak修饰符
单片机型号:STM32L053R8T6 在 HAL 库中,很多回调函数前面使用__weak 修饰符。 weak 顾名思义是“弱”的意思,所以如果函数名称前面加上__weak 修饰符,我们一般称这个函数为“弱函数”。 加上了__weak 修饰符的函数,用户可以在用户文件中重新定义一个同名函数,最终编译器编译的时候,会选择用户定义的函数,如果用户没有重新定义这个函数, 那么编译器就会执行__weak 声明的函数,并且编译器不会报错。 举个例子: 我们打开工程模板,找到并打开文件stm32f4xx_hal.c 文件,里面定义了一个函数 HAL_MspInit,定义如下: __weak void HAL_MspInit(v
[单片机]
移植STM32固件库用于HID双向通信
USB的应用中HID类是比较常见的方式。通过修改STM32 USB固件库V4.0的JOYSTICK应用,我们实现一个双向USB通信。 一、移植 使用STM32源程序为点亮LED灯程序。 首先将USB固件库中有用的函数复制到源函数中,建立LIB文件夹其中放入USB2.0协议函数 建立CFG文件夹放入USB应用函数 将两个文件夹都放到源工程目录下将文件添加进来,设置好,配置好KEIL软件设置。 二、修改文件 1、首先修改platform_config.h函数。 该文件是对于多种芯片对于USB库的支持。我们使用STM32F103ZET6芯片,所以只保留与之相关的ID项,与USB_DISCONNECT线(PG11)的配
[单片机]
【STM32】串口通信基本原理(超基础、详细版)
STM32F1xx官方资料: 《STM32中文参考手册V10》-第25章通用同步异步收发器(USART) 通信接口背景知识 设备之间通信的方式 一般情况下,设备之间的通信方式可以分成并行通信和串行通信两种。它们的区别是: 并、串行通信的区别 并行通信 串行通信 传输原理 数据各个位同时传输 数据按位顺序传输 优点 速度快 占用引脚资源少 缺点 占用引脚资源多 速度相对较慢 串行通信的分类 1、按照数据传送方向,分为: 单工:数据传输只支持数据在一个方向上传输; 半双工:允许数据在两个方向上传输。但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;它不需要独立的接收端和发送端,两
[单片机]
串行输出的12位模数转换器MAX1286–MAX1289
MAX1286–MAX1289是串行输出的12位模拟-数字转换器(ADC),具有成本低、功耗小的特点,采用小型8引脚SOT23封装和8引脚TDFN封装。MAX1286/MAX1288采用+5V单电源供电,MAX1287/MAX1289采用+3V单电源供电。这些器件具备逐次逼近ADC,自动关断,快速唤醒(1.4µs)的功能和一个高速3线接口。在150ksps最大采样速率下功耗仅为0.5mW (VDD = +2.7V)。在较低的采样速率下,转换间隙的AutoShutdown™ (0.2µA)特性能够减小功率消耗。MAX1286/MAX1287提供双通道单端工作模式,接受输入信号范围为0到基准VREF。MAX1288/MAX1289接受
[模拟电子]
Proteus仿真STM32实现--DS18B20和LCD1602显示
proteus仿真stm32103r6,实现18B20温度值在1602上显示,可测量正负温度。程序及仿真工程已上传附件,利用proteus仿真18b20温度为0和-0.1时返回值均为零,新手上路,请多指教。使用proteus8.8版本进行仿真。 原理图 时序 原理图 单片机部分程序如下: #include stm32f10x.h #include bsp-lcd1602.h #include delay.h #include sys.h #include ds18b20.h #include stdio.h #include math.h short tem,tem1; u8 a,b,c,t
[单片机]
stm32单片机待机模式的设计
一 待机模式简介 在stm32的低功耗模式中,待机模式可以实现系统的最低功耗,在这种模式下,只需要2uA左右的电流。 三 待机唤醒程序分析 实验现象: 将程序下载到开发板上后,LED灯会不断地亮灭,当按下KEY2键超过3s时,LED灯灭,标志着单片机进入待机模式,再按下KEY1键,这时唤醒单片机,LED又开始不断地亮灭亮灭。 程序中用到的一些宏定义 #definemacEXTI_GPIO_CLK(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO) #definemacEXTI_GPIO_PORTGPIOC #definemacEXTI_GPIO_PINGPIO_Pin_13 #definem
[单片机]