當前位置:首頁 > 單片機 > 單片機
[導讀]1.介紹的串口部分會有如下優(yōu)缺點:優(yōu)點:簡單,適合很少量數據傳輸。(只要求這個優(yōu)點,其實本可以不用串口中斷,但是為了知道來龍去脈,避免串口故弄玄虛,故加入中斷進行串口發(fā)送的分析。)缺點:無緩存區(qū),并且對

1.介紹的串口部分會有如下優(yōu)缺點:

優(yōu)點:簡單,適合很少量數據傳輸。(只要求這個優(yōu)點,其實本可以不用串口中斷,但是為了知道來龍去脈,避免串口故弄玄虛,故加入中斷進行串口發(fā)送的分析。)

缺點:無緩存區(qū),并且對數據的正確性沒有判斷,數據量稍大可能導致數據丟失。

2.了解一些基礎知識:

TXE=1代表發(fā)送數據寄存器空。

TC=1代表移位寄存器傳輸完成。

TXEIE允許在TXE標志為'1'時產生中斷

TCIE允許在TC標志為'1'時產生中斷

畫個圖介紹數據傳輸:

串口發(fā)送數據

3.采用判斷TC的方式進行串口中斷發(fā)送字符串.a.首先按照官網上的配置進行(這么晚了,碼字太難了,直接上手寫版)

?官網配置

配置完了就得使能TC:

USART_ITCongfig(USART1,USART_IT_TC,ENABLE);

注意:此時使能了TC,在上述第6步里面會有 發(fā)送空閑幀的步驟。發(fā)送完畢,要是不加個清除TC標志的程序,可能會丟失第1個字節(jié)的數據,所以我們加上。

DelayMs(10);

USART_ClearFlag(USART1,USART_FLAG_TC);

注意:加完了還是會出現錯誤,空閑幀沒發(fā)完,就清零發(fā)送完成標志,導致使能TC之后就開始進入中斷,故中間還加個延時,如上。

2.發(fā)送數據函數

voidUSART_SendDataString(u8*pData)

{ pDataByte=pData;

USART_ClearFlag(USART1,USART_FLAG_TC);//作用和上面一樣,清除傳輸完成標志位,否則可能會丟失第1個字節(jié)的數據.

USART_SendData(USART1,*(pDataByte++));//必須要++,不然會把第一個字符t發(fā)送兩次}

3.中斷處理函數

voidUSART1_IRQHandler(void){

if(USART_GetITStatus(USART1,USART_IT_TC)==SET)

{if(*pDataByte=='