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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2386|回復: 2
打印 上一主題 下一主題
收起左側

STM32串口打印存在一些疑問

[復制鏈接]
跳轉到指定樓層
樓主
ID:370779 發表于 2019-9-20 16:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
正在學習原子的例程,存在一些疑問
對于USART_RX_STA bit15和bit14我知道意思,不明白為何在接收到0x0d和接收成功后USART_RX_STA這個變量從0x0000變為0x4000和0x8000,這個通信協議是定義在程序哪個地方?能否修改該通信協議?比如bit0-12作為數據位,bit13作為0x0d,bit14作為0x0a,bit15作為接收成功標志。

STM32單片機源程序如下:
#if EN_USART1_RX   //如果使能了接收
//串口1中斷服務程序
//注意,讀取USARTx->SR能避免莫名其妙的錯誤           
u8 USART_RX_BUF[USART_REC_LEN];     //接收緩沖,最大USART_REC_LEN個字節.
//接收狀態
//bit15,        接收完成標志
//bit14,        接收到0x0d
//bit13~0,        接收到的有效字節數目
u16 USART_RX_STA=0;       //接收狀態標記         
void USART1_IRQHandler(void)
{
        u8 res;        
#if SYSTEM_SUPPORT_OS                 //如果SYSTEM_SUPPORT_OS為真,則需要支持OS.
        OSIntEnter();   
#endif
        if(USART1->SR&(1<<5))        //接收到數據
        {         
                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;//接收數據錯誤,重新開始接收         
                                }                 
                        }
                }                                                                                                
        }
#if SYSTEM_SUPPORT_OS         //如果SYSTEM_SUPPORT_OS為真,則需要支持OS.
        OSIntExit();                                                                                          
#endif
}
#endif               

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:123289 發表于 2019-9-21 08:50 | 只看該作者
本帖最后由 yzwzfyz 于 2019-9-21 13:46 編輯

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

使用道具 舉報

板凳
ID:615694 發表于 2019-9-24 16:03 | 只看該作者
USART_RX_STA是自己定義的一個(unsigned short  int)類型的16位狀態標志變量,以第14位(0x4000)標志接收到了0x0d,以第15位(0x8000)標志已經接收0x0a,即規定了只能連續接收到(0x0d、0x0a)則標志一個數據包接收完成了,否則接收錯誤。USART_RX_STA剩余的14位則用來做接收數據包的長度,如果接收數據包不做限制,則最大可接收2的14次方個字節。
你要自己改當然也可以!!!!
回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人免费在线视频 | 在线观看av网站 | 91精品久久久久久久久 | 91欧美激情一区二区三区成人 | 中文字幕一区在线 | 91新视频 | 天天色天天射天天干 | 欧美激情久久久 | 1级毛片 | 99视频在线免费观看 | 精品综合 | 久久久久久亚洲精品 | 国产精品久久毛片av大全日韩 | 国产精品片aa在线观看 | 伊人久操 | 亚洲国产精品久久久久秋霞不卡 | 中文字字幕一区二区三区四区五区 | www国产成人免费观看视频,深夜成人网 | 国产中文一区二区三区 | 日韩中文字幕一区二区 | 午夜精品久久久久久久星辰影院 | 日韩在线小视频 | 中文字幕成人av | 亚洲精品日日夜夜 | 午夜在线免费观看 | 2020天天操| 成人妇女免费播放久久久 | 超碰婷婷 | 日韩小视频 | 一级在线 | 成人在线观看免费 | 成年人免费看的视频 | 国产精品久久久久久福利一牛影视 | 国产精品一区二区三区四区五区 | 人人鲁人人莫人人爱精品 | 精品二区视频 | 国产日韩欧美精品一区二区三区 | 亚洲人va欧美va人人爽 | 午夜影院在线视频 | 精品久久久久久久久久久久久久 | 久久久久成人精品亚洲国产 |