如题,我的代码如下:
void Uart1_DMAConfig(void)
{
DMA_InitTypeDef DMA_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);//DMA1?±??????
/*DMA USART1_RXD???????? */
DMA_InitStructure.DMA_BufferSize = RX_LEN;//?è???????????¤??
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;//8?????è?????í??
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;//8???????????í??
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//???è???·?????÷??±?
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//???????·????
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//?????????????¨?????????????©
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;//?????è????????????????
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)RxBuffer;//?è??·??????????×???·
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//???è×÷?????????????????·?¨???è->???????©
DMA_InitStructure.DMA_Priority = DMA_Priority_High;//DMA????????
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&USART1->RDR) ;//?è???®?????????è?×???·
DMA_Init(DMA1_Channel3, &DMA_InitStructure);//????????
USART_DMACmd(USART1, USART_DMAReq_Rx, ENABLE);
DMA_ITConfig(DMA1_Channel3, DMA_IT_TC,ENABLE);//DMA1?¨??3·????ê??????????
NVIC_InitStructure.NVIC_IRQChannel=DMA1_Channel2_3_IRQn;//DMA?¨??2,3????????
NVIC_InitStructure.NVIC_IRQChannelPriority=2;//??????????2
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//????????
NVIC_Init(&NVIC_InitStructure);//????????
DMA_ClearFlag(DMA1_FLAG_GL3|DMA1_FLAG_TC3); //?????¨??3?ù??±ê??
//DMA_Cmd(DMA1_Channel2,ENABLE);//DMA1?¨??2????
//DMA_Cmd(DMA1_Channel3,ENABLE);//DMA1?¨??3????
}
void DMA1_Channel2_3_IRQHandler(void)
{
if(DMA_GetITStatus(DMA1_FLAG_TC3))
{
DMA_Cmd(DMA1_Channel3,DISABLE); //??±?DMA2?¨??
DMA_ClearFlag(DMA1_FLAG_TC3); //????????·????ê??±ê??
Flag_Uart1_DMARC=1;
DMA_SetCurrDataCounter(DMA1_Channel3, RX_LEN);
DMA_Cmd(DMA1_Channel3,ENABLE); //?ò??DMA2?¨??
}
}
int main(void)
{
Sys_Init();
DMA_Cmd(DMA1_Channel3, ENABLE);
while (1)
{
}
}
每次运行程序第一次能进入DMA接收中断,但下次就进不去了,不知什么原因,难道不能用DMA这种接收方式?
请版主指教一二
谢谢
|