stm32的串口中断

void USART1_IRQHandler(void)                                                              //串口中断
{
    if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET)           //USART1接收中断,,,
    {    
        uart1_rx_buf[uart1_rx_RecvIndex] = USART1->DR;
        uart1_rx_RecvIndex++;
        if(uart1_rx_RecvIndex > 3)
        {
             uart1_rx_RecvIndex = 4;
             Uart1_RS232_SendString(uart1_rx_buf,4);
        }
        //uart1_rx_RecvOvertimeCnt = 0;
        //uart1_rx_RecvFlag = 1;
    }

    if(USART_GetITStatus(USART1,USART_IT_TXE) != RESET)               //USART1发送中断
    {
        if(uart1_tx_SendIndex < uart1_tx_SendLength)              
        {
            USART1->DR = uart1_tx_buf[uart1_tx_SendIndex]&0x01FF;
            uart1_tx_SendIndex++;
        }
        else
        {
            uart1_tx_SendIndex = 0;            
            USART_ITConfig(USART1, USART_IT_TXE, DISABLE);         //关闭发送中断        ,,, 这种方式是判断 寄存器是否为空,,,为空就会进入中断,,,,

                                                                                                            //所以用完之后就关中断   ,,,至于它的打开,,是在主函数中进行的....
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/chulin/p/9055361.html