关于STM32的ADC的一些重要特点需要记住:
1)STM32F103系列至少有2个ADC,这些ADC可以独立使用,也可以使用双重模式(提高采样率);
2)STM32的ADC是12位逐次逼近型的模数转换器,一共有18个通道,可以测量16个外部信号和2个内部信号源;
3)每个通道的ADC可以在单次、连续、扫描或者间断模式下进行;
4)前面讲过STM32的ADC是12位的,结果存储在16位的数据寄存器中,有4位用不到,所以ADC存在左对齐或右对齐的方式;
5)模拟看门狗允许应用程序检测输入电压是否超出用户定义的高低阈值;
6)STM32的ADC最大的转换速率为1MHz,也就是说最快转换时间为1us,为了保证ADC转换结果的准确性,ADC的时钟最好不超过14M。
规则组和注入组
STM32参考手册里ADC的框图很大,我把它分开来总结(不然放不下),研究内部结构之后感觉STM32的ADC还是挺强大的;
刚接触ADC时首先让人不好理解的地方是“注入组”“规则组”,我也从框图里把这部分截出来了,这部分的解释网上有很多,大部分都引用了那个测量温度的例子,大概意思就是有一些温度是我们要长期采集的(就用规则组),偶尔也要临时测量一些其他温度(就用注入组)。STM32的ADC分为这两个组也是考虑到现实应用的需求,有一些是常用采集,有一些是特殊采集。
接下来看看输入端口,有16路外部信号端口接在GPIO端口上,还有两路是内部信号(芯片内部自带的温度传感器和参考电平)。信号源都会进入一个多路选择开关(与之前整理的ADC原理正好对应),从而选择进入后面的通道。
ADC的模拟看门狗
STM32的ADC中增加了模拟看门狗主要是出于对安全性的考虑,看门狗可以监测输入信号的电压,我们可以设置最高和最低电压阈值,如果输入的信号电压超出了阈值就会产生中断。有些突发状况下,电压会突然下降,这时看门狗能够迅速的作出反应产生中断,便于CPU及时处理(保存数据或者报警等)。看门狗的监测是不经过ADC,反应速度就要快得多。
ADC的触发
STM32的ADC的触发可以是外部触发(例如按键或者其他控制信号之类),也可以是内部触发(定时器触发)
ADC的转换模式
1 单次转换模式:ADC只执行一次转换;
2 连续转换模式:转换结束之后马上开始新的转换;
3 扫描模式:ADC扫描被规则通道和注入通道选中的所有通道,在每个组的每个通道上执行单次转换。在每个转换结束时,这一组的下一个通道被自动转换。如果设置了CONT位(开启了连续转换模式),转换不会在选择组的最后一个通道上停止,而是再次从选择组的第一个通道继续转换。
4 间断模式:由触发信号启动新一轮的转换,直到转换完成为止
关键字:stm32 ADC 知识总结
引用地址:
stm32 ADC知识总结(二)
推荐阅读最新更新时间:2024-11-09 15:53
在家没有硬件开发板怎么调试STM32?
01前言 在学习51单片机的时候,经常会使用keil+protues的方式来做一些实验,这样的模拟仿真为我们节省了很多硬件和时间成本,可以更直观的看到代码的执行过程。 那么当切换到stm32系列单片机的时候,有些版本的protues可能不支持了(有的版本也支持STM32仿真),但是keil的模拟功能还是有很大的用处,例如stm32f103单片机,在keil中可以实现很好的模拟效果。 我们可以在其中使用中断、定时器、PWM等功能,可以观测到GPIO的输出情况。然而keil对stm32系列单片机不是很好的支持,如果换一个型号,你会发现完全无法模拟!!! 02配置keil,模拟stm32系列单片机 我们可以通过修改某些地方来实现ke
[单片机]
STM32_ TIM输出PWM波形
前言 今天讲解“STM32F103 TIM输出PWM波形”,提供的软件工程支持最大输出18MHz的PWM波形,函数接口只有两个参数:频率Freq和 占空比Dutycycle。 定时器的功能很强大,今天讲解的PWM属于定时器中比较输出的功能,难度算一般吧(懂了的人觉得很简单),因为使用了比较的功能。 PWM在实际应用中特别广泛,可能在校的学生不是很了解,但对于很多工作的人来说PWM的应用基本上遍布整个电子化的时代。对于电子相关专业的学生来说,信号发生器都不陌生,信号发生器就是PWM典型的应用。 本文特点:1.提供讲解的软件工程; 2.图片代码比直接贴出源代码容易阅读。 本着免费分享的原则,将讲解的工程源代码分享给大家,还望看到的
[单片机]
使用STM32调试FMSDR模块及解调FM电台(2)
2. 调试整体思路 当我们使用FPGA或者STM32模块配合FMSDR模块使用的时候,需要从零开始调试这个电路,逐步完成:硬件好坏判断、8027和MSI001寄存器控制、波形采集、FM解调、滤波器设计和声音回放,这需要我们有一个清晰的调试思路:使用已知来调试未知。 很多同学一上来就调试MSI001收电台,几乎都收到的都是杂音,看到毫无规律的IQ信号无从下手,因为这里可能出错的地方很多:SPI时序错误,寄存器配置错误,ADC配置错误,解调算法错误,滤波算法错误,抽取算法错误,DAC程序错误等等,任意一步出问题都会导致最终结果不对。 更难受的是,即使是正常解调的电台,无论是IQ波形,解调后波形,还是滤波后波形,都是杂乱无章的(如下图)
[单片机]
ADC0832模数转换MSP430单片机程序+电路图
下面是电路图: ADC0832封装图 ADC0832与单片机连接图 ADC0832时序图 程序源码下载: #include msp430f2121.h #define DO (P1IN&BIT7) #define uchar unsigned char #define uint unsigned int /*********************************************** sbit cs=P2^0; sbit clk=P2^1; sbit DI=P2^2; sbit DO=P2^6; ***************************************
[单片机]
STM32标准库编程之LED闪烁
【1】工程截图 【2】代码解读 有了前面文章的基础,工程建立我不再赘述,我们来看主函数所在的源文件(这里完全可以把开头的宏定义和函数声明放到同名的头文件中)。 这里我只引用了delay.h和sys.h 可以看到这三个文件放到一个文件夹里,说明他们三个比较特殊,这里就详细介绍一下(辅助编程文件夹里的开发指南里说的很详细)。SYSTEM 文件夹下包含了 delay、 sys、 usart 等三个文件夹。分别包含了 delay.c、 sys.c、 usart.c及其头文件。通过这 3 个 c 文件,可以快速的给任何一款 STM32F1 构建最基本的框架。使用起来是很方便的。 delay 延时的编程思想: CM3 内核的处理
[单片机]
STM32入门系列-使用C语言封装寄存器
前面介绍了存储器映射、寄存器和寄存器映射,这些都是为了介绍使用 C语言封装寄存器做铺垫。这里我们通过一个实例来对 C 语言封装寄存器进行介绍。 具体实例:控制 GPIOC 端口的第 0 管脚输出一个低电平。首先我们需要知道GPIOC 端口外设是挂接在哪个总线上的,然后根据总线基地址和本身的偏移地址得到 GPIOC 外设基地址,最后通过这个外设基地址得到里面各种寄存器基地址。 总线和外设基地址封装 根据寄存器的概念,我们可以使用 C 语言中的宏定义对寄存器进行定义。具体代码如下: //定义外设基地址 #define PERIPH_BASE ((unsigned int)0x40000000) 1) //定义 APB2 总线基地址
[单片机]
STM32中 一些类型的别名
typedef signed char int8_t; typedef signed short int int16_t; typedef signed int int32_t; typedef signed __INT64 int64_t; /* exact-width unsigned integer types */ typedef unsigned char uint8_t; typedef unsigned short int uint16_t; typedef int uint32_t; typedef unsigned __INT64 uint64_t;
[单片机]
关于基于STM32系列单片机的DMD投影仪的驱动电路的相关设计
DLP投影技术是应用美国德州仪器公司开发的数字微镜元件——DMD(Digital Micromirror Device)作为主要关键处理元件以实现数字光学处理过程的技术。DLP显示的色彩清晰度高、艳丽、细腻、逼真,且为全数字显示即可靠性极高,能在各类产品(如大屏幕数字电视、公司/家庭/专业会议投影机和数码相机(DLP Cinema))中提供最佳图像效果。目前,大部分的家用或商用DLP投影机都采用了单片结构,使得其便于移动携带,因而得到越来越广泛的应用。在目前应用发展的基础上,又对其结构的精简性、携带的方便性提出了更高的要求。传统的DLP投影仪是通过DVI接口接收外部信号,并且经过信号转换传送给DLP控制器来控制DLP的显示,占用的
[单片机]