帮看一下这个读USART-SR,DR寄存器的作用是什么

2019-07-21 04:33发布

这是一个用DMA并使用USART空闲中断接收数据的中断函数,但不了解里面的i是做什么用的。
另外一点,我进了空闲中断,中断函数里设置了一个标志位,我是不是需要不停的检测到这个标志位?然后把dmabuf里的数据读出来?

void USART1_IRQHandler(void)

{
    u16 i;
    if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)//如果为空闲总线中断
    {
        i = USART1->SR; //读SR的作用是?
        i = USART1->DR; //读DR的作用是?

        USART_ClearITPendingBit(USART1, USART_IT_IDLE); //清掉空闲中断
        DMA_Cmd(DMA2_Stream5, DISABLE);//关闭DMA,防止处理其间有数据
        Data_Len=65535-DMA_GetCurrDataCounter(DMA2_Stream5);
        data_recv_flag_set(); //标志位
        printf("Data_Len=%d ",Data_Len);
        //DMA_Cmd(DMA2_Stream5, ENABLE);//开启DMA
    }
}  

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。