stm32 USART_IT_IDLE中斷 一幀數據

USART_IT_IDLE中斷,是串口收到一幀數據後,發生的中斷。也能夠叫作一包數據spa

USART_IT_IDLE和USART_IT_RXNE區別
當接收到1個字節,會產生USART_IT_RXNE中斷
當接收到一幀數據,就會產生USART_IT_IDLE中斷code

清中斷方法blog

//USART_IT_RXNE
USART_ClearITPendingBit(USART1, USART_IT_RXNE);

//USART_IT_IDLE
USART1->SR; //先讀SR寄存器
USART1->DR; //再讀DR寄存器

使用舉例it

u8 count;
u8 flag;

void uart_init(u32 bound)
{
    ...

    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
    USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);

    ...
}

void USART1_IRQHandler(void)
{
    u8 r;

    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
    {
        USART_ClearITPendingBit(USART1, USART_IT_RXNE); //只USART_ReceiveData也能夠

        //r = USART_ReceiveData(USART1);

        count++;
    }
    else if(USART_GetFlagStatus(USART1, USART_FLAG_IDLE) != RESET)
    {
        USART1->SR;
        USART1->DR;

        flag = 1;
    }
}

int main()
{
    while(1)
    {
        if(flag == 1)
        {
            printf("count %d\r\n", count);

            flag = 0;
            count = 0;
        }

        delay_ms(10);
    }
}

實驗現象
1class

相關文章
相關標籤/搜索