新手上路
- 积分
- 23
- 金钱
- 23
- 注册时间
- 2020-4-22
- 在线时间
- 5 小时
|

楼主 |
发表于 2020-4-27 17:20:01
|
显示全部楼层
#include "stm32f10x.h"
#include <stdio.h>
#include "arm_math.h"
#include "arm_const_structs.h"
void ADC1Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
DMA_InitTypeDef DMA_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
RCC_APB2PeriphResetCmd( RCC_APB2Periph_GPIOB, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
RCC_APB2PeriphResetCmd( RCC_APB2Periph_ADC1, ENABLE);
//ADC³õʼ»¯
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AIN ;
//GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ;
GPIO_Init( GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin= GPIO_Pin_1;
GPIO_Init( GPIOB, &GPIO_InitStructure);
//¸´Î»ADC1
ADC_DeInit(ADC1);
//ADC²ÎÊýÅäÖÃ
ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;
ADC_InitStructure.ADC_ContinuousConvMode=DISABLE ;
ADC_InitStructure.ADC_ScanConvMode=ENABLE;
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right ;
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//Èí¼þ´¥·¢
ADC_InitStructure.ADC_NbrOfChannel=3;
ADC_Init(ADC1,&ADC_InitStructure);
ADC_Cmd(ADC1,ENABLE);
ADC_RegularChannelConfig( ADC1, ADC_Channel_8, 1, ADC_SampleTime_239Cycles5 ); //2 ADC_SampleTime_55Cycles5 ²ÉÑùʱ¼äÓ뾫¶È³ÉÕý±È
ADC_RegularChannelConfig( ADC1, ADC_Channel_9, 2, ADC_SampleTime_239Cycles5 );
ADC_RegularChannelConfig( ADC1, ADC_Channel_16, 3, ADC_SampleTime_239Cycles5 );
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr=(uint32_t)& ADC1->DR;
DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)ADC1Raw;
DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize=FFT_NPT*3;
DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc= DMA_MemoryInc_Disable ;
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_VeryHigh;
DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;
DMA_Init( DMA1_Channel1, & DMA_InitStructure);
DMA_Cmd(DMA1_Channel1, ENABLE);
DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);
ADC_DMACmd(ADC1,ENABLE);
//NVIC_InitTypeDef NVIC_InitStructure;
//ADC_DMARequestAfterLastTransferCmd(ADC1,ENABLE);
NVIC_InitStructure.NVIC_IRQChannel= DMA1_Channel1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
TIM_TimeBaseInitStructure.TIM_Prescaler=125-1;
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;//ĬÈÏÅäÖÃ
TIM_TimeBaseInitStructure.TIM_CounterMode= TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period=60-1;
TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStructure);
TIM_Cmd(TIM1,ENABLE);
TIM_ARRPreloadConfig(TIM1,ENABLE);
NVIC_InitStructure.NVIC_IRQChannel=TIM1_UP_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure); //Æô¶¯ÖжÏ
TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);
ADC_TempSensorVrefintCmd(ENABLE);
}
float temperature;
void ADC1process(void)
{
uint16_t i;
if(DmaDataReadyFlag==SET)
{
DmaDataReadyFlag=RESET;
temperature=(ADC1Raw[0][2]*3.3/4096-0.76f)/(2.5f*0.001f)+25;
for(i=0;i<256;i++)
{
fftInput[i*2]=ADC1Raw[0];
fftInput[i*2+1]=0;
}
arm_cfft_f32(&arm_cfft_sR_f32_len256, fftInput, 0, 1);
//fftOutput[0]/FFT_NPT*3.3f/4096;
//fftOutput[1]*2/FFT_NPT*3.3f/4096;
//fftOutput[2]*2/FFT_NPT*3.3f/4096;
arm_cmplx_mag_f32(fftInput, fftOutput, FFT_NPT); //¼ÆËã·ùÖµ
//arm_cmplx_mag_f32(fftOutput[0]/FFT_NPT*3.3f/4096;, fftOutput, FFT_NPT);
}
} |
|