關於USART_ClearITPendingBith和 USART_ClearFlag的區別


int fputc(int ch,FILE *p)
{
	
	USART_SendData(USART1,(u8)ch);
	while(USART_GetITStatus(USART1,USART_IT_TXE) != SET);
	return ch;
}

  今天學到printf實驗,結果跑半天就是不知道程序卡在哪個地方,比較板子的源碼發現,我的這兩個語句用錯了,雖然題目不是寫的是這個,但道理是一樣,所以解釋一下

USART_GetITStatus(USART1,USART_IT_TXE)
USART_GetFlagStatus(USART1,USART_FLAG_TXE

第一個是獲取中斷標志位,而我的程序並不是中斷服務函數,所以一直卡在這個循環上,而第二個只是單純處理完或者獲得標志位,和中斷無關,所以一定要記住其他的不是中斷的函數一定要使用第二個

若是在中斷服務函數中,則兩者並無區別,可以隨意替換

void USART1_IRQHander(void)
{
    u8 r;
    
    if(USART_GetITStatus(USART1,USART_IT_RXNE) == SET)
    {
        r = USART_ReceiveData(USART1);
        USART_SendData(USART1,r);
      while(USART_GetITStatus(USART1,USART_IT_TC) != SET);
    }
    USART_ClearITPendingBit(USART1,USART_FLAG_TC);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM