初级会员

- 积分
- 50
- 金钱
- 50
- 注册时间
- 2016-3-28
- 在线时间
- 9 小时
|
8金钱
本帖最后由 aaronjedi 于 2016-4-28 11:59 编辑
代码如下,总体的结构是,开辟了一个两个2048的数组 DMA_RX_BUF[2][0],循环缓冲的读取数据(数据是每50ms发一次,长度在500个字节左右),
现在问题是:
1、能正常进串口空闲中断,而且也读出了数据的长度,但是接收数组的数据全为0,不符合实际情况,请问各位大侠有没有遇到这种类似的情况,请点拨下
void USART1_IRQHandler(void)
{
u16 i;
if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)
{
DMA_Cmd(DMA1_Channel5,DISABLE);
//DMA_ClearFlag(DMA1_FLAG_GL5);
//USART_ClearITPendinngBit(USART1,USART_IT_IDLE);
Rx_UART1_DATE_LEN=2048-DMA_GetCurrDataCounter(DMA1_Channel5);
if(Rx_UART1_DATE_LEN>0){
RxBuff_Write_uart1 = RxBuff_Write_uart1 ^ RxBuff_Read_uart1 ;
RxBuff_Read_uart1 = RxBuff_Read_uart1 ^ RxBuff_Write_uart1;
RxBuff_Write_uart1 = RxBuff_Write_uart1 ^ RxBuff_Read_uart1 ;
DMA1_Channel5->CMAR = (uint32_t)(&(DMA_RX_BUF[RxBuff_Write_uart1][0])); //此处读不到数据
DMA1_Channel5->CNDTR = 2048;
DMA1_Channel5->CCR |= (1 << 0);//DMA_Cmd(DMA1_Channel3,ENABLE);
COM1_RX_STA=Rx_UART1_DATE_LEN;
}
i = USART1->SR;
i = USART1->DR;
}
if(USART_GetITStatus(USART1, USART_IT_PE | USART_IT_FE | USART_IT_NE) != RESET)
{
USART_ClearITPendingBit(USART1, USART_IT_PE | USART_IT_FE | USART_IT_NE);
}
USART_ClearITPendingBit(USART1, USART_IT_TC);
USART_ClearITPendingBit(USART1, USART_IT_IDLE);
}
|
|