STM32 关于ADC采交直流问题探讨(一)

发布者:lidong4069最新更新时间:2019-05-30 来源: eefocus关键字:STM32  ADC  采交直流 手机看文章 扫描二维码
随时随地手机看文章

前沿

关于STM32采样问题,相信很多人曾遇到过这样的问题,无论是关于ADC底层相关的配置还是ADC采样方案的抉择,或者是ADC软硬件滤波算法,这里博主就自己曾做过的训练题为引申,探讨ADC采样过程中的问题。


1.ADC的认识

1.1 ADC初始化参数

/* Exported types ------------------------------------------------------------*/


/**

  * @brief   ADC Init structure definition  

  */

typedef struct

{

  uint32_t ADC_Resolution;                                 /*!< Configures the ADC resolution dual mode. This parameter can be a value of @ref ADC_resolution */                                   

  FunctionalState ADC_ScanConvMode;             /*!< Specifies whether the conversion is performed in Scan (multichannels)or Single (one channel) mode.

                                                                                   This parameter can be set to ENABLE or DISABLE */

  FunctionalState ADC_ContinuousConvMode;  /*!< Specifies whether the conversion is performed in Continuous or Single mode.

                                                                                   This parameter can be set to ENABLE or DISABLE. */

  uint32_t ADC_ExternalTrigConvEdge;          /*!< Select the external trigger edge and enable the trigger of a regular group.

                                                                           This parameter can be a value of

                                                                       @ref ADC_external_trigger_edge_for_regular_channels_conversion */

  uint32_t ADC_ExternalTrigConv;                  /*!< Select the external event used to trigger the start of conversion of a regular group.

                                                                           This parameter can be a value of

                                                                       @ref ADC_extrenal_trigger_sources_for_regular_channels_conversion */

  uint32_t ADC_DataAlign;                 /*!< Specifies whether the ADC data  alignment is left or right. This parameter can be

                                                                       a value of @ref ADC_data_align */

  uint8_t  ADC_NbrOfConversion;           /*!< Specifies the number of ADC conversions  that will be done using the sequencer for

                                                                       regular channel group.This parameter must range from 1 to 16. */

}ADC_InitTypeDef;



涉及的相关参数:ADC分辨率(6/8/10/12位)、扫描或非扫描模式、连续或不连续转换、触发方式、对齐方式等。 

       这里值得注意的是规则组转化序列不能超过16。


1.2 ADC通用初始化参数

/**

  * @brief   ADC Common Init structure definition  

  */

typedef struct

{

  uint32_t ADC_Mode;                      /*!< Configures the ADC to operate in

                                               independent or multi mode.

                                               This parameter can be a value of @ref ADC_Common_mode */                                              

  uint32_t ADC_Prescaler;                 /*!< Select the frequency of the clock

                                               to the ADC. The clock is common for all the ADCs.

                                               This parameter can be a value of @ref ADC_Prescaler */

  uint32_t ADC_DMAAccessMode;             /*!< Configures the Direct memory access

                                              mode for multi ADC mode.

                                               This parameter can be a value of

                                               @ref ADC_Direct_memory_access_mode_for_multi_mode */

  uint32_t ADC_TwoSamplingDelay;          /*!< Configures the Delay between 2 sampling phases.

                                               This parameter can be a value of

                                               @ref ADC_delay_between_2_sampling_phases */


}ADC_CommonInitTypeDef;



这里涉及相关ADC单独/多重模式选择,两采样阶段采样间隔,DMA使能/失能,ADC分屏系数(注意ADC的时钟频率不超过36Mhz)


1.3 ADC相关配置库函数

/*  Function used to set the ADC configuration to the default reset state *****/  

void ADC_DeInit(void);


/* Initialization and Configuration functions *********************************/

void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);

void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct);

void ADC_CommonInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct);

void ADC_CommonStructInit(ADC_CommonInitTypeDef* ADC_CommonInitStruct);

void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);


/* Analog Watchdog configuration functions ************************************/

void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog);

void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold,uint16_t LowThreshold);

void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel);


/* Temperature Sensor, Vrefint and VBAT management functions ******************/

void ADC_TempSensorVrefintCmd(FunctionalState NewState);

void ADC_VBATCmd(FunctionalState NewState);


/* Regular Channels Configuration functions ***********************************/

void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);

void ADC_SoftwareStartConv(ADC_TypeDef* ADCx);

FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx);

void ADC_EOCOnEachRegularChannelCmd(ADC_TypeDef* ADCx, FunctionalState NewState);

void ADC_ContinuousModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);

void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number);

void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);

uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);

uint32_t ADC_GetMultiModeConversionValue(void);


/* Regular Channels DMA Configuration functions *******************************/

void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState);

void ADC_DMARequestAfterLastTransferCmd(ADC_TypeDef* ADCx, FunctionalState NewState);

void ADC_MultiModeDMARequestAfterLastTransferCmd(FunctionalState NewState);


/* Injected channels Configuration functions **********************************/

void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);

void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length);

void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset);

void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv);

void ADC_ExternalTrigInjectedConvEdgeConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConvEdge);

void ADC_SoftwareStartInjectedConv(ADC_TypeDef* ADCx);

FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx);

void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);

void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);

uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel);

[1] [2]
关键字:STM32  ADC  采交直流 引用地址:STM32 关于ADC采交直流问题探讨(一)

上一篇:STM32 关于ADC采交直流问题探讨(二)
下一篇:STM32F4开发板----ADC(005)

推荐阅读最新更新时间:2024-11-12 02:59

STM32按键控制灯
/*---------------------------------------------------------------------------------- 文件名称:控制LED2,LED3闪烁 硬件平台:STM32F103 开发板 作者 :求是 固件库 :V3.5 -----------------------------------------------------------------------------------*/ /* Includes ------------------------------------------------------------------*/ #include st
[单片机]
stm32看门狗的使用
为什么使用看门狗 事情很简单先前做的一款采集数据的产品不知道为何异常,陷入死循环然后“死机”,分析了很多次,没发现原因,但是每次重新上点后就能正常采集到数据。后来找到了解决方法:看门狗!目的是当程序走入死循环或者硬件异常时,可以自动复位,这样就可以得到跟重新上电后差不多的效果了。 我使用的平台:stm32f103系列单片机 使用的烧写调试模式:Jlink SWD 模式。 使用 STM32 官方模板库。 ST 系列单片机看门狗分为两种: 1.独立看门狗,2.窗口看门狗。 独立看门狗: 可参看RM(reference Manual)的Independent watchdog (IWDG) 当然,只是
[单片机]
<font color='red'>stm32</font>看门狗的使用
基于SAR ADC的欠采样应用和技术(一)
传统上,欠采样都是用在需要对奈奎斯特频率以上的一系列非基带信号进行采样的通信应用中。这些信号的带宽小于采样系统的奈奎斯特速率。因此,在用带通滤波器限制这些系统的带宽,并且已知采样系统的奈奎斯特速率和目标信号带宽的条件下,我们可以重构这些特殊情况下的输入信号,而不会造成实际信息的损失。这就是所谓的奈奎斯特-香农采样定理。然而,在通信系统以外,还有一些应用可以利用ADC欠采样来实现系统性能目标。 逐次逼近型寄存器(SAR)模数转换器(ADC)一般不具备上一段所述系统要求的带宽和采样速率。然而,相比其他ADC架构,SAR ADC的确具有显著的功耗、尺寸、动态范围和精度优势。对于那些精确的频率知识并不重要并且用户主要关注幅度和
[模拟电子]
基于SAR <font color='red'>ADC</font>的欠采样应用和技术(一)
STM32驱动AT24CXX系列芯片
AT24Cxx系列EEPROM是由美国Mcrochip公司出品,1-512K位的支持I2C总线数据传送协议的串行CMOS E2PROM,可用电擦除,可编程自定时写周期(包括自动擦除时间不超过10ms,典型时间为5ms)的。串行E2PROM一般具有两种写入方式,一种是字节写入方式,还有另一种页写入方式。允许在一个写周期内同时对1个字节到一页的若干字节的编程写入,1页的大小取决于芯片内页寄存器的大小。其中,AT24C01具有8字节数据的页面写能力,AT24C02/04/08/16具有16字节数据的页面写能力,AT24C32/64具有32字节数据的页面写能力 AT24CXX的驱动是基于IIC的,在基本的IIC上加入了一些通讯协议,具体如
[单片机]
<font color='red'>STM32</font>驱动AT24CXX系列芯片
一个简单逆向stm32固件程序的实例分享
本文主要跟大家分享一个简单逆向stm32固件程序的实例,为了让大家在一款成熟的产品中去考虑加密这一块的技术,不然分分钟被别人copy! 1、情景再现 咬金,你们公司固件程序有加密处理吗 ? 额~,算了吧,我们公司的单片机程序炒鸡简单的,还加啥子密。 你这想法不对,假如产品卖得很好,如果没有任何加密措施,那岂不人家随便复制售卖。 没关系吧,反正他们没源码,应该也没那么容易复制吧 一点加密都没有,盗取还是比较简单的。 我才不信~~ 那行,把你的板子给我,不用你的源码,跟你把波特率改了! 直接读取固件 这里以stm32单片机进行演示,如果MCU没有做flash读取或者熔断保护,则可以通过jlink等烧写工具直接读取其Flash上的固
[单片机]
一个简单逆向<font color='red'>stm32</font>固件程序的实例分享
STM32使用SWD默认管脚PA13 PA14
前天在STM32一个项目开发时,遇到了一个问题即想使用STM32的SWD默认管脚PA13或者PA14,当时使用的单片机型号为STM32F103VET6,该单片机为100pin单片机,这么多的管脚按理说一般的应用不会出现使用这么的管脚的,但是,在绘制原理图和设计PCB时并未将全部的引脚引出,到最后焊好后可供扩展的IO就只有这个PA13 PA14了,所以就只能使用这个两个IO口了。 实际使用这个两个IO口十分简单,但考虑到很多人没有试过,且肯定和我开始一样存在一个疑问且不敢轻易尝试,那就是:将这个SWD改成普通IO口后,我用SWD方式还能烧写程序么?单片机会不会锁死? 首先,先讲述下怎样将这个SWD端口做为普通IO,总共
[单片机]
C语言基础知识点
01 位操作 下面我们先讲解几种位操作符,然后讲解位操作使用技巧。C语言支持如下6中位操作: 六种位操作 下面我们想着重讲解位操作在单片机开发中的一些实用技巧。 1. 1 在不改变其他位的值的状况下,对某几个位进行设值。 这个场景在单片机开发中经常使用,方法就是先对需要设置的位用&操作符进行清零操作,然后用 | 操作符设值。 比如我要改变GPIOA的状态,可以先对寄存器的值进行&清零操作:63ee23c4-ff45-11ed-90ce-dac502259ad0.png 然后再与需要设置的值进行|或运算: 640e261a-ff45-11ed-90ce-dac502259ad0.png 1.2 移位操作提高代码的可读性。 移位
[单片机]
C语言基础知识点
STM32知识:什么是SYSTICK 作用是什么
什么是SYSTICK: 这是一个24位的系统节拍定时器system TIck TImer,SysTIck,具有自动重载和溢出中断功能,所有基于Cortex_M3处理器的微控制器都可以由这个定时器获得一定的时间间隔。 作用: 在单任务引用程序中,因为其架构就决定了它执行任务的串行性,这就引出一个问题:当某个任务出现问题时,就会牵连到后续的任务,进而导致整个系统崩溃。要解决这个问题,可以使用实时操作系统(RTOS). 因为RTOS以并行的架构处理任务,单一任务的崩溃并不会牵连到整个系统。这样用户出于可靠性的考虑可能就会基于RTOS来设计自己的应用程序。这样SYSTICK存在的意义就是提供必要的时钟节拍,为RTOS的任务调度提供
[单片机]
<font color='red'>STM32</font>知识:什么是SYSTICK 作用是什么
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved