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 ----------------
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』