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