中级会员
 
- 积分
- 271
- 金钱
- 271
- 注册时间
- 2012-10-26
- 在线时间
- 28 小时
|

楼主 |
发表于 2015-12-21 17:48:34
|
显示全部楼层
回复【4楼】xuande:
---------------------------------
你好,我在用串口空闲中断配合DMA双缓冲的时候出现了问题,
直接用串口空闲中断接收GPS消息是正常的一秒一次,但是加上双缓冲之后
void USART2_IRQHandler(void)
{
uint32_t Length = 0;
// u16 i;
if(USART_GetITStatus(USART2, USART_IT_IDLE) != RESET)
{
//DMA_Cmd(DMA1_Stream5,DISABLE);
Length = USART2->SR;
Length = USART2->DR; //清除标志位
Length = Uart2_GPS1_LEN - DMA_GetCurrDataCounter(DMA1_Stream5);
DMA_ClearITPendingBit(DMA1_Stream5,DMA_IT_TCIF5);
OSFlagPost(GPS_FLAG,0x01,OS_FLAG_SET,&err);
printf("\r\n%d\r\n",Length);
//DMA_Cmd(DMA1_Stream5, ENABLE);//处理完,重开DMA
}
__nop();
}
GPS消息被拆成一段一段的不好直接处理了,如果进中断禁止DMA 的话就不能正常工作,是不是双缓冲不太适合这样用? |
|