关于STM32F767的串口接收中断标志位

2019-07-20 15:09发布

本帖最后由 非同小可 于 2016-11-17 20:41 编辑

void USART1_IRQHandler(void)                        
{
        u8 Res;
        u8 flag;
#if SYSTEM_SUPPORT_OS                 
        OSIntEnter();   
#endif
        flag=__HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_RXNE);  //求助:我在仿真时接受到字符,进入中断,为什么一执行这个语句,UART_FLAG_RXNE标志位就自动清零了,而且flag=0,然后就进不去下面的判断语句。这是原子的例程,我在官方的STM32F767ZI开发板上试的
        if((flag!=RESET))  
        {
        HAL_UART_Receive(&UART1_Handler,&Res,1,1000);
                if((USART_RX_STA&0x8000)==0)
                {
                        if(USART_RX_STA&0x4000)
                        {
                                if(Res!=0x0a)USART_RX_STA=0;
                                else USART_RX_STA|=0x8000;        
                        }
                        else
                        {        
                                if(Res==0x0d)USART_RX_STA|=0x4000;
                                else
                                {
                                        USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
                                        USART_RX_STA++;
                                        if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;
                                }                 
                        }
                }                    
        }
        HAL_UART_IRQHandler(&UART1_Handler);        
#if SYSTEM_SUPPORT_OS         
        OSIntExit();                                                                                          
#endif
}
#endif        

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