改天把圖和數據傳上來了 再對着圖分析 各個UART中的各個概念
文件弄回來了 原始的是CSV格式的 原文件 放在Dbank 數據銀行上
這個是示波器一段的圖 上面的數據(原文件)就是這段的
Y的座標單位是 電壓值 V
X的單位是 時間 S 都是幾十uS的 從這個可以分析出來 是多大波特率的
UART的格式 可以通過程序設置 有些會在停止位之前有一個奇偶校驗之類的 停止位也不一定只是一個單位大小 可以設置爲1、1.5、2等
中間的數據位長度也可以設置位 6 7 8 位等
還有數據的傳輸順序 我這個是LSB先出的 所以可以看出
第一個數據 01010101 反過來就是10101010 =0xAA
第二個10101010 反過來01010101 0x55
第三個11001011 反過來 11010011 0xD3
第三個 11010000 反過來 00001011 0x0B
對着示波器 分析一遍之後 沒錯就是這樣的 就是傳的這些 也就是 數據和實際傳輸的信號 很好的對應上了
這個信號 是TXD 與 GND 之間的電壓信號 此時 RXD與GND之間 一直爲高電平電壓值
這就是 UART : Universal Asynchronous Receiver/Transmitter,通用異步接收/發送 異步 沒有時鐘 接受端得有相應的採樣時鐘 否則會亂的
對於波特率的問題 這份數據有記錄時間(具體精確的時間要看數據表) 好像記得在通信裏面有碼元這個概念 這裏就是1bit 波特率=1/(1bit的時長) 這份數據1bit的時長≈8.6*10^(-6)s 也就是8.6us 1/8.6us =116279.06976744Hz 也就是115200的波特率了 因爲那個8.6us的時間是估計的 而常用的波特率有這麼些:看圖片吧
也就是1200 1800 2400 4800 7200 9600 14400 19200 38400 57600 115200 128000 還有一些
115200 原來以爲速度還挺快的 用示波器看了之後 我再運行了一段代碼 輸出兩個引腳信號 來看時間 發現當運行一段不短的代碼之後串口才發完3、4個碼元(不是byte哦) 天哪 算一算 如果發16byte的數據 總共16*10(1bit起始位+8bit數據位+1bit的結束位)=160個碼元的時間 160*1/115200=0.0013888888888889 也就是1.38ms 有時候中斷都不知道發生多少次了 肯定 這也是相對的
UART裏面還有一個經常提到的 RS232 這是一種標準(協議 ) 就像說市電一樣的 就知道是220V RS-232 就是把TTL(0~5V) 轉換到10+V的電壓 提要電壓 可以增強抗干擾的能力 增加傳輸距離
一般用芯片來實現 MAX232 很典型 工作電壓5V 輸出有12V左右 和輸出的負載有關吧 例如TTL的邏輯1 232對應的就是 負10幾V 0對應的就是10+V 就是一個變換 變換後一般用9針的接口線 工程應用上就是這樣的 用到3根線 2、3、5 收發地