衡阳派盒市场营销有限公司

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

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

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

Linux中裸機串口通信的基本方法

嵌入式開發(fā)愛好者 ? 來源:嵌入式開發(fā)愛好者 ? 作者:嵌入式開發(fā)愛好者 ? 2022-12-12 09:32 ? 次閱讀

大家好,我是ST。

今天主要和大家聊一聊,如何使用串口進行通信的方法。

第一:串口的基本簡介

串口又叫做串行接口,通常叫做COM接口,串行接口指的是數(shù)據(jù)一個一個的順序傳輸,通信線路簡單。使用兩條線即可實現(xiàn)雙向通信,一條用于發(fā)送,一條用于接收。

UART作為串口的一種,其工作原理也是將數(shù)據(jù)一位一位的進行傳輸,發(fā)送和接收各用一條線,因此通過 UART 接口與外界相連最少只需要三條線:TXD(發(fā)送)、RXD(接收)和 GND(地線)。

263e8604-7944-11ed-8abf-dac502259ad0.png

各個為含義如下:

空閑位:數(shù)據(jù)線在空閑狀態(tài)的時候為邏輯“1”狀態(tài),也就是高電平,表示沒有數(shù)據(jù)線空閑,沒有數(shù)據(jù)傳輸。

起始位:當(dāng)要傳輸數(shù)據(jù)的時候先傳輸一個邏輯“0”,也就是將數(shù)據(jù)線拉低,表示開始數(shù)據(jù)傳輸。

數(shù)據(jù)位:數(shù)據(jù)位就是實際要傳輸?shù)臄?shù)據(jù),數(shù)據(jù)位數(shù)可選擇 5~8 位,我們一般都是按照字節(jié)傳輸數(shù)據(jù)的,一個字節(jié) 8 位,因此數(shù)據(jù)位通常是 8 位的。低位在前,先傳輸,高位最后傳輸。

奇偶校驗位:這是對數(shù)據(jù)中“1”的位數(shù)進行奇偶校驗用的,可以不使用奇偶校驗功能。停止位:數(shù)據(jù)傳輸完成標(biāo)志位,停止位的位數(shù)可以選擇 1 位、1.5 位或 2 位高電平,一般都選擇 1 位停止位。

波特率:波特率就是 UART 數(shù)據(jù)傳輸?shù)乃俾剩簿褪敲棵雮鬏數(shù)臄?shù)據(jù)位數(shù),一般選擇 9600、19200、115200 等。

第二:UART的特點

①、兼容 TIA/EIA-232F 標(biāo)準(zhǔn),速度最高可到 5Mbit/S。

②、支持串行 IR 接口,兼容 IrDA,最高可到 115.2Kbit/s。

③、支持 9 位或者多節(jié)點模式(RS-485)。

④、1 或 2 位停止位。

⑤、可編程的奇偶校驗(奇校驗和偶校驗)。

⑥、自動波特率檢測(最高支持 115.2Kbit/S)。

接下來看一下UART幾個重要的寄存器,第一個就是 UART 的控制寄存器 1,即UARTx_UCR1(x=1~8)。

第二個寄存器UARTx_UFCR、UARTx_UBIR和UARTx_UBMR,寄存器UARTx_UFCR中要用的是位RFDIV(bit9:7),用來設(shè)置參考

2667332e-7944-11ed-8abf-dac502259ad0.png

通過這三個寄存器可以設(shè)置UART的波特率,波特率的計算公式為:

267ab930-7944-11ed-8abf-dac502259ad0.png? ?

Ref Freq:經(jīng)過分頻以后進入 UART 的最終時鐘頻率。

UBMR:寄存器 UARTx_UBMR 中的值。

UBIR:寄存器 UARTx_UBIR 中的值。

通過 UARTx_UFCR 的 RFDIV 位、UARTx_UBMR 和 UARTx_UBIR 這三者的配合即可得

到我們想要的波特率。比如現(xiàn)在要設(shè)置 UART 波特率為 115200,那么可以設(shè)置 RFDIV 為

5(0b101),也就是 1 分頻,因此 Ref Freq=80MHz。設(shè)置 UBIR=71,UBMR=3124,根據(jù)上面的

公式可以得到:

26b19a54-7944-11ed-8abf-dac502259ad0.png

第三:UART的配置步驟

1、設(shè)置 UART1 的時鐘源

設(shè)置 UART 的時鐘源為 pll3_80m,設(shè)置寄存器 CCM_CSCDR1 的 UART_CLK_SEL 位為 0

即可。

2、初始化 UART1

初始化 UART1 所使用 IO,設(shè)置 UART1 的寄存器 UART1_UCR1~UART1_UCR3,設(shè)置內(nèi)

容包括波特率,奇偶校驗、停止位、數(shù)據(jù)位等等。

4、使能 UART1

UART1 初始化完成以后就可以使能 UART1 了,設(shè)置寄存器 UART1_UCR1 的位 UARTEN

為 1。

5、編寫 UART1 數(shù)據(jù)收發(fā)函數(shù)

編寫兩個函數(shù)用于 UART1 的數(shù)據(jù)收發(fā)操作。

第四:代碼基本實現(xiàn)

先實現(xiàn)串口的頭文件的基寫法:

#ifndef _BSP_UART_H
#define_BSP_UART_H


//函數(shù)聲明
void uart_init(void);
void uart_to_init(void);
void uart_disable(UART_Type *base);
voiduart_enable((UART_Type*base);
#endif

函數(shù)聲明中,繼續(xù)編寫對應(yīng)的源文件內(nèi)容:

#include "uart.h"


//初始化串口1,波特率為115200
void uart_init(void)
{
//初始化串口IO
uart_io_init();

/*2、初始化UART1*/
uart_disable(UART1);/*先關(guān)閉UART1*/
uart_softreset(UART1);/*軟件復(fù)位UART1*/

UART1->UCR1=0;/*先清除UCR1寄存器*/
UART1->UCR1&=~(1<<14);?/*?關(guān)閉自動波特率檢測?*/
/*
?*?設(shè)置?UART?的?UCR2?寄存器,設(shè)置字長,停止位,校驗?zāi)J剑P(guān)閉硬件流控
?*?bit14:?1?忽略?RTS?引腳
?*?bit8:?0?關(guān)閉奇偶校驗
?*?bit6:?0?1?位停止位
?*?bit5:?1?8?位數(shù)據(jù)位
?*?bit2:?1?打開發(fā)送
?*?bit1:?1?打開接收
?*/
?UART1->UCR2|=(1<<14)?|?(1<<5)?|?(1<<2)?|?(1<<1);
?UART1->UCR3|=1<<2;?/*?UCR3?的?bit2?必須為?1?*/
?
?/*
?*?設(shè)置波特率
?*?波特率計算公式:Baud?Rate?=?Ref?Freq?/?(16?*?(UBMR?+?1)/(UBIR+1))?
?*?如果要設(shè)置波特率為?115200,那么可以使用如下參數(shù):
?*?Ref?Freq?=?80M?也就是寄存器?UFCR?的?bit9:7=101,?表示?1?分頻
?*?UBMR?=?3124
?*?UBIR?=?71
?*?因此波特率=?80000000/(16?*?(3124+1)/(71+1))
?*?=?80000000/(16?*?3125/72)?
?*?=?(80000000*72)?/?(16*3125)?
?*?=?115200
?*/
?UART1->UFCR=5<<7;?/*?ref?freq?等于?ipg_clk/1=80Mhz?*/
?UART1->UBIR=71;
UART1->UBMR=3124;

#if0
uart_setbaudrate(UART1,115200,80000000);/*設(shè)置波特率*/
#endif
uart_enable(UART1);/*使能串口*/
}

總結(jié):實現(xiàn)串口的基本功能,對后面利用串口來調(diào)試程序,具有重要的實踐意義。

審核編輯:湯梓紅

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

    關(guān)注

    87

    文章

    11345

    瀏覽量

    210391
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1243

    瀏覽量

    101768
  • 串口通信
    +關(guān)注

    關(guān)注

    34

    文章

    1627

    瀏覽量

    55728

原文標(biāo)題:Linux中裸機串口通信的基本方法

文章出處:【微信號:嵌入式開發(fā)愛好者,微信公眾號:嵌入式開發(fā)愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    基于Linux環(huán)境下串口通信的應(yīng)用設(shè)計

    本文介紹了Linux環(huán)境下串口通信的設(shè)計方法和步驟,并介紹了ARM9微處理器s3c2440在Linux下和C8051Fxxx系列單片機進行串
    發(fā)表于 05-24 10:50 ?2871次閱讀

    Linux裸機點燈

    Linux裸機
    怎么啦
    發(fā)布于 :2023年10月27日 08:47:24

    請問串口裸機程序只能在nand運行嗎?

    串口裸機程序只能在nand運行嗎?在UBOOT里用GO命令總是卡死在“Application Starting”那。這是為什么?還有,在LINUX想用USB向板子傳輸BIN文件怎么傳
    發(fā)表于 07-05 00:40

    linux裸機程序下載的兩種方法

    的UBOOT命令 nand 燒寫程序到開發(fā)板。 1,通過SD_Writer.exe將mmc.bin燒寫到SD 卡 ,將開發(fā)板設(shè)置到SD卡啟動。(具體方法參見飛凌開發(fā)板linux3.0.1用戶手冊.pdf) 2
    發(fā)表于 07-18 10:09

    Linux下ARM和單片機的串口通信設(shè)計資料分享

    /KaqA4mMbmq9AXnxgHWTAXQLinux下ARM和單片機的串口通信設(shè)計原創(chuàng) wonhere華和技術(shù)2016-04-15 本文介紹Linux 環(huán)境下串口
    發(fā)表于 12-13 06:32

    基于Labview的串口通信數(shù)據(jù)校驗和的實現(xiàn)方法

    基于Labview的串口通信數(shù)據(jù)校驗和的實現(xiàn)方法
    發(fā)表于 01-09 17:58 ?173次下載
    基于Labview的<b class='flag-5'>串口</b><b class='flag-5'>通信</b>數(shù)據(jù)校驗和的實現(xiàn)<b class='flag-5'>方法</b>

    組態(tài)軟件串口設(shè)備通信實現(xiàn)方法設(shè)計

    本文分析了組態(tài)軟件串口設(shè)備通信的原理及開發(fā)方法,并提出了一種使用VC++6.0開發(fā)組態(tài)軟件串口設(shè)備通信模塊的具體實現(xiàn)
    發(fā)表于 06-17 08:00 ?18次下載

    串口通信基本接線方法

    串口通信基本接線方法 目前較為常用的串口有9針串口(DB9)和25針串口(DB25),
    發(fā)表于 04-07 08:30 ?1w次閱讀

    基于Linux的ARM/單片機串口通信設(shè)計

    介紹Linux 環(huán)境下串口通信的設(shè)計方法和步驟,并介紹了ARM9 微處理器s3c2440 在Linux 下和C8051Fxxx 系列單片機進
    發(fā)表于 05-24 09:45 ?2833次閱讀
    基于<b class='flag-5'>Linux</b>的ARM/單片機<b class='flag-5'>串口</b><b class='flag-5'>通信</b>設(shè)計

    Linux下ARM 和單片機的串口通信設(shè)計

     介紹Linux 環(huán)境下串口通信的設(shè)計方法和步驟,并介紹了ARM9 微處理器s3c2440 在Linux 下和C8051Fxxx 系列單片機
    發(fā)表于 05-24 10:16 ?3492次閱讀
    <b class='flag-5'>Linux</b>下ARM 和單片機的<b class='flag-5'>串口</b><b class='flag-5'>通信</b>設(shè)計

    Linux下ARM和單片機的串口通信設(shè)計

    介紹Linux 環(huán)境下串口通信的設(shè)計方法和步驟,并介紹了ARM9 微處理器s3c2440 在Linux 下和C8051Fxxx 系列單片機進
    發(fā)表于 09-29 10:06 ?2031次閱讀
    <b class='flag-5'>Linux</b>下ARM和單片機的<b class='flag-5'>串口</b><b class='flag-5'>通信</b>設(shè)計

    如何編寫基于ARM的裸機程序和基于Linux的驅(qū)動程序

    在嵌入式開發(fā),ADC應(yīng)用比較頻繁,本文主要講解ADC的基本原理以及如何編寫基于ARM的裸機程序和基于Linux的驅(qū)動程序。
    的頭像 發(fā)表于 09-13 09:25 ?3404次閱讀
    如何編寫基于ARM的<b class='flag-5'>裸機</b>程序和基于<b class='flag-5'>Linux</b>的驅(qū)動程序

    Linux單片機串口通信總結(jié)

    這是一個目錄Linux與單片機串口通信運行ROS串口發(fā)送節(jié)點后異常中斷棧溢出問題catkin_make報錯:函數(shù)未定義的引用ERROR L107: ADDRESS SPACE OVER
    發(fā)表于 11-23 18:06 ?9次下載
    <b class='flag-5'>Linux</b>單片機<b class='flag-5'>串口</b><b class='flag-5'>通信</b>總結(jié)

    CC2530無線通信模塊使用串口通信參考方法

    CC2530無線通信模塊使用串口通信參考方法
    發(fā)表于 04-24 17:20 ?13次下載

    基于Linux的ARM和單片機的串口通信設(shè)計

    電子發(fā)燒友網(wǎng)站提供《基于Linux的ARM和單片機的串口通信設(shè)計.pdf》資料免費下載
    發(fā)表于 10-11 10:35 ?0次下載
    基于<b class='flag-5'>Linux</b>的ARM和單片機的<b class='flag-5'>串口</b><b class='flag-5'>通信</b>設(shè)計
    百家乐网| A8百家乐娱乐网| 百家乐官网玩法教材| 百家乐投法| 百家乐官网笑话| 大发888真钱游戏下载365| 乐享百家乐官网的玩法技巧和规则 | 明升 | 百家乐桌定制| 澳门百家乐官网游戏| 德州扑克教学视频| 赌博百家乐经验| 誉博百家乐官网开户导航| 时时彩论坛| 百家乐真人游戏赌场娱乐网规则 | 历史百家乐路单图| 百家乐官网赌场牌路分析| 188金宝博开户| 网络百家乐打揽| 真人百家乐官网作| 百家乐官网长玩必输| 大发888娱乐软件| 百家乐博彩资讯论坛| 百家乐官网游戏网上投注| 百乐门娱乐城| 威尼斯人娱乐城信誉怎样| 做生意买车白色风水| gt百家乐官网平台假吗| 娱乐城免费送彩金| 南京百家乐赌博现场被| 百家乐官网最新分析仪| 百家乐官网论坛在线提供| 亲朋棋牌手机版下载| 赌场百家乐图片| 做生意房子选哪个方位| 百家乐官网真人百家乐官网皇冠开户| 保时捷娱乐城可靠吗| 恒利百家乐的玩法技巧和规则| 大桥下做生意风水好吗| 百家乐官网珠盘路| 徐水县|