商務(wù)網(wǎng)站的主要內(nèi)容企業(yè)網(wǎng)站排名優(yōu)化方案
1?通信接口
通信的目的:將一個(gè)設(shè)備的數(shù)據(jù)傳送到另一個(gè)設(shè)備,擴(kuò)展硬件系統(tǒng)
通信協(xié)議:制定通信的規(guī)則,通信雙方按照協(xié)議規(guī)則進(jìn)行數(shù)據(jù)收發(fā)
USRT:TX是數(shù)據(jù)發(fā)送引腳,RX是數(shù)據(jù)接受引腳;
I2C:SCL是(Serial?clock)時(shí)鐘,SDA(Serial Data)是數(shù)據(jù);
SPI:SCLK是時(shí)鐘(Serial Clock),MOSI(Master output Slave Input)主機(jī)輸出數(shù)據(jù)腳,MISO(Master intput Slave output)主機(jī)輸入數(shù)據(jù)腳,CS(chip select)?片選:用于指定通信對(duì)象;
CAN通信:引腳CAN_H、CAN_L,用兩個(gè)引腳表示差分?jǐn)?shù)據(jù);
USP通信:引腳是DP(Data?positive)和DM(Data Minus)(D+/D-),也是差分?jǐn)?shù)據(jù)腳。
全雙工:同時(shí)雙向通信,一般有兩根通信線(一根發(fā),一根收);
I2C和SPI有單獨(dú)時(shí)鐘線,所以它們是同步的,接收方可以在時(shí)鐘信號(hào)的指引下進(jìn)行采樣。
USART、I2C、SPI都是單端電平,即它們引腳的高低電平都是對(duì)GND的電壓差,還需要GND
CAN和USB是差分信號(hào),它是靠?jī)蓚€(gè)差分引腳的電壓差來傳輸信號(hào)的,不需要GND。提高抗干擾特性
1.1?串口通信
串口是一種應(yīng)用十分廣泛的通訊接口,串口成本低、容易使用、通信線路簡(jiǎn)單,可實(shí)現(xiàn)兩個(gè)設(shè)備的互相通信
單片機(jī)的串口可以使單片機(jī)與單片機(jī)、單片機(jī)與電腦、單片機(jī)與各式各樣的模塊互相通信,極大地?cái)U(kuò)展了單片機(jī)的應(yīng)用范圍,增強(qiáng)了單片機(jī)系統(tǒng)的硬件實(shí)力
USB轉(zhuǎn)串口模塊:把串口協(xié)議轉(zhuǎn)換成USB協(xié)議
陀螺儀傳感器模塊、藍(lán)牙串口模塊
1.2?硬件電路
簡(jiǎn)單雙向串口通信有兩根通信線(發(fā)送端TX和接收端RX)
TX與RX要交叉連接
當(dāng)只需單向的數(shù)據(jù)傳輸時(shí),可以只接一根通信線
當(dāng)電平標(biāo)準(zhǔn)不一致時(shí),需要加電平轉(zhuǎn)換芯片
1.3?電平標(biāo)準(zhǔn)
電平標(biāo)準(zhǔn)是數(shù)據(jù)1和數(shù)據(jù)0的表達(dá)方式,是傳輸線纜中人為規(guī)定的電壓與數(shù)據(jù)的對(duì)應(yīng)關(guān)系,串口常用的電平標(biāo)準(zhǔn)有如下三種;
TTL電平:+3.3V或+5V表示1,0V表示0
RS232電平:-3~-15V表示1,+3~+15V表示0
RS485電平:兩線壓差+2~+6V表示1,-2~-6V表示0(差分信號(hào))
1.4?串口參數(shù)及時(shí)序
波特率:串口通信的速率(Band、比特率)
波特率是1000bps,表示1m發(fā)送1000位,每一位的時(shí)間就是1ms
起始位:標(biāo)志一個(gè)數(shù)據(jù)幀的開始,固定為低電平
串口的空閑狀態(tài)是高電平,打破高電平
數(shù)據(jù)位:數(shù)據(jù)幀的有效載荷,1為高電平,0為低電平,低位先行
校驗(yàn)位:用于數(shù)據(jù)驗(yàn)證,根據(jù)數(shù)據(jù)位計(jì)算得來(奇偶校驗(yàn))
停止位:用于數(shù)據(jù)幀間隔,固定為高電平
發(fā)送0xf的電平
串口中,每一行字節(jié)都裝在一個(gè)數(shù)據(jù)幀里,每個(gè)數(shù)據(jù)幀由起始位、數(shù)據(jù)位、停止位組成的;第二張圖多了校驗(yàn)位。
1.5?串口時(shí)序
發(fā)送0x55,無校驗(yàn),波特率是9600,一位的時(shí)間是1/9600 = 104us
低位先行(0101 0101)-》(1010 1010)
發(fā)送0xAA,無校驗(yàn),波特率是9600,一位的時(shí)間是1/9600 = 104us
低位先行(1010 1010)-》(0101 0101)
下面同理
發(fā)送0x55,無校驗(yàn),波特率是4800,一位的時(shí)間是1/4800 = 208us
低位先行(0101 0101)-》(1010 1010)
發(fā)送0x55,加了偶校驗(yàn),波特率是4800,一位的時(shí)間是1/4800 = 208us
低位先行(0101 0101)-》(1010 1010),不用增加1
停止位也是可以設(shè)置的
上圖的停止位是一位,下圖的停止位是兩位。
2?USART簡(jiǎn)介
USART(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/異步收發(fā)器
USART是STM32內(nèi)部集成的硬件外設(shè),可根據(jù)數(shù)據(jù)寄存器的一個(gè)字節(jié)數(shù)據(jù)自動(dòng)生成數(shù)據(jù)幀時(shí)序,從TX引腳發(fā)送出去,也可自動(dòng)接收RX引腳的數(shù)據(jù)幀時(shí)序,拼接為一個(gè)字節(jié)數(shù)據(jù),存放在數(shù)據(jù)寄存器里
自帶波特率發(fā)生器,最高達(dá)4.5Mbits/s
可配置數(shù)據(jù)位長(zhǎng)度(8/9)、停止位長(zhǎng)度(0.5/1/1.5/2)
可選校驗(yàn)位(無校驗(yàn)/奇校驗(yàn)/偶校驗(yàn))
支持同步模式、硬件流控制、DMA、智能卡、IrDA、LIN
STM32F103C8T6 USART資源: USART1(APB2)、 USART2(APB1)、 USART3(APB1)
2.1 USART框圖
先忽略寄存器,看引腳部分。左上角有TX和RX,就是發(fā)送和接收引腳,后面幾個(gè)暫時(shí)不用管。
右上角是發(fā)送數(shù)據(jù)寄存器和接收數(shù)據(jù)寄存器,這兩個(gè)寄存器占用同一個(gè)地址。
TDR是只寫的,數(shù)據(jù)寫到TDR中;RDR是只讀的,數(shù)據(jù)從RDR讀出。
發(fā)送移位寄存器的作用是:把一個(gè)字節(jié)的數(shù)據(jù)一位一位地移出去,正好對(duì)應(yīng)串口協(xié)議的波形數(shù)據(jù)位。
工作方式:例如某時(shí)刻給TDR寫入0x55這個(gè)數(shù)據(jù),在寄存器里存儲(chǔ)是0101 0101,此時(shí)硬件檢測(cè)寫入了數(shù)據(jù),就會(huì)檢查當(dāng)前移位寄存器是不是有數(shù)據(jù)正在移位,如果沒有,這個(gè)0101 0101就會(huì)立刻全部移動(dòng)到發(fā)送移位寄存器,準(zhǔn)備發(fā)送;當(dāng)數(shù)據(jù)從TDR移動(dòng)到移位寄存器時(shí),會(huì)置一個(gè)標(biāo)志位TXE,發(fā)送寄存器空,檢查這個(gè)標(biāo)志位如果置1了,就可以在TDR寫入下一個(gè)數(shù)據(jù)了。當(dāng)TXE置1時(shí),數(shù)據(jù)其實(shí)沒有發(fā)送出去,只要數(shù)據(jù)從TDR轉(zhuǎn)移到發(fā)送移位寄存器了,TXE就會(huì)置1,就可以重新寫入數(shù)據(jù)了。
然后發(fā)送移位寄存器就會(huì)在下面這里的發(fā)生控制器的驅(qū)動(dòng)下,向右移位,然后一位一位的把數(shù)據(jù)輸出到TX引腳,這里實(shí)現(xiàn)向右移位的,所以正好和串口通信規(guī)定的低位先行是一致的。當(dāng)數(shù)據(jù)移位完成后,新的數(shù)據(jù)就會(huì)再次自動(dòng)的從TDR轉(zhuǎn)移到發(fā)送移位寄存器里來;如果當(dāng)前移位還沒有完成,TDR的數(shù)據(jù)就會(huì)進(jìn)行等待,一旦移位完成,就會(huì)立刻轉(zhuǎn)移過來。有了TDR和移位寄存器的雙重緩存,可以保證連續(xù)發(fā)送數(shù)據(jù)的時(shí)候,數(shù)據(jù)幀之間不會(huì)有空閑。簡(jiǎn)單來說,數(shù)據(jù)一旦從TDR轉(zhuǎn)移到移位寄存器了,不管有沒有完成,就立刻把下一個(gè)數(shù)據(jù)放在TDR等著,一旦移完了,新的數(shù)據(jù)就會(huì)立刻跟上。
接收端類似的。數(shù)據(jù)從RX引腳通向接收移位寄存器,在接收器控制驅(qū)動(dòng)下,一位一位的讀取RX電平,先放在最高位,然后向右移,移位8次之后,就能接收一個(gè)字節(jié)了,低位先行,所以接收移位寄存器是從高位往低位這個(gè)方向移動(dòng)的,之后當(dāng)一個(gè)字節(jié)移位完成后,這一個(gè)字節(jié)的數(shù)據(jù)就會(huì)整體的一下子轉(zhuǎn)移到接收數(shù)據(jù)移位寄存器RDR里,在轉(zhuǎn)移的過程中也會(huì)置一個(gè)標(biāo)志位RXNE(TX Not Empty,接收數(shù)據(jù)寄存器非空),當(dāng)檢測(cè)到RXNE置1后,就可以把數(shù)據(jù)讀走了,同樣,這里也是兩個(gè)寄存器進(jìn)行緩存,當(dāng)數(shù)據(jù)從移位寄存器轉(zhuǎn)移到RDR時(shí),就可以直接接收下一位幀數(shù)據(jù)了,這就是USART的整個(gè)工作流程。
下面是發(fā)送器控制,用來控制發(fā)送移位寄存器工作的,接收器控制是控制接收移位寄存器工作的。
左邊有硬件數(shù)據(jù)流控,如果發(fā)送設(shè)備發(fā)送的太快,接收設(shè)備來不及處理,就會(huì)出現(xiàn)數(shù)據(jù)覆蓋丟失的現(xiàn)象,有了流控,可以避免這個(gè)問題。兩個(gè)引腳,nRTS和nCTS,nRTS是請(qǐng)求發(fā)送,是輸出腳(能不能接收);nCTS是清除發(fā)送,是輸入腳(接收信號(hào)),n是低電平有效。(TX和CTS是一對(duì),RX和RTX是一對(duì))。
右邊是用于產(chǎn)生同步的時(shí)鐘信號(hào)。