久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2496|回復(fù): 2
收起左側(cè)

STM32串口打印存在一些疑問

[復(fù)制鏈接]
ID:370779 發(fā)表于 2019-9-20 16:09 | 顯示全部樓層 |閱讀模式
正在學(xué)習(xí)原子的例程,存在一些疑問
對于USART_RX_STA bit15和bit14我知道意思,不明白為何在接收到0x0d和接收成功后USART_RX_STA這個變量從0x0000變?yōu)?x4000和0x8000,這個通信協(xié)議是定義在程序哪個地方?能否修改該通信協(xié)議?比如bit0-12作為數(shù)據(jù)位,bit13作為0x0d,bit14作為0x0a,bit15作為接收成功標(biāo)志。

STM32單片機源程序如下:
#if EN_USART1_RX   //如果使能了接收
//串口1中斷服務(wù)程序
//注意,讀取USARTx->SR能避免莫名其妙的錯誤           
u8 USART_RX_BUF[USART_REC_LEN];     //接收緩沖,最大USART_REC_LEN個字節(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;//接收錯誤,重新開始
                                else USART_RX_STA|=0x8000;        //接收完成了
                        }
                        else //還沒收到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ù)錯誤,重新開始接收         
                                }                 
                        }
                }                                                                                                
        }
#if SYSTEM_SUPPORT_OS         //如果SYSTEM_SUPPORT_OS為真,則需要支持OS.
        OSIntExit();                                                                                          
#endif
}
#endif               

回復(fù)

使用道具 舉報

ID:123289 發(fā)表于 2019-9-21 08:50 | 顯示全部樓層
本帖最后由 yzwzfyz 于 2019-9-21 13:46 編輯

串口接收程序不是你寫的,所以你不知道。
猜猜也知道:
1、串行接收服務(wù)程序中,會依據(jù)地通訊的協(xié)議對每一個接收到的字節(jié)進行識別處理,包括接收到的開始符、結(jié)束符,校驗、字節(jié)數(shù)等等。
2、收到有效字節(jié)后,會放入到指定的緩沖區(qū),以備你使用。
3、另外它還做了一個標(biāo)記供你適時判斷,它就是:USART_RX_STA!
4、至于 USART_RX_STA = ?,當(dāng)然由串行接收服務(wù)程序決定了,它想讓它是什么它就是什么?,自然它會在恰當(dāng)?shù)臅r候讓它= 4000H 或 4000H 了。
如果你自己寫這段串行接收程序,你也同樣能做到這樣!
回復(fù)

使用道具 舉報

ID:615694 發(fā)表于 2019-9-24 16:03 | 顯示全部樓層
USART_RX_STA是自己定義的一個(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)志一個數(shù)據(jù)包接收完成了,否則接收錯誤。USART_RX_STA剩余的14位則用來做接收數(shù)據(jù)包的長度,如果接收數(shù)據(jù)包不做限制,則最大可接收2的14次方個字節(jié)。
你要自己改當(dāng)然也可以!!!!
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美高清一区 | 九九99精品 | 黄色三级免费网站 | 中文字幕亚洲一区 | 激情五月婷婷综合 | 久草福利 | 久久久久久免费观看 | 中文字幕成人在线 | 免费 视频 1级 | 久久久久久综合 | 久久机热 | 日日日日日日bbbbb视频 | 日韩一区二区三区视频 | 中文在线一区二区 | 国产高清视频一区 | 欧美视频第二页 | 在线看亚洲 | 天天躁人人躁人人躁狂躁 | 亚洲成人久久久 | 成人在线视频观看 | se婷婷| 欧美日韩国产一区二区三区 | 第四色影音先锋 | 日本成人中文字幕在线观看 | 精品久久久久久久久久久久久久 | 粉嫩国产精品一区二区在线观看 | 中文福利视频 | 波霸ol一区二区 | 亚洲精品乱码久久久久久9色 | 日本特黄a级高清免费大片 成年人黄色小视频 | 亚洲精品久久久久久久不卡四虎 | 久草福利| 另类专区成人 | 亚洲看片网站 | 中文字幕综合 | 九九综合 | 91色啪| 天色综合网 | 国产不卡视频在线 | 91精品国产乱码麻豆白嫩 | 欧美一级欧美三级在线观看 |