最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

UART 使用常見問題以及注意事項

2023-07-05 10:06 作者:賽元MCU平臺  | 我要投稿

賽元芯片的 UART 功能有獨立的 UART 與三合一的 UART,芯片內(nèi)部集成了三個三選 一通用串行接口電路,稱為三合一,簡稱 SSI/USCI,用戶可通過寄存器的配置,將 SSI/USCI 配置為 SPI、TWI、UART 中的任意一種通信模式,用戶只能同時使用其中一種通信方式。?

本文檔包含在使用UART通訊過程中遇到的常見問題以及注意事項,主要有以下內(nèi)容:?

1、UART 設(shè)置及使用注意事項;?

2、SSI/USCI 中的 UART 通訊使用注意事項;?

3、UART 波特率計算方式以及誤差大怎樣改善;?

4、UART 數(shù)據(jù)發(fā)送不正常通常有哪些原因;?

5、UART 通訊一段時間之后數(shù)據(jù)出現(xiàn)錯誤,可能是什么原因;?

6、使用賽元芯片,仿真口與 UART 復(fù)用時,仿真時不能仿真 UART 功能;?

具體內(nèi)容如下:?

1、UART 設(shè)置及使用注意事項?

1) 賽元 SC92F 系列的部分 MCU(SC92F735X、SC92F725X、SC92F732X)與傳統(tǒng) 的 51 單片機的波特率配置模式相似,使用 UART0 時用定時器 1 做波特率發(fā)生器時 需要將 TR1 置 1,但賽元 SC92F 系列的其他型號以及 95F 系列的單片機在使用 UART 時,如果選擇 TIMER1 做波特率發(fā)生器,定時器 1 必須停止計數(shù),即 TR1=0;?

2) 使用 UART 時需要將其對應(yīng)的 TX 口設(shè)置為輸入帶上拉模式,保證 TX 口在空閑時 為高電平;?

3) UART0 不可直接發(fā)送 SFR 寄存器的值,若要通過 UART0 發(fā)出 SFR 的值,請先將 SFR 的值賦值給一個臨時變量,再將臨變量賦值給 SBUF;?

4) 對于通信,要特別注意通信雙方的配合,通信邏輯要特別注意,要做好通信的錯誤 冗余,不能因為某一次或者是某幾次通信錯誤就導(dǎo)致通信出現(xiàn)終止現(xiàn)象,建議在通 信超過一定時間沒有接收到正確的數(shù)據(jù)后重新啟動通信,重新啟動通信包括通信相 關(guān)的寄存器清零再重新配置,以及通信使用到的一些變量,包含數(shù)據(jù)緩存數(shù)組,以 及計數(shù)的相關(guān)變量都要進行清零,以保證通信邏輯出錯后重新啟動通信可以真實使 通信可以在最原始狀態(tài)開始運行。?

2、SSI/USCI 中的 UART 通訊使用注意事項?

1) USCI 的 UART 發(fā)送中斷標志 TI 和接收中斷標志 RI 在同一個寄存器上,此寄存器 不能位操作,所以在清除 TI 和 RI 時會對整個寄存器進行與操作,這樣當 UART 進 行全雙工通信時發(fā)送和接收中斷有可能同時產(chǎn)生,或者是兩者之間間隔時間很短, 會出現(xiàn) TI 或者 RI 被誤清除導(dǎo)致中斷丟失的風(fēng)險,因此在全雙工通信應(yīng)用場景中, 通信需要有容錯機制,不能因為某次中斷丟失就導(dǎo)致通訊崩潰,在發(fā)送數(shù)據(jù)后不能 通過死等發(fā)送標志來判斷發(fā)送是否完成,需要加入超時監(jiān)測保證在一段時間后可以 退出等待;?

2) 對于通信,要特別注意通信雙方的配合,通信邏輯要特別注意,要做好通信的錯誤 冗余,不能因為某一次或者是某幾次通信錯誤就導(dǎo)致通信出現(xiàn)終止現(xiàn)象,建議在通 信超過一定時間沒有接收到正確的數(shù)據(jù)后重新啟動通信,重新啟動通信包括通信相 關(guān)的寄存器清零再重新配置,以及通信使用到的一些變量,包含數(shù)據(jù)緩存數(shù)組,以 及計數(shù)的相關(guān)變量都要進行清零,以保證通信邏輯出錯后重新啟動通信,可以真實 使通信從最原始狀態(tài)開始運行。?

3、UART 波特率計算方式以及誤差大怎樣改善?

由于一般情況下波特率和芯片系統(tǒng)主頻都不是整數(shù)關(guān)系,所以計算得到的波特率發(fā)生器的 數(shù)值都不是整數(shù),但是寄存器的值只能賦整數(shù)值,所以大多數(shù)情況下波特率都是有偏差的, 在 UART 協(xié)議中通信雙方允許的最大波特率偏差為 5%,當應(yīng)用中必須選擇某個固定的波 特率,但是計算偏差又比較大時,建議用戶使用如下幾種方式進行改善:?

1) 建議用戶在使用中選擇計算偏差較小的波特率,另外在計算波特率時注意一下,采 用四舍五入的方法給波特率發(fā)生器賦值;?

2) 將通信雙方的波特率盡量往同一個方向偏,以減小通信雙方的波特率偏差;?

3) 賽元全系列芯片的 HRC 都是可調(diào)的,可以通過調(diào)節(jié) HRC 得到精準的波特率,但 是要注意 HRC 的調(diào)節(jié)不能超過芯片最高主頻的 10%,同時 HRC 調(diào)節(jié)之后,定時 器,PWM 等功能會受到影響,建議在 UART 發(fā)送前調(diào)節(jié) HRC,發(fā)送完成后再將 HRC 調(diào)回默認值。?

4、UART 數(shù)據(jù)發(fā)送不正常通常有哪些原因;?

UART 數(shù)據(jù)發(fā)送不正常可以從以下幾個方面進行檢查:?

1) 檢查波特率設(shè)置是否正確;?

2) 檢查 UART1 中斷內(nèi)部是否存在多個 SSDAT 賦值語句,導(dǎo)致數(shù)據(jù)錯誤;?

3) UART 的 TX 腳和 RX 腳所在的 IO 口都需要設(shè)置為輸入帶上拉模式,請確認是否 設(shè)置正確;?

4) 檢查是否 TI 未清 0,發(fā)送數(shù)據(jù)前把中斷關(guān)閉了,導(dǎo)致無法進中斷,無法執(zhí)行發(fā)送 程序;?

5) TXD 口的 IO 口狀態(tài)設(shè)置是否正確,92F 系列芯片需要設(shè)置 IO 口狀態(tài)為輸入帶上 拉,95F 系列可以設(shè)置為強推輸出高或者是輸入帶上拉模式;?

6) 仿真過程仿真口上的 UART 功能是失效的,查看是否在仿真下測試的;?

7) UART 設(shè)置是否正確,主頻設(shè)置是否正確,建議用示波器查看 UART 波形,觀察空 閑狀態(tài),起始位,結(jié)束位,波特率等信息是否正確;?

8) UART 程序邏輯錯誤;?

9) 檢查芯片供電是否正常。

5、UART 通訊一段時間之后數(shù)據(jù)出現(xiàn)錯誤,可能是什么原因?

UART 通訊一段時間之后出錯,可能的原因有:?

1) UART 的 TX 腳和 RX 腳所在的 IO 口都需要設(shè)置為輸入帶上拉模式,請確認是否 設(shè)置正確;?

2) 如果使用的是三合一的串口功能,需要注意 SSI 的 UART 發(fā)送中斷標志 TI 和接收 中斷標志 RI 在同一個寄存器上,此寄存器不能位操作,所以在清除 TI 和 RI 時會 對整個寄存器進行與操作,這樣當 UART 進行全雙工通信時發(fā)送和接收中斷有可 能同時產(chǎn)生,或者是兩者之間間隔時間很短,會出現(xiàn) TI 或者 RI 被誤清除導(dǎo)致中斷 丟失的風(fēng)險,因此在全雙工通信應(yīng)用場景中,通信需要有容錯機制,不能因為某次 中斷丟失就導(dǎo)致通訊崩潰,在發(fā)送數(shù)據(jù)后不能通過死等發(fā)送標志來判斷發(fā)送是否完 成,需要加入超時監(jiān)測保證在一段時間后可以退出等待或使用 UART0,UART0 的 中斷標志位在 SCON 寄存器上,SCON 寄存器可以位操作,所以不存在誤清除中 斷標志位的問題;?

3) 檢查外圍電路是否有將通訊腳電平拉高或者拉低的風(fēng)險,測試出現(xiàn)異常時 TX 腳和 RX 腳的波形,看是否為通訊腳上有干擾導(dǎo)致通訊出錯;?

4) 檢查程序中是否有其他地方操作了 UART 相關(guān)的寄存器,導(dǎo)致 UART 設(shè)置改變而 通訊失??;?

5) 檢查程序中是否有對 UART 的數(shù)據(jù)寄存器重復(fù)賦值,導(dǎo)致數(shù)據(jù)錯誤。?

6、使用賽元芯片,仿真口與 UART 復(fù)用時,仿真時不能仿真 UART 功能?

針對 UART 與仿真口復(fù)用的應(yīng)用,在仿真模式下仿真口默認為仿真功能,UART 功能無 法生效,可以用其他方式來調(diào)試 UART,例如:可以用有兩組 UART 的芯片來調(diào)試,先 用另一組 UART 來調(diào)試,調(diào)試完成后再將 UART 功能移植到仿真口對應(yīng)的 UART 上面。

UART 使用常見問題以及注意事項的評論 (共 條)

分享到微博請遵守國家法律
柯坪县| 建平县| 揭西县| 汽车| 桓台县| 东兰县| 怀化市| 泗水县| 安乡县| 枝江市| 龙陵县| 鄢陵县| 湘潭县| 浦江县| 耒阳市| 日土县| 德庆县| 新化县| 安丘市| 潜山县| 青州市| 石阡县| 天镇县| 大同市| 夏津县| 武胜县| 枣强县| 饶阳县| 墨脱县| 陇川县| 大化| 泸西县| 环江| 黑水县| 锡林浩特市| 高要市| 本溪市| 古丈县| 绥宁县| 花莲市| 邢台市|