adc+dma一路数据的采集,adc可以正常工作,但是数据无法正常传输到上位机,请各位大神帮助。
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
#include "key.h"
#include "adc.h"
#include "dma.h"
uint16_t fvalue[4096];
//u16 fvalue[4096];
int main(void)
{
u16 i,t,m;
float pro;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éèÖÃÏμí3ÖD¶ÏóÅÏ輶·Ö×é2
delay_init(168); //3õê¼»ˉÑóê±oˉêy
uart_init(115200); //3õê¼»ˉ′®¿ú2¨ìØÂêÎa115200
LED_Init(); //3õê¼»ˉLED
LCD_Init(); //3õê¼»ˉLCD½ó¿ú
KEY_Init(); //°′¼ü3õê¼»ˉ
Adc_Init(); //3õê¼»ˉADC
MYDMA_Config(DMA2_Stream0,DMA_Channel_0,(u32)&ADC1->DR,(u32)fvalue);//DMA2,STEAM7,CH4,íaéèÎa′®¿ú1,′æ′¢Æ÷ÎaSendBuff,3¤¶èÎa:SEND_BUF_SIZE.
ADC_DMACmd(ADC1,ENABLE);
MYDMA_Enable(DMA2_Stream0,4096);
ADC_SoftwareStartConv(ADC1);
//fvalue[0]=Get_Adc(10);
//printf("aaa=%d
",fvalue[0]);
while(1)
{
delay_ms(100);
while(pro!=0)
{
if(DMA_GetFlagStatus(DMA2_Stream0,DMA_FLAG_TCIF0)!=RESET)
{
printf("ooookkkkk
");
DMA_ClearFlag(DMA2_Stream0,DMA_FLAG_TCIF0);
break;
}
pro=DMA_GetCurrDataCounter(DMA2_Stream0);//μÃμ½μ±Ç°»1ê£óà¶àéù¸öêy¾Y
printf("%d
",(u16)pro);
pro=1-pro/4096;//μÃμ½°ù·Ö±è
pro*=100; //à©′ó100±¶
}
for(t=0;t<4096;t++)
{
printf("VolVaule[%d]=%d
",t,fvalue[t]);
delay_ms(100);
}
}
}
#include "adc.h"
#include "delay.h"
//3õê¼»ˉADC
void Adc_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_CommonInitTypeDef ADC_CommonInitStructure;
ADC_InitTypeDef ADC_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//ê1ÄüGPIOCê±Öó
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //ê1ÄüADC1ê±Öó
//Ïè3õê¼»ˉADC1í¨μà5 IO¿ú
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//PC2
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;//Ä£Äaêäèë
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;//2»′øéÏÏÂà-
GPIO_Init(GPIOC, &GPIO_InitStructure);//3õê¼»ˉ
RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE); //ADC1¸′λ
RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE); //¸′λ½áêø
ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;//¶àá¢Ä£ê½
ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;//ὸö2éÑù½×¶ÎÖ®¼äμÄÑó3ù5¸öê±Öó
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //DMAê§Äü
ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;//Ô¤·ÖÆμ4·ÖÆμ¡£ADCCLK=PCLK2/4=84/4=21Mhz,ADCê±Öó×îoÃ2»òa3¬1y36Mhz
ADC_CommonInit(&ADC_CommonInitStructure);//3õê¼»ˉ
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//12λÄ£ê½
ADC_InitStructure.ADC_ScanConvMode = DISABLE;//·Çé¨ÃèÄ£ê½
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//á¬Dø×a»»
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//½ûÖ1′¥·¢¼ì2a£¬ê1óÃèí¼t′¥·¢
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_T1_CC1;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//óò¶ÔÆë
ADC_InitStructure.ADC_NbrOfConversion = 1;//1¸ö×a»»Ôú1æÔòDòáDÖD ò2¾íêÇÖ»×a»»1æÔòDòáD1
ADC_Init(ADC1, &ADC_InitStructure);//ADC3õê¼»ˉ
ADC_RegularChannelConfig(ADC1,ADC_Channel_12, 1, ADC_SampleTime_84Cycles );
// ADC_ContinuousModeCmd(ADC1,ENABLE);
ADC_Cmd(ADC1, ENABLE);//¿aÆôAD×a»»Æ÷
ADC_DMACmd(ADC1, ENABLE);
ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);
}
//»ñμÃADCÖμ
//ch: @ref ADC_channels
//í¨μàÖμ 0~16è¡Öμ·¶Î§Îa£oADC_Channel_0~ADC_Channel_16
//·μ»ØÖμ:×a»»½á1û
u16 Get_Adc(u8 ch)
{
//éèÖÃÖ¸¶¨ADCμÄ1æÔò×éí¨μ࣬ò»¸öDòáD£¬2éÑùê±¼ä
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_28Cycles ); //ADC1,ADCí¨μà,480¸öÖüÆú,ìá¸ß2éÑùê±¼ä¿éòÔìá¸ß¾«è·¶è
ADC_SoftwareStartConv(ADC1); //ê1ÄüÖ¸¶¨μÄADC1μÄèí¼t×a»»Æô¶ˉ1|Äü
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//μè′y×a»»½áêø
return ADC_GetConversionValue(ADC1); //·μ»Ø×î½üò»′ÎADC11æÔò×éμÄ×a»»½á1û
}
//»ñè¡í¨μàchμÄ×a»»Ö죬è¡times′Î,è»oóƽ¾ù
//ch:í¨μà±àoÅ
//times:»ñè¡′Îêy
//·μ»ØÖμ:í¨μàchμÄtimes′Î×a»»½á1ûƽ¾ùÖμ
u16 Get_Adc_Average(u8 ch,u8 times)
{
u32 temp_val=0;
u8 t;
for(t=0;t<times;t++)
{
temp_val+=Get_Adc(ch);
delay_ms(5);
}
return temp_val/times;
}
#include "dma.h"
#include "delay.h"
//DMAxμĸ÷í¨μàÅäÖÃ
//ÕaàïμÄ′«êäDÎê½êÇ1춨μÄ,Õaμãòa¸ù¾Y2»í¬μÄÇé¿öà′DT¸Ä
//′ó′æ′¢Æ÷->íaéèÄ£ê½/8λêy¾Y¿í¶è/′æ′¢Æ÷Ôöá¿Ä£ê½
//DMA_Streamx

MAêy¾Yá÷,DMA1_Stream0~7/DMA2_Stream0~7
//chx

MAí¨μàÑ¡Ôñ,@ref DMA_channel DMA_Channel_0~DMA_Channel_7
//par:íaéèμØÖ·
//mar:′æ′¢Æ÷μØÖ·
//ndtr:êy¾Y′«êäá¿
void MYDMA_Config(DMA_Stream_TypeDef *DMA_Streamx,u32 chx,u32 par,u32 mar)
{
DMA_InitTypeDef DMA_InitStructure;
if((u32)DMA_Streamx>(u32)DMA2)//μÃμ½μ±Ç°streamêÇêôóúDMA2»1êÇDMA1
{
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,ENABLE);//DMA2ê±Öóê1Äü
}else
{
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1,ENABLE);//DMA1ê±Öóê1Äü
}
DMA_DeInit(DMA_Streamx);
while (DMA_GetCmdStatus(DMA_Streamx) != DISABLE){}//μè′yDMA¿éÅäÖÃ
/* ÅäÖÃ DMA Stream */
DMA_InitStructure.DMA_Channel = chx; //í¨μàÑ¡Ôñ
DMA_InitStructure.DMA_PeripheralBaseAddr = par;//DMAíaéèμØÖ·
DMA_InitStructure.DMA_Memory0BaseAddr = mar;//DMA ′æ′¢Æ÷0μØÖ·
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;//íaéèμ½′æ′¢Æ÷
DMA_InitStructure.DMA_BufferSize = 4096;//êy¾Y′«êäá¿
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//íaéè·ÇÔöá¿Ä£ê½
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//íaéèêy¾Y3¤¶è:16λ
DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_HalfWord;//′æ′¢Æ÷êy¾Y3¤¶è:16λ
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;// ê1óÃÑ-»·Ä£ê½
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//ÖDμèóÅÏè
DMA_Init(DMA_Streamx, &DMA_InitStructure);//3õê¼»ˉDMA Stream
}
//¿aÆôò»′ÎDMA′«êä
//DMA_Streamx

MAêy¾Yá÷,DMA1_Stream0~7/DMA2_Stream0~7
//ndtr:êy¾Y′«êäá¿
void MYDMA_Enable(DMA_Stream_TypeDef *DMA_Streamx,u16 ndtr)
{
DMA_Cmd(DMA_Streamx, DISABLE); //1رÕDMA′«êä
while (DMA_GetCmdStatus(DMA_Streamx) != DISABLE){} //è·±£DMA¿éòÔ±»éèÖÃ
DMA_SetCurrDataCounter(DMA_Streamx,ndtr); //êy¾Y′«êäá¿ //éèÖÃ′«êäêy¾Yá¿ ¿aê¼′«êä
DMA_Cmd(DMA_Streamx, ENABLE); //¿aÆôDMA′«êä
}
一周热门 更多>