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=='