由于需要把接收到的数据进行处理 所以dma使用了normal模式,但是问题是只能进一次dma完成中断,之后就不会进了。不管怎么改都不行。不知道是什么原因,请各位大神帮忙看看,提供下思路。谢谢!
void DMA1_Channel6_IRQHandler(void)
{
uint16_t i,j;
uint8_t sum;
if(DMA_GetFlagStatus(DMA1_FLAG_TC6)==SET)
{
for(i=0;i<(READBUFF_SIZE-11);i++)
{
if(ReadBuffer==0x55&&ReadBuffer[i+1]==0x53)
{
for(j=0;j<10;j++)
{
sum=ReadBuffer[i+j];
// printf("%X ",ReadBuffer[i+j]);
}
// printf("%X ",ReadBuffer[i+j+1]);
// printf("%d\n",sum);
if(ReadBuffer[i+10]==sum)
{
Roll=((ReadBuffer[i+3]<<8)|ReadBuffer[i+2])/32768*180;
Pitch=((ReadBuffer[i+5]<<8)|ReadBuffer[i+4])/32768*180;
Yaw=((ReadBuffer[i+7]<<8)|ReadBuffer[i+6])/32768*180;
printf("Roll=%4.3f,Pitch=%4.3f,Yaw=%4.3f\n",Roll,Pitch,Yaw);
break;
}
}
}
DMA_Cmd(DMA1_Channel6,DISABLE);
DMA1_Channel6->CMAR=(u32)ReadBuffer;
DMA1_Channel6->CNDTR=READBUFF_SIZE;
USART_DMACmd(USART2,USART_DMAReq_Rx,ENABLE);
DMA_Cmd(DMA1_Channel6,ENABLE);
DMA_ClearFlag(DMA1_FLAG_GL6);
}
} |