操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    ?本案例的梳理總結(jié)源于解決國慶假期間愛修網(wǎng)論壇一位擁有RT809F(固件版本V1.0)和RT809H客戶問題,原貼查看請點(diǎn)底部閱讀原文。

    主要問題點(diǎn)有兩個(gè):

    1、使用RT809H時(shí),打印信息正常但不能進(jìn)入控制臺;

    可能原因:RX TX GND線未接好(TX:發(fā)送);電視軟件關(guān)閉了串口;SecureCRT工具的流控制下面被打勾了;

    2、使用RT809F時(shí),打印信息亂碼;

    可能原因:RX TX GND線未接好或未接對位置;波特率未選對。


    經(jīng)過遠(yuǎn)程處理后確認(rèn):

    第一個(gè)問題:使用RT809H時(shí)不能進(jìn)控制臺的因素是控制臺下面的流控制被打勾了,SecureCRT正常情況連接時(shí)設(shè)置如下圖:




    只有紅框內(nèi)兩個(gè)選項(xiàng)隨電腦系統(tǒng)及所修板卡主芯片的不同而變化,其余保持如圖即可。


    第二個(gè)問題:使用RT809F時(shí),同樣的連接線和主板出現(xiàn)了亂碼現(xiàn)象。

    此案例中由于H上打印信息正常的,所以排除線材問題及串口所處位置問題。

    1、先要了解一下 VGA ISP定制線,點(diǎn)藍(lán)色字直達(dá);

    2、看編程器的固件版本,如下圖:


    編程器固件版本對應(yīng)不同的硬件


    初代的VGA ISP的外殼未接地(后續(xù)的版本均已接地),而現(xiàn)在定制的VGA ISP的轉(zhuǎn)接線部分是以外殼接地的,從而造成這個(gè)現(xiàn)象,只在RT809F V1.0上存在,而現(xiàn)在解決這個(gè)也很簡單,按下圖處理即可:


    將標(biāo)紅的位置刮開,焊錫連接在一起后即可。



    報(bào)名聯(lián)系方式

    國內(nèi)

    電話:020-28667686(潘老師)

    微信:RDDZ2017

    目前11月僅剩兩個(gè)位置啦

    可以預(yù)約12月哦

    平時(shí)使用串口打印出現(xiàn)亂碼的絕大部分原因是串口波特率沒對。那么我們怎么測量實(shí)際的波特率呢?在這之前,順便一起回顧一下波特率的概念。

    什么是波特率、比特率?

    比特率(Bitrate)表示每秒鐘傳輸?shù)亩M(jìn)制位數(shù),單位為比特每秒(bit/s)。

    波特率(Baudrate)表示每秒鐘傳送的碼元符號的個(gè)數(shù),是衡量數(shù)據(jù)傳送速率的指標(biāo)。

    碼元是通訊信號調(diào)制的概念,通訊中常用時(shí)間間隔相同的符號來表示一個(gè)二進(jìn)制數(shù)字,這樣的信號稱為碼元。

    常見的通訊傳輸中,用 0V 表示數(shù)字 0, 5V 表示數(shù)字 1,那么一個(gè)碼元可以表示兩種狀態(tài) 0 和 1,所以一個(gè)碼元等于一個(gè)二進(jìn)制比特位,此時(shí)波特率的大小與比特率一致。

    如果在通訊傳輸中,有 0V、2V、 4V 以及 6V 分別表示二進(jìn)制數(shù) 00、 01、 10、 11,那么每個(gè)碼元可以表示四種狀態(tài),即兩個(gè)二進(jìn)制比特位,所以碼元數(shù)是二進(jìn)制比特位數(shù)的一半,這個(gè)時(shí)候的波特率為比特率的一半。

    因?yàn)楹芏喑R姷耐ㄓ崳ū热绱谕ㄓ崳┲幸粋€(gè)碼元都是表示兩種狀態(tài),所以大家常常直接以波特率來表示比特率 。

    串口通訊協(xié)議

    在串口通訊的協(xié)議層中,規(guī)定了數(shù)據(jù)包的內(nèi)容,它由啟始位、主體數(shù)據(jù)、校驗(yàn)位以及停止位組成,通訊雙方的數(shù)據(jù)包格式要約定一致才能正常收發(fā)數(shù)據(jù),其數(shù)據(jù)幀組成如下:

    下面我們來實(shí)際驗(yàn)證一下其數(shù)據(jù)幀是不是真的是這樣的。編寫如下代碼:

    代碼很簡單,就是使用串口不斷地往外發(fā)數(shù)據(jù) 0xAA(當(dāng)然發(fā)送其它數(shù)據(jù)也是可以的) 。我們的串口配置如下:

    我們可以使用示波器或者邏輯分析儀抓取實(shí)際信號看看數(shù)據(jù)是不是符合上面的幀格式。這里,我們使用邏輯分析儀抓取 USART1 的發(fā)送信號線(TX):

    從實(shí)際結(jié)果中我們可以看到的確是按幀格式來發(fā)的。這里可能會有人有疑問,上面那個(gè)數(shù)據(jù)幀的圖片中有個(gè)空閑狀態(tài),這個(gè)又是什么呢?空閑、空閑,當(dāng)然是沒有在發(fā)數(shù)據(jù)時(shí)候的狀態(tài)呀,我們把我們的代碼改為:

    在初始化完成之后只發(fā)送一次 0xAA,邏輯分析儀抓到的數(shù)據(jù)為:

    可見,空閑狀態(tài)是個(gè)高電平。在上一個(gè)的范例中,我們一直在 while 循環(huán)中發(fā)送數(shù)據(jù) 0xAA,所以就沒有空閑狀態(tài)。

    在這個(gè)實(shí)驗(yàn)中我們需要知道的是兩個(gè)點(diǎn)是:

    串口發(fā)送數(shù)據(jù)是低位先發(fā)的。我們單片機(jī)發(fā) 0xAA(10101010B),所以邏輯分析儀抓到的有效數(shù)據(jù)是 01010101B。

    單片機(jī)的串口使用的是 TTL 電平,為正邏輯電平信號。邏輯分析儀抓到的數(shù)據(jù) 0 對應(yīng)著實(shí)際電壓 0~0.5V,數(shù)據(jù) 1 對應(yīng)著實(shí)際電壓 2.4V-5V,

    經(jīng)常與 TTL 電平標(biāo)準(zhǔn)做對比的是 RS-232 電平標(biāo)準(zhǔn),如:

    常見的電子電路中常使用 TTL 的電平標(biāo)準(zhǔn),理想狀態(tài)下,使用 5V 表示二進(jìn)制邏輯 1,使用 0V 表示邏輯 0;而為了增加串口通訊的遠(yuǎn)距離傳輸及抗干擾能力,RS-232 電平標(biāo)準(zhǔn)使用 -15V 表示邏輯 1, +15V 表示邏輯 0。

    在舊式的臺式計(jì)算機(jī)中一般會有 RS-232 標(biāo)準(zhǔn)的 COM 口(也稱 DB9 接口) :

    在這個(gè)示例程序中,我們設(shè)置的串口波特率為 115200bps。在串口通訊中,碼元只用 1 個(gè)二進(jìn)制數(shù)來表示(即只有 0 和 1 兩種狀態(tài)),所以波特率與比特率在數(shù)值上是相等的。

    而比特率表示的是每秒鐘傳輸?shù)亩M(jìn)制位數(shù),那我們知道傳一位數(shù)據(jù)的時(shí)間豈不是就可以反推出波特率是多少了嗎?從邏輯分析儀中,我們可以知道發(fā)送一位數(shù)據(jù)的時(shí)間如下:

    發(fā)送一位數(shù)據(jù)的時(shí)間大約為 8.667us,所以 1 秒鐘發(fā)送多少位數(shù)據(jù)是可以算出來的:

    算出來的波特率為 115380bps,與 115200bps 很相近。最終肯定是有一定的誤差,這個(gè)誤差產(chǎn)生的原因包括邏輯分析儀的質(zhì)量及我們的測量環(huán)境等等因素。但是這個(gè)誤差也是在允許的范圍內(nèi)的,可以看看串口助手接收到的數(shù)據(jù)是不是正確的:

    可見,數(shù)據(jù)接收正確,也就是波特率對的上了。

    串口波特率對不上怎么解決?

    在實(shí)際中。我們可能會遇到這樣的情況,代碼里配置的波特率與串口助手上設(shè)置的波特率一樣了,但還是出現(xiàn)異常情況。

    異常情況如我們往串口助手發(fā)送字符串,串口助手上本該顯示的字符串出現(xiàn)了亂碼。或者我們往串口助手發(fā)送一個(gè)數(shù)據(jù),發(fā)現(xiàn)數(shù)據(jù)移位了。

    出這種情況大多是波特率對應(yīng)不上,我們就得自己檢查我們的底層文件了,代碼中的某個(gè)與波特率計(jì)算相關(guān)的值(時(shí)鐘)與實(shí)際不匹配了,就會出現(xiàn)這樣的現(xiàn)象,比如之前我的一位同事就遇到這樣的情況就是這個(gè)原因?qū)е碌摹?/p>

    我們用 STM32 的時(shí)候,一般都是使用外部晶振,比如 STM32F103 系列,可輸入的外部晶振的范圍是 4~16MHz:

    經(jīng)驗(yàn)值往往是 8MHz,而且一般的 demo 工程底層代碼里默認(rèn)的也是設(shè)置為 8MHz,比如:

    但是,如果實(shí)際晶振貼的不是 8M 的話,就出問題了(比如串口波特率就不正確了)。追根溯源,串口波特率是配進(jìn) USART_Init 函數(shù)中的,打開這個(gè)函數(shù):

    計(jì)算串口波特率需要一個(gè) apbclock 變量,而這個(gè)值得來源從 RCC_GetClocksFreq 函數(shù)來,再打開這個(gè)函數(shù):

    所以要注意的是,HSE_VALUE 這個(gè)值要與實(shí)際做對應(yīng)。

    遇到這種問題找誰說理去。。經(jīng)驗(yàn)就是不斷采坑不斷積累的一個(gè)過程,早點(diǎn)遇到坑可能也是一件好事。像類似底層的問題很少遇到,但是一旦遇到那就得比較棘手的問題了,需要很有耐心地去查找。

    能用穩(wěn)定的芯片是一件很幸福的事情,用不穩(wěn)定、不成熟的芯片的時(shí)候,那個(gè)才是真的難啊,遇到問題真是讓人懷疑人生啊,軟件、硬件、芯片都可能有問題。

網(wǎng)站首頁   |    關(guān)于我們   |    公司新聞   |    產(chǎn)品方案   |    用戶案例   |    售后服務(wù)   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區(qū)    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權(quán)所有