(二) STM32 串口通信基礎(chǔ)知識(shí)

1、串口通信簡(jiǎn)介

通信接口的兩種方式:

并行通信
-傳輸原理:數(shù)據(jù)各個(gè)位同時(shí)傳輸棒动。
-優(yōu)點(diǎn):速度快
-缺點(diǎn):占用引腳資源多

串行通信
-傳輸原理:數(shù)據(jù)按位順序傳輸宾添。
-優(yōu)點(diǎn):占用引腳資源少
-缺點(diǎn):速度相對(duì)較慢

目前使用最多的還是串行通信柜裸,即便速度相對(duì)較慢粱锐,所以下面都是講解串行通信。

①串口通信分類:

串口通信按照數(shù)據(jù)傳送方向铐然,分為:


在這里插入圖片描述

(1)單工:數(shù)據(jù)傳輸只支持?jǐn)?shù)據(jù)在一個(gè)方向上傳輸
(2)半雙工:允許數(shù)據(jù)在兩個(gè)方向上傳輸搀暑,但是跨琳,在某一時(shí)刻,只允許數(shù)據(jù)在一個(gè)方向上傳輸脉让,它實(shí)際上是一種切換方向的單工通信
(3)全雙工:允許數(shù)據(jù)同時(shí)在兩個(gè)方向上傳輸溅潜,因此,全雙工通信是兩個(gè)單工通信方式的結(jié)合滚澜,它要求發(fā)送設(shè)備和接收設(shè)備都有獨(dú)立的接收和發(fā)送能力

②STM32的串行通信的方式

同步通信:帶時(shí)鐘同步信號(hào)傳輸博秫。
異步通信:不帶時(shí)鐘同步信號(hào)眶掌。


在這里插入圖片描述

注意:一般所說的串口是USART(通用同步異步收發(fā)器),同步異步都支持的即寒。STM32F10x系列芯片召噩,包含3個(gè)USART和2個(gè)UART

2、STM32的串口通信原理

串口通信是單片機(jī)最基本的功能凹嘲,很多傳感器模塊與單片機(jī)的連接都會(huì)用到串口功能构韵。串口通信趋艘,顧名思義就是將一整條的內(nèi)容凶朗,切成一“串”個(gè)體來發(fā)送或接收。發(fā)送的核心思想是:將字符串中的一個(gè)字符寫到一個(gè)寄存器中(此寄存器只能存一個(gè)字符),寫入后會(huì)自動(dòng)通過串口發(fā)送搓萧,發(fā)送結(jié)束再寫入下一個(gè)字符宛畦。接收時(shí)會(huì)直接裝入單片機(jī)緩沖區(qū)的一個(gè)字符型數(shù)組中,由程序依次讀這個(gè)數(shù)組货矮。


在這里插入圖片描述

上圖是串口數(shù)據(jù)發(fā)送接收的過程做一個(gè)簡(jiǎn)單的圖示斯够。收發(fā)控制器根據(jù)寄存器配置,對(duì)數(shù)據(jù)存儲(chǔ)轉(zhuǎn)移部分的移位寄存器進(jìn)行控制抓督。當(dāng)需要發(fā)送數(shù)據(jù)時(shí)束亏,內(nèi)核或DMA外設(shè)把數(shù)據(jù)從內(nèi)存(變量)寫入到發(fā)送數(shù)據(jù)寄存器TDR后,發(fā)送控制器將自動(dòng)把數(shù)據(jù)從TDR加載到發(fā)送移位寄存器定铜,然后通過串口線TX,把數(shù)據(jù)一位一位地發(fā)送出去怕敬,在數(shù)據(jù)從TDR轉(zhuǎn)移到移位寄存器時(shí),會(huì)產(chǎn)生發(fā)送寄存器TDR已空事件TXE,當(dāng)數(shù)據(jù)從移位寄存器全部發(fā)送出去時(shí)畸陡,會(huì)產(chǎn)生數(shù)據(jù)發(fā)送完成事件TC,這些事件可以在狀態(tài)寄存器中查詢到虽填。而接收數(shù)據(jù)則是一個(gè)逆過程,數(shù)據(jù)從串口線RX一位一位地輸入到接收移位寄存器牲览,然后自動(dòng)地轉(zhuǎn)移到接收數(shù)據(jù)寄存器RDR,最后用內(nèi)核指令或DMA讀取到內(nèi)存(變量)中恶守。發(fā)送完畢或者接收完畢都會(huì)有相應(yīng)的狀態(tài)或者事件跛蛋,我們寫代碼時(shí)就可以通過這些事件來判斷是否接收或者發(fā)送完畢痊硕,然后做出下一步岔绸。

3、常用的串口相關(guān)寄存器

①USART_SR狀態(tài)寄存器
這個(gè)寄存器用到了10個(gè)位盒揉,也就代表有10中狀態(tài)標(biāo)志,每個(gè)標(biāo)志都可以作為中斷的標(biāo)志位羡洛,庫函數(shù)的定義如下:

#define USART_IT_PE             ((uint16_t)0x0028)
#define USART_IT_TXE            ((uint16_t)0x0727)
#define USART_IT_TC             ((uint16_t)0x0626)
#define USART_IT_RXNE           ((uint16_t)0x0525)
#define USART_IT_IDLE           ((uint16_t)0x0424)
#define USART_IT_LBD            ((uint16_t)0x0846)
#define USART_IT_CTS            ((uint16_t)0x096A)
#define USART_IT_ORE            ((uint16_t)0x0360)
#define USART_IT_NE             ((uint16_t)0x0260)
#define USART_IT_FE             ((uint16_t)0x0160)

在這里插入圖片描述
在這里插入圖片描述

②USART_DR數(shù)據(jù)寄存器
發(fā)送數(shù)據(jù)寄存器是TDR欲侮,接收數(shù)據(jù)寄存器是RDR肋联,都只用了前8位橄仍,發(fā)送和接收用到以下兩個(gè)函數(shù):

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
uint16_t USART_ReceiveData(USART_TypeDef* USARTx);

在這里插入圖片描述

4、串口配置的一般步驟

  1. 串口時(shí)鐘使能虑粥,GPIO時(shí)鐘使能:RCC_APB2PeriphClockCmd();

  2. GPIO端口模式設(shè)置:GPIO_Init(); 模式設(shè)置為GPIO_Mode_AF_PP

  3. 串口參數(shù)初始化:USART_Init();

  4. 開啟中斷并且初始化NVIC(如果需要開啟中斷才需要這個(gè)步驟)
    NVIC_Init();
    USART_ITConfig();

  5. 使能串口:USART_Cmd();

  6. 編寫中斷處理函數(shù):USARTx_IRQHandler();

  7. 串口數(shù)據(jù)收發(fā):
    void USART_SendData();//發(fā)送數(shù)據(jù)到串口宪哩,DR
    uint16_t USART_ReceiveData();//接受數(shù)據(jù),從DR讀取接受到的數(shù)據(jù)

  8. 串口傳輸狀態(tài)獲扔住:
    FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
    void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);

歡迎關(guān)注我的公眾號(hào):物聯(lián)網(wǎng)技術(shù)猿
我可以幫你免費(fèi)下載csdn積分資料B掎腹躁!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末纺非,一起剝皮案震驚了整個(gè)濱河市赘方,隨后出現(xiàn)的幾起案子弱左,更是在濱河造成了極大的恐慌,老刑警劉巖跳夭,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件们镜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡颈抚,警方通過查閱死者的電腦和手機(jī)嚼鹉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門锚赤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宴树,你說我怎么就攤上這事∮趾” “怎么了锭吨?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)躏将。 經(jīng)常有香客問我考蕾,道長(zhǎng),這世上最難降的妖魔是什么蚯窥? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮巍沙,結(jié)果婚禮上荷鼠,老公的妹妹穿的比我還像新娘。我一直安慰自己务甥,他們只是感情好喳篇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著挺尿,像睡著了一般炊邦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上窄俏,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天碘菜,我揣著相機(jī)與錄音,去河邊找鬼仰坦。 笑死计雌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的凿滤。 我是一名探鬼主播翁脆,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼溪椎!你這毒婦竟也來了恬口?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤歉秫,失蹤者是張志新(化名)和其女友劉穎养铸,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體兔甘,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鳞滨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年拯啦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片褒链。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡甫匹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出兵迅,到底是詐尸還是另有隱情,我是刑警寧澤篮绰,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布季惯,位于F島的核電站,受9級(jí)特大地震影響贾漏,放射性物質(zhì)發(fā)生泄漏藕筋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一伍掀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蜜笤,春花似錦、人聲如沸沪伙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至善绎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間禀酱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來泰國打工减途, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留曹洽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓税产,卻偏偏與公主長(zhǎng)得像偷崩,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子阐斜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 姓名:周崇杰 學(xué)號(hào):16140120059 專業(yè):機(jī)械設(shè)計(jì)制造及其自動(dòng)化 轉(zhuǎn)載自:http://blog.csd...
    CJbaby閱讀 3,491評(píng)論 0 3
  • 有一次做一個(gè)東西,為了盡量不占用CPU的處理數(shù)據(jù)時(shí)間,所以就使用DMA接收串口的數(shù)據(jù),但是呢問題來了.,,,,,怎...
    楊奉武閱讀 3,164評(píng)論 0 1
  • 筆者博客鏈接:蠟筆小新沒有博客希望可以和志同道合的朋友多交流隅俘! 串口通訊(Serial Communication...
    蠟筆小新沒有簡(jiǎn)書閱讀 2,374評(píng)論 0 1
  • USART為通用同步/ 異步收發(fā)器为居。stm32F103RC內(nèi)置了3個(gè)通用同步/異步收發(fā)器(USART1、USART...
    簡(jiǎn)小黑閱讀 8,807評(píng)論 0 0
  • houpanpan926閱讀 178評(píng)論 0 0