天天看點

USART中斷接收程式

//usart.h

//usart.c

//main.c

注意在對資料進行發送和接收的時候,要檢查USART的狀态,隻有等到資料發送或接收完畢之後才能進行下一幀資料的發送或接收。采用USART_GetFlagStatus()函數。

同時還要注意的是,在發送資料的最開始,需要清除一下USART的标志位,否則,第1位資料會丢失。因為在硬體複位之後,USART的狀态位TC是置位的。當包含有資料的一幀發送完成之後,由硬體将該位置位。隻要當USART的狀态位TC是置位的時候,就可以進行資料的發送。然後TC位的置零則是通過軟體序列來清除的,具體的步驟是“先讀USART_SR,然後寫入USART_DR”,隻有這樣才能夠清除标志位TC,但是在發送第一幀資料的時候,并沒有進行讀USART_SR的操作,而是直接進行寫操作,是以TC标志位并沒有清空,那麼,當發送第一幀資料,然後用USART_GetFlagStatus()檢測狀态時傳回的是已經發送完畢(因為TC位是置1的),是以程式會馬上發送下一幀資料,那麼這樣,第一幀資料就被第二幀資料給覆寫了,是以看不到第一幀資料的發送。

繼續閱讀