|
6路AD,分成2个ADC采集,64个点采样一次,DMA内存宽度设为3*128,半传输中断,数据采集不对,请看下哪里问题
#define Adc_Cj_Num 128
u32 AD_Value[Adc_Cj_Num][3];
//ÕâÀïʹÓõÄÊǶ¨Ê±Æ÷4!
void TIM4_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
TIM_TimeBaseStructure.TIM_Period = arr; //ÉèÖÃÔÚÏÂÒ»¸ö¸üÐÂʼþ×°Èë»î¶¯µÄ×Ô¶¯ÖØ×°ÔؼĴæÆ÷ÖÜÆÚµÄÖµ
TIM_TimeBaseStructure.TIM_Prescaler =psc; //ÉèÖÃÓÃÀ´×÷ΪTIMxʱÖÓƵÂʳýÊýµÄÔ¤·ÖƵֵ
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //ÉèÖÃʱÖÓ·Ö¸î:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIMÏòÉϼÆÊýģʽ
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯TIMxµÄʱ¼ä»ùÊýµ¥Î»
TIM_OCInitStruct.TIM_OCMode =TIM_OCMode_PWM1 ;
TIM_OCInitStruct.TIM_OCPolarity =TIM_OCPolarity_Low;
TIM_OCInitStruct.TIM_OutputState =TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_Pulse =324/2;
TIM_OC4Init(TIM4, &TIM_OCInitStruct);
TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);//TIMx_CCR1¼Ä´æÆ÷µÄԤװÔع¦ÄÜ,Enable¾ÍÊÇÏÂÒ»´Î¸üÐÂʼþʱ±»¸üУ»DisableÊÇÁ¢¼´ÉúЧ£¡£¡£¡
TIM_Cmd(TIM4, ENABLE); //ʹÄÜTIMx
TST_GPIO_Init();
//TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE ); //ʹÄÜÖ¸¶¨µÄTIM3ÖжÏ,ÔÊÐí¸üÐÂÖжÏ
}
void GPIO_Ad_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3|GPIO_Pin_4 | GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void DMA_ADC_INIT(void)
{
DMA_InitTypeDef DMA_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
DMA_DeInit(DMA1_Channel1); //*DMAͨµÀ1*/
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address; /*ÍâÉèµØÖ·*/
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&AD_Value[0][0]; /* ÄÚ´æµØÖ·*/
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; /* DMA ´«Êä·½Ïòµ¥Ïò*/
DMA_InitStructure.DMA_BufferSize =Adc_Cj_Num*3; /* ÉèÖÃDMAÔÚ´«Êäʱ»º³åÇøµÄ³¤¶È word*/
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; /*ÉèÖÃDMAµÄÍâÉèµÝÔöģʽ£¬Ò»¸öÍâÉè*/
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; /*ÉèÖÃDMAµÄÄÚ´æµÝÔöģʽ*/
// DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; /*ÍâÉèÊý¾Ý×Ö³¤*/
// DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord; /*ÄÚ´æÊý¾Ý×Ö³¤*/
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; //ÍâÉèÊý¾Ýµ¥Î»(ÿ´Î´«Êä32λ)
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //ÄÚ´æÊý¾Ýµ¥Î»(ÿ´Î´«Êä32λ)
DMA_InitStructure.DMA_Mode=DMA_Mode_Circular; /*ÉèÖÃDMAµÄ´«Êäģʽ£ºÁ¬Ðø²»¶ÏµÄÑ»·Ä£Ê½*/
DMA_InitStructure.DMA_Priority=DMA_Priority_High; /*ÉèÖÃDMAµÄÓÅÏȼ¶±ð*/
DMA_InitStructure.DMA_M2M=DMA_M2M_Disable; /*ÉèÖÃDMAµÄ2¸ömemoryÖеıäÁ¿»¥Ïà·ÃÎÊ*/
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
DMA_ITConfig(DMA1_Channel1,DMA_IT_TC,ENABLE); //
DMA_Cmd(DMA1_Channel1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2, ENABLE);
ADC_DeInit(ADC1);
ADC_DeInit(ADC2);
ADC_StructInit(&ADC_InitStructure);
ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult; //ADC1¹¤×÷ÔÚ×¢Èëģʽ
ADC_InitStructure.ADC_ScanConvMode = ENABLE; /*ENABLE-ADC¶àͨµÀɨÃè, DISABLE-ADCµ¥Í¨µÀɨÃè*/
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; /* ENABLE--ADCÁ¬Ðøת»¯Ä£Ê½ DISABLE--ADCµ¥´Îת»¯Ä£Ê½*/
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T4_CC4;//ADC_ExternalTrigConv_T4_CC4;ADC_ExternalTrigConv_None /*ADCÍⲿ¿ª¹Ø£¬¹Ø±Õ״̬*/
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; /*¶ÔÆ뷽ʽ,ADCΪ12λÖУ¬ÓÒ¶ÔÆ뷽ʽ*/
ADC_InitStructure.ADC_NbrOfChannel =3; /*¿ªÆôͨµÀÊý£¬3¸ö*/
ADC_Init(ADC1, &ADC_InitStructure);
ADC_DMACmd(ADC1, ENABLE); //ʹÄÜADC1µÄDMA
ADC_StructInit(&ADC_InitStructure);
ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult; //ADC2¹¤×÷ÔÚ×¢Èëģʽ
ADC_InitStructure.ADC_ScanConvMode = ENABLE; /*ENABLE-ADC¶àͨµÀɨÃè, DISABLE-ADCµ¥Í¨µÀɨÃè*/
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; /* ENABLE--ADCÁ¬Ðøת»¯Ä£Ê½ DISABLE--ADCµ¥´Îת»¯Ä£Ê½*/
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //ADC_ExternalTrigConv_T4_CC4;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; /*¶ÔÆ뷽ʽ,ADCΪ12λÖУ¬ÓÒ¶ÔÆ뷽ʽ*/
ADC_InitStructure.ADC_NbrOfChannel = 3; //Òª½øÐÐADCת»»µÄͨµÀÊý£ºPHASE_B_ADC_CHANNEL,TEMP_FDBK_CHANNEL
ADC_Init(ADC2, &ADC_InitStructure);
ADC_ExternalTrigConvCmd(ADC2, ENABLE); //ADC2Íⲿ´¥·¢Ê¹ÄÜ£¬Ë«ADCģʽµÄ´ÓADC±ØÐëÒªÓÃÕâÌõÓï¾ä
ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_13Cycles5); //AÏàµçÁ÷
ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 2, ADC_SampleTime_13Cycles5); //BÏàµçÁ÷
ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 3, ADC_SampleTime_13Cycles5); //BÏàµçÁ÷
ADC_RegularChannelConfig(ADC2, ADC_Channel_13, 1, ADC_SampleTime_13Cycles5); //»ù×¼µçѹ
ADC_RegularChannelConfig(ADC2, ADC_Channel_14, 2, ADC_SampleTime_13Cycles5); //ÁãÐòµçÁ÷
ADC_RegularChannelConfig(ADC2, ADC_Channel_15, 3, ADC_SampleTime_13Cycles5); //
ADC_ExternalTrigConvCmd(ADC1, ENABLE); /* Ò»¶¨Òª ¿ªStart ADC1 External Conversion */
ADC_Cmd(ADC1, ENABLE); //ADC1ʹÄÜ
ADC_ResetCalibration(ADC1); //¸´Î»Ð£×¼¼Ä´æÆ÷
while(ADC_GetResetCalibrationStatus(ADC1)); //µÈ´ýУ׼¼Ä´æÆ÷¸´Î»Íê³É
ADC_StartCalibration(ADC1); //ADC1¿ªÊ¼Ð£×¼
while(ADC_GetCalibrationStatus(ADC1)); //µÈ´ýУ׼Íê³É
ADC_Cmd(ADC2, ENABLE); //ADC2ʹÄÜ
ADC_ResetCalibration(ADC2); //¸´Î»Ð£×¼¼Ä´æÆ÷
while(ADC_GetResetCalibrationStatus(ADC2)); //µÈ´ýУ׼¼Ä´æÆ÷¸´Î»Íê³É
ADC_StartCalibration(ADC2); //ADC2¿ªÊ¼Ð£×¼
while(ADC_GetCalibrationStatus(ADC2)); //µÈ´ýУ׼Íê³É
}
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|