×
单片机 > 单片机程序设计 > 详情

STM32定时TIM2触发ADC采样,使用DMA保存结果

发布时间:2020-08-26 发布时间:
|

1.adc.h文件

//ADC-------------------------------------------------------------------------//

#ifndef __EVAL_ADC_H

        #define __EVAL_ADC_H


// Includes ------------------------------------------------------------------//

        #include "stm32f10x.h"

        #include "eval.h"

       

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

        typedef struct

        {

                GPIO_TypeDef*  io_gpio_port;

                const uint16_t io_gpio_pin;

                const uint32_t io_gpio_clk;

                const uint8_t  adc_channel;

                const uint8_t  adc_sample;

        }ADC_CONFIG_STRUCT;

// Exported constants --------------------------------------------------------//

// Exported macro ------------------------------------------------------------//

// Exported define -----------------------------------------------------------//

        #define ADC1_DR_Address    ((uint32_t)0x4001244C)

        //ADC_DR(ADC规则数据寄存器),偏移量=0x4c  ADC1(0x40012400-0x400127ff)

        //so ADC1_DR_Address=0x40012400+0x4c

       

        #define ADC_USE_DMA              1//仅使用DMA方式,才能同时进行多路采样

        #define ADC_USE_TIM              1//=1定时器触发扫描,=0为连续扫描

       

//ADC输入        PA0

        #define ADCn                     3

       

        #define ADC_1                                IO1 //信号1

        #define ADC_2                                IO2 //信号2

        #define ADC_3                                IO3 //信号3

#if PLATFORM_PKT

        #define ADC_1_PIN                        GPIO_Pin_1

        #define ADC_1_GPIO_PORT                GPIOA

        #define ADC_1_GPIO_CLK                RCC_APB2Periph_GPIOA  

        #define ADC_1_CHANNEL                ADC_Channel_1

        #define ADC_1_SAMPLE                ADC_SampleTime_239Cycles5

       

        #define ADC_2_PIN                        GPIO_Pin_0

        #define ADC_2_GPIO_PORT                GPIOA

        #define ADC_2_GPIO_CLK                RCC_APB2Periph_GPIOA  

        #define ADC_2_CHANNEL                ADC_Channel_0

        #define ADC_2_SAMPLE                ADC_SampleTime_239Cycles5

       

        #define ADC_3_PIN                        GPIO_Pin_2

        #define ADC_3_GPIO_PORT                GPIOA

        #define ADC_3_GPIO_CLK                RCC_APB2Periph_GPIOA  

        #define ADC_3_CHANNEL                ADC_Channel_2

        #define ADC_3_SAMPLE                ADC_SampleTime_239Cycles5

       

        #define ADC_4_PIN                        GPIO_Pin_3

        #define ADC_4_GPIO_PORT                GPIOA

        #define ADC_4_GPIO_CLK                RCC_APB2Periph_GPIOA  

        #define ADC_4_CHANNEL                ADC_Channel_3

        #define ADC_4_SAMPLE                ADC_SampleTime_239Cycles5

       

        #define ADC_5_PIN                        GPIO_Pin_1

        #define ADC_5_GPIO_PORT                GPIOA

        #define ADC_5_GPIO_CLK                RCC_APB2Periph_GPIOA  

        #define ADC_5_CHANNEL                ADC_Channel_1

        #define ADC_5_SAMPLE                ADC_SampleTime_239Cycles5

       

        #define ADC_6_PIN                        GPIO_Pin_1

        #define ADC_6_GPIO_PORT                GPIOA

        #define ADC_6_GPIO_CLK                RCC_APB2Periph_GPIOA

        #define ADC_6_CHANNEL                ADC_Channel_1

        #define ADC_6_SAMPLE                ADC_SampleTime_239Cycles5//ADC_SampleTime_7Cycles5//

#else

        #define ADC_1_PIN                        GPIO_Pin_0

        #define ADC_1_GPIO_PORT                GPIOA

        #define ADC_1_GPIO_CLK                RCC_APB2Periph_GPIOA  

        #define ADC_1_CHANNEL                ADC_Channel_0

        #define ADC_1_SAMPLE                ADC_SampleTime_239Cycles5//ADC_SampleTime_7Cycles5//

#endif

//----------------------------------------------------------------------------//

       

/*

        #define ADC16_PIN                        GPIO_Pin_0

        #define ADC16_GPIO_PORT                GPIOA

        #define ADC16_GPIO_CLK                RCC_APB2Periph_GPIOA  

        #define ADC16_CHANNEL                ADC_Channel_16//通道16(内部温度)

        #define ADC16_SAMPLE                ADC_SampleTime_239Cycles5

       

        #define ADC17_PIN                        GPIO_Pin_0

        #define ADC17_GPIO_PORT                GPIOA

        #define ADC17_GPIO_CLK                RCC_APB2Periph_GPIOA  

        #define ADC17_CHANNEL                ADC_Channel_17//通道17(内部1.2v参照电压)

        #define ADC17_SAMPLE                ADC_SampleTime_239Cycles5

*/




// External variables --------------------------------------------------------//

        extern volatile uint16_t ADC_Value[ADCn];

        extern uint16_t ADC_ConvertedValue[ADCn];

//        extern uint16_t ADC_ConvertedValue[3];

//        extern volatile uint8_t adc_dma_simple_ok;

// Exported functions ------------------------------------------------------- //

        void ADC_Configuration(void);

        uint16_t Get_ADC_Converted_Values(uint8_t channel);

        void ADC_Sample_Frequency_Set(u32 Frequency);

       

#endif

//----------------------------------------------------------------------------//

2.adc.c

/*

规则组采集多路电压时,使用DMA方式,且必须启用扫描模式,否则只能单路采样;

ADC时钟,必须<14MHz;



ADC的速度由2个参数决定,它是采样时间和转换时间之和:

TCONV = 采样时间 + 12.5个ADC时钟周期

采样时间共有8种选择:1.5、7.5、13.5、28.5、41.5、55.5、71.5和239.5;

若ADC的时钟频率=14MHz,则最高ADC的采样频率=14/(12.5+1.5)=1MHz;最低=14/(12.5+239.5)=55.56kHz

若ADC的时钟频率=12MHz,则最低ADC的采样频率=12/(12.5+239.5)=47.62kHz;

*/


// Includes ----------------


关键字:STM32  定时  TIM2触发  ADC采样  DMA  保存结果

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
如何为单片机选择合适的负载电容