STM32 串口發(fā)送來龍去脈以及一些問題的分析
1.介紹的串口部分會有如下優(yōu)缺點(diǎn):
優(yōu)點(diǎn):簡單,適合很少量數(shù)據(jù)傳輸。(只要求這個(gè)優(yōu)點(diǎn),其實(shí)本可以不用串口中斷,但是為了知道來龍去脈,避免串口故弄玄虛,故加入中斷進(jìn)行串口發(fā)送的分析。)
缺點(diǎn):無緩存區(qū),并且對數(shù)據(jù)的正確性沒有判斷,數(shù)據(jù)量稍大可能導(dǎo)致數(shù)據(jù)丟失。
2.了解一些基礎(chǔ)知識:TXE=1代表發(fā)送數(shù)據(jù)寄存器空。
TC=1代表移位寄存器傳輸完成。
TXEIE允許在TXE標(biāo)志為'1'時(shí)產(chǎn)生中斷
TCIE允許在TC標(biāo)志為'1'時(shí)產(chǎn)生中斷
畫個(gè)圖介紹數(shù)據(jù)傳輸:
串口發(fā)送數(shù)據(jù)
3.采用判斷TC的方式進(jìn)行串口中斷發(fā)送字符串.a.首先按照官網(wǎng)上的配置進(jìn)行(這么晚了,碼字太難了,直接上手寫版)?官網(wǎng)配置
配置完了就得使能TC:
USART_ITCongfig(USART1,USART_IT_TC,ENABLE);
注意:此時(shí)使能了TC,在上述第6步里面會有 發(fā)送空閑幀的步驟。發(fā)送完畢,要是不加個(gè)清除TC標(biāo)志的程序,可能會丟失第1個(gè)字節(jié)的數(shù)據(jù),所以我們加上。
DelayMs(10);
USART_ClearFlag(USART1,USART_FLAG_TC);
注意:加完了還是會出現(xiàn)錯(cuò)誤,空閑幀沒發(fā)完,就清零發(fā)送完成標(biāo)志,導(dǎo)致使能TC之后就開始進(jìn)入中斷,故中間還加個(gè)延時(shí),如上。
2.發(fā)送數(shù)據(jù)函數(shù)voidUSART_SendDataString(u8*pData)
{ pDataByte=pData;
USART_ClearFlag(USART1,USART_FLAG_TC);//作用和上面一樣,清除傳輸完成標(biāo)志位,否則可能會丟失第1個(gè)字節(jié)的數(shù)據(jù).
USART_SendData(USART1,*(pDataByte++));//必須要++,不然會把第一個(gè)字符t發(fā)送兩次}
3.中斷處理函數(shù)voidUSART1_IRQHandler(void){
if(USART_GetITStatus(USART1,USART_IT_TC)==SET)
{if(*pDataByte=='