• 大小: 6KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-09
  • 语言: 其他
  • 标签: ADC  STM32  

资源简介

stm32f4系列ADC四路采集,主从ADC模式交替转变,实测可行,资源大家一起分享,研究时间过长!

资源截图

代码片段和文件信息

#include “stm32f4xx.h“
#include “BSP_ADC.h“

#define ADC_DR_ADDRESS    ((uint32_t)0x40012308)
#define ADC_BUF_SIZE 4
__IO u16 aADCConvertedValue[ADC_BUF_SIZE];

//初始化ADC    
void _BSP_ADC_Init()
{

ADC_CommonInitTypeDef ADC_CommonInitStructure ;
ADC_InitTypeDef       ADC_InitStructure;
DMA_InitTypeDef       DMA_InitStructure;

DMA_DeInit(DMA2_Stream0);

while (DMA_GetCmdStatus(DMA2_Stream0) != DISABLE)
{
}

/* DMA2 Stream0 channel2 configuration **************************************/
DMA_InitStructure.DMA_Channel = DMA_Channel_0;  
DMA_InitStructure.DMA_PeripheralbaseAddr = (uint32_t)ADC_DR_ADDRESS;
DMA_InitStructure.DMA_Memory0baseAddr = (uint32_t)aADCConvertedValue;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
DMA_InitStructure.DMA_BufferSize = ADC_BUF_SIZE;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable;         
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
DMA_Init(DMA2_Stream0 &DMA_InitStructure);
DMA_Cmd(DMA2_Stream0 ENABLE);

RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1ENABLE);   //ADC1复位
RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1DISABLE); //复位结束  

RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC2ENABLE);   //ADC2复位
RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC2DISABLE); //复位结束  

ADC_CommonInitStructure.ADC_Mode = ADC_DualMode_RegSimult;//双通道模式
ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;//两个采样阶段之间的延迟5个时钟
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_1; //DMA
ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div8;//预分频4分频。ADCCLK=PCLK2/8=168/8=21MhzADC时钟最好不要超过36Mhz 
ADC_CommonInit(&ADC_CommonInitStructure);//初始化

ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12位模式
ADC_InitStructure.ADC_ScanConvMode = ENABLE;//扫描模式
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//连续转换
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//禁止触发检测,使用软件触发
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐
ADC_InitStructure.ADC_NbrOfConversion = 2;//  2个转换在规则序列中 也就是只转换规则序列2

ADC_Init(ADC2 &ADC_InitStructure);//ADC初始化

/* ADC2 regular channel5 configuration **************************************/
ADC_RegularChannelConfig(ADC2 ADC_Chann

评论

共有 条评论