欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
STM32串口打印存在一些疑問(wèn)
[打印本頁(yè)]
作者:
叫我紅領(lǐng)巾
時(shí)間:
2019-9-20 16:09
標(biāo)題:
STM32串口打印存在一些疑問(wèn)
正在學(xué)習(xí)原子的例程,存在一些疑問(wèn)
對(duì)于USART_RX_STA bit15和bit14我知道意思,不明白為何在接收到0x0d和接收成功后USART_RX_STA這個(gè)變量從0x0000變?yōu)?x4000和0x8000,這個(gè)通信協(xié)議是定義在程序哪個(gè)地方?能否修改該通信協(xié)議?比如bit0-12作為數(shù)據(jù)位,bit13作為0x0d,bit14作為0x0a,bit15作為接收成功標(biāo)志。
STM32單片機(jī)源程序如下:
#if EN_USART1_RX //如果使能了接收
//串口1中斷服務(wù)程序
//注意,讀取USARTx->SR能避免莫名其妙的錯(cuò)誤
u8 USART_RX_BUF[USART_REC_LEN]; //接收緩沖,最大USART_REC_LEN個(gè)字節(jié).
//接收狀態(tài)
//bit15, 接收完成標(biāo)志
//bit14, 接收到0x0d
//bit13~0, 接收到的有效字節(jié)數(shù)目
u16 USART_RX_STA=0; //接收狀態(tài)標(biāo)記
void USART1_IRQHandler(void)
{
u8 res;
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS為真,則需要支持OS.
OSIntEnter();
#endif
if(USART1->SR&(1<<5)) //接收到數(shù)據(jù)
{
res=USART1->DR;
if((USART_RX_STA&0x8000)==0)//接收未完成
{
if(USART_RX_STA&0x4000)//接收到了0x0d
{
if(res!=0x0a)USART_RX_STA=0;//接收錯(cuò)誤,重新開始
else USART_RX_STA|=0x8000; //接收完成了
}
else //還沒(méi)收到0X0D
{
if(res==0x0d)USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=res;
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收數(shù)據(jù)錯(cuò)誤,重新開始接收
}
}
}
}
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS為真,則需要支持OS.
OSIntExit();
#endif
}
#endif
作者:
yzwzfyz
時(shí)間:
2019-9-21 08:50
本帖最后由 yzwzfyz 于 2019-9-21 13:46 編輯
串口接收程序不是你寫的,所以你不知道。
猜猜也知道:
1、串行接收服務(wù)程序中,會(huì)依據(jù)地通訊的協(xié)議對(duì)每一個(gè)接收到的字節(jié)進(jìn)行識(shí)別處理,包括接收到的開始符、結(jié)束符,校驗(yàn)、字節(jié)數(shù)等等。
2、收到有效字節(jié)后,會(huì)放入到指定的緩沖區(qū),以備你使用。
3、另外它還做了一個(gè)標(biāo)記供你適時(shí)判斷,它就是:USART_RX_STA!
4、至于 USART_RX_STA = ?,當(dāng)然由串行接收服務(wù)程序決定了,它想讓它是什么它就是什么?,自然它會(huì)在恰當(dāng)?shù)臅r(shí)候讓它= 4000H 或 4000H 了。
如果你自己寫這段串行接收程序,你也同樣能做到這樣!
作者:
QTW
時(shí)間:
2019-9-24 16:03
USART_RX_STA是自己定義的一個(gè)(unsigned short int)類型的16位狀態(tài)標(biāo)志變量,以第14位(0x4000)標(biāo)志接收到了0x0d,以第15位(0x8000)標(biāo)志已經(jīng)接收0x0a,即規(guī)定了只能連續(xù)接收到(0x0d、0x0a)則標(biāo)志一個(gè)數(shù)據(jù)包接收完成了,否則接收錯(cuò)誤。USART_RX_STA剩余的14位則用來(lái)做接收數(shù)據(jù)包的長(zhǎng)度,如果接收數(shù)據(jù)包不做限制,則最大可接收2的14次方個(gè)字節(jié)。
你要自己改當(dāng)然也可以。。。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1