《物聯網系統設計與應用開發》課件3-4 任務4 串口通信_第1頁
《物聯網系統設計與應用開發》課件3-4 任務4 串口通信_第2頁
《物聯網系統設計與應用開發》課件3-4 任務4 串口通信_第3頁
《物聯網系統設計與應用開發》課件3-4 任務4 串口通信_第4頁
《物聯網系統設計與應用開發》課件3-4 任務4 串口通信_第5頁
已閱讀5頁,還剩21頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

并行通信和串行通信01CC2530串口通信03目錄任務:串口通信04異步通信和同步通信02并行通信和串行通信通信方式串行通信并行通信

微控制器與外設之間的數據通信方式,根據連線結構和傳送方式的不同,可以分為兩種:并行通信和串行通信。并行通信和串行通信ReceiverReceiverTransmitter并行通信串行通信并行接口是8車道大型高速公路,而串行接口更像是一條單車道鄉村小路。

并行通信:數據的各位(比特)同時由多根數據線傳送,傳輸數據速度快。

串行通信:在單根數據線上將數據一位(比特)一位(比特)地依次傳送。例如:要傳輸一個字節8bits的數據,并行通信用8根線,在1s中之內傳完。串行通信用一根線,在8s之內傳完。串行和并行通信之間的區別串行通信并行通信逐位發送數據,一次發送一位一次傳輸1個字節,8位同時發送需要1根數據線需要8根數據線通信速度慢通信速度快安裝成本低安裝成本高干擾低,優選用于長途通信抗干擾能力差,用于短距離通信示例:計算機到計算機計算機到多功能打印機并行通信應用場合:例如主機和打印機、復印機的通信,加快數據傳輸速度。并行通信和串行通信單片機、嵌入式系統等微處理器成本較低,支持較少量的輸入/輸出引腳,并且長距離傳輸數據,一般選擇串行通信。串行通信有兩種基本形式:同步和異步通信(1)同步通信①收發雙方在時鐘信號的控制下同步進行。②數據傳送是以數據塊(一組字符,字符串)為單位,字符與字符之間、字符內部的位與位之間都同步。③在一個數據塊內,字符與字符間無間隔。應用場合:電路實現相對復雜,通信網中,有大批量數據需要傳輸。同步通信和異步通信異步通信:是指數據傳送以字符為單位,字符與字符間的傳送是完全異步的(無時鐘信號)。①以字符為單位傳送信息,一次發送一個字符。②相鄰兩字符間的間隔是任意長。③異步傳輸的時候要加上起始位和結束位,否則接收方就不知道什么時候開始接收數據什么時候結束。應用場合:因為每個字符都需補加專門的同步信息,傳輸字符的輔助開銷多。異步方式適用于短距離、速率不高的情況。實現簡單,但傳輸速率較低。

同步通信和異步通信單片機主要使用異步通信模式串口什么是串口?串口是串行通信接口的簡稱,COM(clustercommunicationport)接口。是微控制器與其它設備傳送信息的一種標準接接口。電腦上RS232接口,DB9的物理接口,就是一種常見的串口。DB9每種接頭都有公頭和母頭之分,其中帶針狀的接頭是公頭,而帶孔狀的接頭是母頭DB9這種接口基本已被淘汰,慢慢用USB轉UART取代了RS232接口。USB轉TTL串口的小板,可以用USB擴展出一個串口。通過轉串口芯片模仿串口輸出,芯片為PL2303,需要安裝驅動。串口PL2303CC2530串口通信CC2530有兩個串口USART0和USART1;兩個USART

具有同樣的功能,可分別運行于異步模式(UART)和同步模式(SPI)。串口USART異步模式UART同步模式SPI使用同一時鐘使用各自的時鐘(UniversalSynchronous/AsynchronousReceiver/TransmitterUniversalAsynchronousReceiver/Transmitter(SerialPeripheralInterface)CC2530串口通信UART連接方式發送方接收方(2)UxGCR:USARTx通用控制寄存器(設置波特率用)(3)UxBAUD:USARTx波特率控制寄存器(設置波特率用)(2)CLKCONCMD:時鐘控制寄存器,設置系統時鐘頻率32MHz還是16MHz(設置波特率用)CC2530串口相關寄存器(1)PERCFG外設寄存器:選擇外設的I/O位置(4)UxCSR:USARTx控制和狀態寄存器

主要用于設置是是UART工作模式還是SPI工作模式(5)UxDBUF:USARTx接收/發送數據緩沖寄存器

用于存放發送和接收的數據(6)中斷標志:UTXxIF、URXxIF對于CC2530的串口通信,有如下幾個寄存器(x是USART的編號,為0或者1USART、定時器和ADC這樣的外設同樣也需要I/O口實現其功能,對于USART、定時器具有兩個可以選擇的位置對應它們的I/O引腳,如表所示。通過PERCFG寄存器可以設置兩個USART接口對應外部I/O引腳的映射關系:

位置1:RX0

---P0_2

TX0

---P0_3

RX1

---P0_5

TX1

---P0_4

位置2:RX0

---P1_4

TX0

---P1_5

RX1

---P1_7

TX1

---P1_6CC2530串口外設映射外設/功能P0P17654321076543210USART0UART

RTCTTXRX

Alt.2

RXTXRTCT

USART1UART

RXTXRTCT

Alt.2

RXTXRTCT

位置1位置2位置1位置2PERCFG外設控制寄存器:串口相關寄存器用以設置外設的I/O位置。0為備用位置11為備用位置2例如:使用備用位置1PERCFG=0x00;//外設控制寄存器USART0的IO位置:0為P0口位置1P0SEL|=0x0c;//P0_2,P0_3用作串口(外設功能)流控制說明數據在兩個串口之間傳輸時,常常會出現丟失數據的現象,如接收端數據緩沖區已滿,則此時繼續發送來的數據就會丟失。流控制能解決這個問題,當接收端數據處理不過來時,就會發出“不在接收”的信號,發送到就停止發送,直到收到“可以繼續發送”的信號在發送數據。注意:如果只有兩根線傳送數據的時候要關閉流控制。CC2530串口通信波特率

:指單位時間內傳送二進制數據的位數,以位/秒為單位,它是衡量串口傳送速度快慢的重要參數。

例如:假如數據傳送速率是120位/秒,則傳送的波特率為:120

注意:異步通信的傳送速度一般在50波特--19200波特之間。時鐘設置CC2530時鐘設置:用命令寄存器(CLKCONCMD)來改變系統時鐘源,用狀態寄存器(CLKCONSTA)來判斷改變后的寄存器是否穩定了。

CLKCONCMD&=~0x40;//設置系統時鐘源為32MHZ晶振

while(CLKCONSTA&0x40);//等待晶振穩定為32MCLKCONCMD&=~0x47;//設置系統主時鐘頻率為32MHZ波特率的計算

CC2530的波特率由BAUD_M和BAUD_E共同決定:

公式中的F為微控制器的系統時鐘頻率:16MHz或32MHz。

波特率設置設置波特率為115200時的參數值:U0BAUD=216;U0GCR=11;不同系統時鐘下各常用波特率的參數值(5)UxDBUF:USARTx接收/發送數據緩沖寄存器

用于存放發送和接收的數據串口相關寄存器注意:數據發送是以字符(即1個字節)為單位發送

當USART的發送/接收數據緩沖寄存器UxDBUF被寫入數據時,該字節就會發送到TXD引腳,開始數據的傳輸。由于UxDBUF是雙緩沖的,所以在發送開始后會立即觸發TX完成中斷標志UTX0IF,并且數據緩沖器被卸載,也就是說,當字節正在發送時,新的字節能夠裝入數據緩沖器UxDBUF。

在單字節的發送函數中,把要發送的數據寫入UxDBUF后,查詢TX完成標志UTX0IF,當該標志被置1時,表示數據發送完成,然后清除該標志。(6)中斷標志:UTXxIF、URXxIF串口初始化CC2530串口初始化的一般步驟:(1)時鐘初始化;(2)選擇外設引腳備用位置PERCFG=0x00(3)將相應IO口配置為外設功能。此處配置P0_2和P0_3用作串口UART0。

P0SEL=0x3C(4)選擇USART模式:UART或SPI。U0CSR=0x80(5)設置波特率

(信號傳輸的速率)

串口初始化代碼如下:PERCFG=0x00//位置1P0口P0SEL|=0x0c;//P0_2,P0_3用作串口(外部設備功能)U0CSR|=0x80;//設置為UART方式

U0GCR|=11;U0BAUD|=216;//波特率設為115200UTX0IF=0;//UART0TX中斷標志初始置位0任務:串口通信在無線傳感網絡中,CC2530需要將采集到的數據發送給上位機處理,同時上位機需要向CC2530發送控制信息,這一切都離不開兩者之間的信息傳遞。本任務就是實現CC2530與上位機的通信,串口通信程序流程圖如圖所示。

。程序設計流程圖

主函數主要實現了以下功能。(1)初始化時鐘和串口。(2)使用while(1)不斷地去試圖獲取接收的每一個字符。當此字符不為“#”時,則表示還未輸入完成,繼續將此字符添加到字符數組RxData中;當此字符正好為“#”時,則表示輸入完成。(3)跳出循環將RxData中的每一個字符按次序發送到PC端,同時重置count。程序分析程序分析voidmain(void){ CLKCONCMD&=~0x40;//設置系統時鐘源為32MHZ晶振while(CLKCONSTA&0x40);//等待晶振穩定為32MCLKCONCMD&=~0x47;//設置系統主時鐘頻率為32MHZInitUart();//調用串口初始化函數

UartState=UART0_RX;//串口0默認處于接收模式memset(RxData,0,SIZE);while(1){if(UartState==UART0_RX)//接收狀態

{if(RxBuf!=0){if(count<50)//以'#'為結束符,一次最多接收50個字符

RxData[count++]=RxBuf;else{if(count>=50)//判斷數據合法性,防止溢出{count=0;//計數清0memset(RxData,0,SIZE);//清空接收緩沖區}elseUartState=UART0_TX;//進入發送狀態

}RxBuf=0;}}if(UartState==UART0_TX)//發送狀態

{U0CSR&=~0x40;//禁止接收

UartSendString(RxData,count);//發送已記錄的字符串。U0CSR|=0x40;//允許接收

UartState=UART0_RX;//恢復到接收狀態

count=0;//計數清0memset(RxData,0,SIZE);//清空接收緩沖區}}}串口初始化的實現代碼如下:程序分析/*串口初始化函數*/voidInitUart(void){PERCFG=0x00;//外設控制寄存器USART0的IO位置:0為P0口位置1P0SEL=0x0c;//P0_2,P0_3用作串口(外設功能)

P2DIR&=~0xC0;//P0優先作為UART0

U0CSR|=0x80;//設置為UART方式

U0GCR|=11; U0BAUD|=216;//波特率設為115200UTX0IF=0;//UART0TX中斷標志初始置位0U0CSR|=0x40;//允許接收

IEN0|=0x84;//開總中斷允許接收中斷}串口發送字節、發送字符串和接收字節函數代碼如下:程序分析/*串口發送函數*/voidUartSendString(char*Data,intlen){uinti;

for(i=0;i<len;i++){U0DBUF=*Data++;while(UTX0IF==0);UTX0IF=0;}}/*串口中斷處理函數:當串口0產生接收中斷,將收到的數據保存在RxBuf中*/

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論