大数据串口传输

来源:互联网 发布:西王母国 知乎 编辑:程序博客网 时间:2024/06/05 06:45
/*******************************************************************************
* Function Name  : USART1_IRQHandler
* Description    : This function handles USART1 global interrupt request.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void USART1_IRQHandler(void)
{
    CPU_SR         cpu_sr;
    unsigned char *t1;
    OS_ENTER_CRITICAL();
    OSIntNesting++;
    OS_EXIT_CRITICAL();
    //用户程序..
    //接收中断
    if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET)
    {
            USART_ClearITPendingBit(USART1,USART_IT_RXNE);
        Rev_uart1_Str_Flag=1;                                        //接收到串口数据置1
        Rev_uart1_over_count=0;                                //每来一字节溢出计数清0
        //两个指针,一个用来收,一个用来读
        t1=inRx1Buf;
        t1++;                                    //保留指针位置
        if(t1==Rx1Buf+Uart1_LenRxBuf) t1=Rx1Buf;        //如果到缓冲区末尾,则返回缓冲区头
        if(t1==outRx1Buf)
        {
                  Buff1_Init();        
                  if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)==SET)
          {
            USART_ClearFlag(USART1,USART_FLAG_ORE);        //读SR
            USART_ReceiveData(USART1);                                //读DR
          }
            Rev_uart1_Str_Flag=0;
            OSIntExit();                                    //如果相等,说明缓冲区满了,RxBuf Full
        }
        *inRx1Buf=USART_ReceiveData(USART1);
        inRx1Buf=t1;
       
    }
    //溢出-如果发生溢出需要先读SR,再读DR寄存器 则可清除不断入中断的问题
    if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)==SET)
    {
        USART_ClearFlag(USART1,USART_FLAG_ORE);        //读SR
        USART_ReceiveData(USART1);                                //读DR
    }
    OSIntExit();
}

这样我大量数据连续收没问题哦
原创粉丝点击