初级会员

- 积分
- 62
- 金钱
- 62
- 注册时间
- 2021-4-15
- 在线时间
- 16 小时
|
请问一下DMA传输,我配置Normal模式,为什么DMA中断只能进入一次,,并且我也重新设置了 传输数量,恳求大佬告知原因,网上例子也试过,我的红灯就是不亮(灯没坏)
DMA_InitStructure.DMA_Channel = DMA_Channel_0; //í¨μàÑ¡Ôñ0
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_ADDRESS; //DMAíaéèμØÖ·
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)ADC1_Buff; //DMA ′æ′¢Æ÷0μØÖ·
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; //êy¾Y′«êä·½Ïò£¬′óíaéè·¢Ëíμ½Äú′æ DMA_CCRXλ4/
DMA_InitStructure.DMA_BufferSize =ADC_LENTH; //êy¾Y′«êäá¿
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //íaéèμØÖ·Ö¸Õë1춨
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //′æ′¢Æ÷μYÔöÄ£ê½
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //íaéèêy¾Y3¤¶è:16λ °ë×Ö
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //′æ′¢Æ÷êy¾Y3¤¶è:16λ °ë×Ö
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; // ê1óÃÑ-»·Ä£ê½ DMA_Mode_Circular
DMA_InitStructure.DMA_Priority = DMA_Priority_High; //¸ßμèóÅÏ輶/
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; //½ûÖ1FIFO
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; //FIFOμÄÖμ
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; //′æ′¢Æ÷í»·¢μ¥′Î′«êä
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; //íaéèí»·¢μ¥′Î′«êä
DMA_Init(DMA2_Stream0, &DMA_InitStructure);
DMA_Cmd(DMA2_Stream0, ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = DMA2_Stream0_IRQn; //DMA2_Stream0ÖD¶Ï
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; //ÇàÕ¼óÅÏ輶1
NVIC_InitStructure.NVIC_IRQChannelSubPriority =1; //×óóÅÏ輶1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQí¨μàê1Äü
NVIC_Init(&NVIC_InitStructure); //¸ù¾YÖ¸¶¨μÄ2Îêy3õê¼»ˉNVIC¼Ä′æÆ÷
// DMA_ClearITPendingBit(DMA2_Stream0, DMA_IT_TC); //Çå3yÖD¶Ï±êÖ¾
DMA_ITConfig(DMA2_Stream0, DMA_IT_TC, ENABLE); //′«êäíê3éÖD¶Ï
/* ADC1 1æÔò channel3¡¢5 ÅäÖÃ *************************************/
ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 1, ADC_SampleTime_3Cycles);
/* ê1ÄüDMAÇëÇó(μ¥ADCÄ£ê½) */
ADC_MultiModeDMARequestAfterLastTransferCmd(ENABLE);//Ôú¶àADCÄ£ê½ÏÂ×îoóò»′Î′«êäíê3éoó′¥·¢ADC_DMAêy¾Y′«êä
/* ê1Äü ADC1 DMA */
ADC_DMACmd(ADC1, ENABLE);
/* ê1Äü ADC1 */
ADC_Cmd(ADC1, ENABLE);
TIM_Cmd(TIM3,ENABLE);
}
void DMA_ON()
{
DMA_Cmd(DMA2_Stream0, DISABLE);
DMA_GetCurrDataCounter(DMA2_Stream0);
DMA_SetCurrDataCounter(DMA2_Stream0,1024);
DMA_Cmd(DMA2_Stream0, ENABLE);
}
void DMA2_Stream0_IRQHandler(void)
{
static uint16_t t=0;
if(DMA_GetITStatus(DMA2_Stream0, DMA_IT_TCIF0)) //ÅD¶ÏDMA′«êäíê3éÖD¶Ï
{
DMA_ClearITPendingBit(DMA2_Stream0, DMA_IT_TCIF0);
t++;
DMA_ON();
if(t==2)
{
GPIO_ResetBits(GPIOF,GPIO_Pin_9);
adc_flag=1;
t=0;
}
}
}
|
|