0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32串口通信基礎(chǔ)知識科普

xCb1_yikoulinux ? 來源:一口Linux ? 作者:一口Linux ? 2022-06-27 15:29 ? 次閱讀

設(shè)備之間通信的方式

一般情況下,設(shè)備之間的通信方式可以分成并行通信和串行通信兩種。并行與串行通信的區(qū)別如下表所示。

c675a1a0-f539-11ec-ba43-dac502259ad0.jpg

串行通信的分類

1、按照數(shù)據(jù)傳送方向,分為:

單工:數(shù)據(jù)傳輸只支持?jǐn)?shù)據(jù)在一個方向上傳輸;

半雙工:允許數(shù)據(jù)在兩個方向上傳輸。但是,在某一時刻,只允許數(shù)據(jù)在一個方向上傳輸,它實(shí)際上是一種切換方向的單工通信;它不需要獨(dú)立的接收端和發(fā)送端,兩者可以合并一起使用一個端口

全雙工:允許數(shù)據(jù)同時在兩個方向上傳輸。因此,全雙工通信是兩個單工通信方式的結(jié)合,需要獨(dú)立的接收端和發(fā)送端。

c6901076-f539-11ec-ba43-dac502259ad0.jpg

2、按照通信方式,分為:

同步通信:帶時鐘同步信號傳輸。比如:SPI,IIC通信接口。

異步通信:不帶時鐘同步信號。比如:UART(通用異步收發(fā)器),單總線。

在同步通訊中,收發(fā)設(shè)備上方會使用一根信號線傳輸信號,在時鐘信號的驅(qū)動下雙方進(jìn)行協(xié)調(diào),同步數(shù)據(jù)。例如,通訊中通常雙方會統(tǒng)一規(guī)定在時鐘信號的上升沿或者下降沿對數(shù)據(jù)線進(jìn)行采樣。

在異步通訊中不使用時鐘信號進(jìn)行數(shù)據(jù)同步,它們直接在數(shù)據(jù)信號中穿插一些用于同步的信號位,或者將主題數(shù)據(jù)進(jìn)行打包,以數(shù)據(jù)幀的格式傳輸數(shù)據(jù)。通訊中還需要雙方規(guī)約好數(shù)據(jù)的傳輸速率(也就是波特率)等,以便更好地同步。常用的波特率有4800bps、9600bps、115200bps等。

在同步通訊中,數(shù)據(jù)信號所傳輸?shù)膬?nèi)容絕大部分是有效數(shù)據(jù),而異步通訊中會則會包含數(shù)據(jù)幀的各種標(biāo)識符,所以同步通訊效率高,但是同步通訊雙方的時鐘允許誤差小,稍稍時鐘出錯就可能導(dǎo)致數(shù)據(jù)錯亂,異步通訊雙方的時鐘允許誤差較大。

常見的串行通信接口

c6aaf7ec-f539-11ec-ba43-dac502259ad0.jpg

STM32串口通信基礎(chǔ)

STM32的串口通信接口有兩種,分別是:UART(通用異步收發(fā)器)、USART(通用同步異步收發(fā)器)。而對于大容量STM32F10x系列芯片,分別有3個USART和2個UART。

UART引腳連接方法

RXD:數(shù)據(jù)輸入引腳,數(shù)據(jù)接受;

TXD:數(shù)據(jù)發(fā)送引腳,數(shù)據(jù)發(fā)送。

c6c25950-f539-11ec-ba43-dac502259ad0.jpg

對于兩個芯片之間的連接,兩個芯片GND共地,同時TXD和RXD交叉連接。這里的交叉連接的意思就是,芯片1的RxD連接芯片2的TXD,芯片2的RXD連接芯片1的TXD。這樣,兩個芯片之間就可以進(jìn)行TTL電平通信了。STM32與51單片機(jī)串口通信相關(guān)實(shí)例,請移步此處:STM32與51單片機(jī)串口通信實(shí)例。

c6d51efa-f539-11ec-ba43-dac502259ad0.jpg

若是芯片與PC機(jī)(或上位機(jī))相連,除了共地之外,就不能這樣直接交叉連接了。盡管PC機(jī)和芯片都有TXD和RXD引腳,但是通常PC機(jī)(或上位機(jī))通常使用的都是RS232接口(通常為DB9封裝),因此不能直接交叉連接。RS232接口是9針(或引腳),通常是TxD和RxD經(jīng)過電平轉(zhuǎn)換得到的。故,要想使得芯片與PC機(jī)的RS232接口直接通信,需要也將芯片的輸入輸出端口也電平轉(zhuǎn)換成RS232類型,再交叉連接。

經(jīng)過電平轉(zhuǎn)換后,芯片串口和RS232的電平標(biāo)準(zhǔn)是不一樣的:

單片機(jī)的電平標(biāo)準(zhǔn)(TTL電平):+5V表示1,0V表示0;

RS232的電平標(biāo)準(zhǔn):+15/+13 V表示0,-15/-13表示1。

RS-232通訊協(xié)議標(biāo)準(zhǔn)串口的設(shè)備間通訊結(jié)構(gòu)圖如下:

c6ec6754-f539-11ec-ba43-dac502259ad0.png

所以單片機(jī)串口與PC串口通信就應(yīng)該遵循下面的連接方式:在單片機(jī)串口與上位機(jī)給出的RS232口之間,通過電平轉(zhuǎn)換電路(如下面圖中的Max232芯片) 實(shí)現(xiàn)TTL電平與RS232電平之間的轉(zhuǎn)換。STM32與PC之間通信實(shí)例,請移步此處:STM32實(shí)例-用按鍵控制串口發(fā)送數(shù)據(jù),文末附代碼。

c7050e4e-f539-11ec-ba43-dac502259ad0.jpg

RS232串口簡介

臺式機(jī)電腦后面的9針接口就是com口(串口) 在工業(yè)控制 數(shù)據(jù)采集上應(yīng)用廣泛上圖中,最右邊的是串口接口統(tǒng)稱為RS232接口,是常見的DB9封裝。

c71fa2f4-f539-11ec-ba43-dac502259ad0.jpg

通信過程中只有兩個腳參與通信。

2腳:電腦的輸入RXD

3腳:電腦的輸出TXD 通過2 ,3 腳就可以實(shí)現(xiàn)全雙工(可同時收發(fā))的串行異步 通信

5腳:接地

單片機(jī)的P3口是有兩個復(fù)用接口RXD 和TXD。這是單片機(jī)進(jìn)行串行通信的收發(fā)口,連接應(yīng)該錯位的對應(yīng)到電腦的TDX RDX上。注意:單片機(jī)和RS232的電平標(biāo)準(zhǔn)是不一樣的。

單片機(jī)的電平標(biāo)準(zhǔn) TTL電平 :+5V表示1 0V表示0。

RS232的電平標(biāo)準(zhǔn) +15/+13 V表示1 -15/-13 表示0。

所以 單片機(jī)與電腦串口通信就應(yīng)該遵循下面的連接方式:

在單片機(jī)與上位機(jī)給出的RS232口之間通過電平轉(zhuǎn)換電路(最上面圖中的Max232芯片) 實(shí)現(xiàn)TTL電平與RS232電平之間的轉(zhuǎn)換,PC串口與單片機(jī)串口連接方式圖:

c7341978-f539-11ec-ba43-dac502259ad0.jpg

注意這兩個DB9:DB91是在電腦上的 DB92是在單片機(jī)實(shí)驗(yàn)板上焊接著的。

這里的交叉連接的意思是 DB91的RXD連著DB92的TXD。

DB92的RXD連著DB91的TXD這樣交叉著連接,如果電腦沒有RS232口 只有USB口,可以用串口轉(zhuǎn)接線轉(zhuǎn)出串口,如下圖所示。

c7519872-f539-11ec-ba43-dac502259ad0.jpg

這個時候在電腦上位機(jī)上需要安裝串口驅(qū)動程序。

注意,這個驅(qū)動程序驅(qū)動的是PL2303芯片(在上圖的大頭里面) 使得RS232信息轉(zhuǎn)換成USB信息。

下圖為上圖的內(nèi)部結(jié)構(gòu):

c76ad9b8-f539-11ec-ba43-dac502259ad0.jpg

用串口通信比USB簡單,因?yàn)榇谕ㄐ艣]有協(xié)議,使用方便簡單。

STM32的UART特點(diǎn)

全雙工異步通信;

分?jǐn)?shù)波特率發(fā)生器系統(tǒng),提供精確的波特率。發(fā)送和接受共用的可編程波特率,最高可達(dá)4.5Mbits/s;

可編程的數(shù)據(jù)字長度(8位或者9位);

可配置的停止位(支持1或者2位停止位);

可配置的使用DMA多緩沖器通信;

單獨(dú)的發(fā)送器和接收器使能位;

檢測標(biāo)志:

① 接受緩沖器

②發(fā)送緩沖器空

③傳輸結(jié)束標(biāo)志;

多個帶標(biāo)志的中斷源,觸發(fā)中斷;

其他:校驗(yàn)控制,四個錯誤檢測標(biāo)志。

串口通信過程

c77d2c9e-f539-11ec-ba43-dac502259ad0.jpg

STM32中UART參數(shù)

串口通訊的數(shù)據(jù)包由發(fā)送設(shè)備通過自身的TXD接口傳輸?shù)浇邮赵O(shè)備的RXD接口,通訊雙方的數(shù)據(jù)包格式要規(guī)約一致才能正常收發(fā)數(shù)據(jù)。

STM32中串口異步通信需要定義的參數(shù):起始位、數(shù)據(jù)位(8位或者9位)、奇偶校驗(yàn)位(第9位)、停止位(1,15,2位)、波特率設(shè)置。

UART串口通信的數(shù)據(jù)包以幀為單位,常用的幀結(jié)構(gòu)為:1位起始位+8位數(shù)據(jù)位+1位奇偶校驗(yàn)位(可選)+1位停止位。如下圖所示:

c79d2a76-f539-11ec-ba43-dac502259ad0.jpg

奇偶校驗(yàn)位分為奇校驗(yàn)和偶校驗(yàn)兩種,是一種簡單的數(shù)據(jù)誤碼校驗(yàn)方法。奇校驗(yàn)是指每幀數(shù)據(jù)中,包括數(shù)據(jù)位和奇偶校驗(yàn)位的全部9個位中1的個數(shù)必須為奇數(shù);偶校驗(yàn)是指每幀數(shù)據(jù)中,包括數(shù)據(jù)位和奇偶校驗(yàn)位的全部9個位中1的個數(shù)必須為偶數(shù)。

校驗(yàn)方法除了奇校驗(yàn)(odd)、偶校驗(yàn)(even)之外,還可以有:0 校驗(yàn)(space)、1 校驗(yàn)(mark)以及無校驗(yàn)(noparity)。0/1校驗(yàn):不管有效數(shù)據(jù)中的內(nèi)容是什么,校驗(yàn)位總為0或者1。

UART(USART)框圖

c7b0a3c6-f539-11ec-ba43-dac502259ad0.jpg

這個框圖分成上、中、下三個部分。本文大概地講述一下各個部分的內(nèi)容,具體的可以看《STM32中文參考手冊》中的描述。

框圖的上部分,數(shù)據(jù)從RX進(jìn)入到接收移位寄存器,后進(jìn)入到接收數(shù)據(jù)寄存器,最終供CPU或者DMA來進(jìn)行讀?。粩?shù)據(jù)從CPU或者DMA傳遞過來,進(jìn)入發(fā)送數(shù)據(jù)寄存器,后進(jìn)入發(fā)送移位寄存器,最終通過TX發(fā)送出去。

然而,UART的發(fā)送和接收都需要波特率來進(jìn)行控制的,波特率是怎樣控制的呢?

這就到了框圖的下部分,在接收移位寄存器、發(fā)送移位寄存器都還有一個進(jìn)入的箭頭,分別連接到接收器控制、發(fā)送器控制。而這兩者連接的又是接收器時鐘、發(fā)送器時鐘。也就是說,異步通信盡管沒有時鐘同步信號,但是在串口內(nèi)部,是提供了時鐘信號來進(jìn)行控制的。而接收器時鐘和發(fā)送器時鐘有是由什么控制的呢?

可以看到,接收器時鐘和發(fā)送器時鐘又被連接到同一個控制單元,也就是說它們共用一個波特率發(fā)生器。同時也可以看到接收器時鐘(發(fā)生器時鐘)的計算方法、USRRTDIV的計算方法。

原文標(biāo)題:STM32串口通信基本原理

文章出處:【微信公眾號:一口Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10918

    瀏覽量

    356814
  • 串行通信
    +關(guān)注

    關(guān)注

    4

    文章

    577

    瀏覽量

    35491
  • 并行通信
    +關(guān)注

    關(guān)注

    1

    文章

    31

    瀏覽量

    10842

原文標(biāo)題:STM32串口通信基本原理

文章出處:【微信號:yikoulinux,微信公眾號:一口Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    RS-232串口通信電子教程

    RS-232串口通信電子書內(nèi)容有串口通信基礎(chǔ)知識,用匯編語言開發(fā)串口
    發(fā)表于 12-13 12:56 ?209次下載
    RS-232<b class='flag-5'>串口</b><b class='flag-5'>通信</b>電子教程

    stm32串口調(diào)試軟件

    電子發(fā)燒友網(wǎng)站提供《stm32串口調(diào)試軟件.rar》資料免費(fèi)下載
    發(fā)表于 09-06 16:59 ?6次下載

    stm32f407串口通信的代碼

    stm32f407串口通信的代碼 原理圖還有封裝 很清楚自己畫的
    發(fā)表于 03-21 17:22 ?0次下載

    STM32串口通信數(shù)據(jù)亂碼的相關(guān)問題

    STM32串口通信以及溫度采集搞定,其中主要遇到STM32系列單片機(jī)時鐘樹的問題,串口通信遇到
    發(fā)表于 06-22 08:01 ?1.2w次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>數(shù)據(jù)亂碼的相關(guān)問題

    通信接口背景知識STM32串口原理資料下載

    電子發(fā)燒友網(wǎng)為你提供通信接口背景知識STM32串口原理資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計、用戶指南、解決方案等資料,希望可以
    發(fā)表于 03-28 08:40 ?34次下載
    <b class='flag-5'>通信</b>接口背景<b class='flag-5'>知識</b>與<b class='flag-5'>STM32</b><b class='flag-5'>串口</b>原理資料下載

    STM32串口通訊

    STM32串口通訊USART串口通信實(shí)踐USART串口通信實(shí)踐1、實(shí)驗(yàn)環(huán)境參考資料 野火官
    發(fā)表于 12-06 20:21 ?13次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b>通訊

    STM32串口通信

    STM32串口通信串口通信簡介編程代碼注意:本文參考STM32F10XXX數(shù)據(jù)手冊
    發(fā)表于 12-07 09:36 ?15次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>

    Stm32串口通信基礎(chǔ)實(shí)驗(yàn)

    目錄二、stm32串口通信二級目錄三級目錄二、stm32串口通信1.本次實(shí)驗(yàn)使用的是
    發(fā)表于 12-07 09:36 ?32次下載
    <b class='flag-5'>Stm32</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>基礎(chǔ)實(shí)驗(yàn)

    "2個STM32串口之間的串口通信(RX,TX)"

    "2個STM32串口之間的串口通信(RX,TX)"
    發(fā)表于 12-09 17:21 ?83次下載
    "2個<b class='flag-5'>STM32</b><b class='flag-5'>串口</b>之間的<b class='flag-5'>串口</b><b class='flag-5'>通信</b>(RX,TX)"

    串口通信基礎(chǔ)知識詳解

    目錄通信基礎(chǔ)知識STM32串口通信基礎(chǔ)(UART)串口通信
    發(fā)表于 12-20 19:20 ?14次下載
    <b class='flag-5'>串口</b><b class='flag-5'>通信</b><b class='flag-5'>基礎(chǔ)知識</b>詳解

    STM32中的串口通信基礎(chǔ)知識

    STM32串口異步通信需要定義的參數(shù)奇偶矯正位如果GPIO作為串口,如何配置輸入輸出模式?異步串口通信
    發(fā)表于 12-24 18:37 ?4次下載
    <b class='flag-5'>STM32</b>中的<b class='flag-5'>串口</b><b class='flag-5'>通信</b>的<b class='flag-5'>基礎(chǔ)知識</b>

    stm32串口代碼詳解

    stm32串口
    發(fā)表于 12-24 18:38 ?52次下載
    <b class='flag-5'>stm32</b><b class='flag-5'>串口</b>代碼詳解

    STM32串口通信

    STM32串口通信串口通信簡介編程代碼注意:本文參考STM32F10XXX數(shù)據(jù)手冊
    發(fā)表于 01-14 13:47 ?12次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>

    (二)STM32串口總結(jié)(庫函數(shù)版)

    STM32F103ZET6 來說的。意思很簡單,就是說你要用USB串口將程序燒寫到STM32中或者是要通過USB串口將電腦和STM32
    發(fā)表于 01-14 13:56 ?0次下載
    (二)<b class='flag-5'>STM32</b><b class='flag-5'>串口</b>總結(jié)(庫函數(shù)版)

    STM32串口通信簡明知識

    STM32串口通信簡明知識
    的頭像 發(fā)表于 10-25 15:48 ?1357次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>通信簡明知識</b>