微機(jī)原理及單片機(jī)應(yīng)用技術(shù)-USART原理及應(yīng)用_第1頁
微機(jī)原理及單片機(jī)應(yīng)用技術(shù)-USART原理及應(yīng)用_第2頁
微機(jī)原理及單片機(jī)應(yīng)用技術(shù)-USART原理及應(yīng)用_第3頁
微機(jī)原理及單片機(jī)應(yīng)用技術(shù)-USART原理及應(yīng)用_第4頁
微機(jī)原理及單片機(jī)應(yīng)用技術(shù)-USART原理及應(yīng)用_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

西安文理學(xué)院自動化教研室

USART原理及應(yīng)用本講主要內(nèi)容 1.通信的基本概念 2.STM32F1的USART介紹 3.串口通信配置步驟 4.硬件電路 5.編寫串口通信控制程序

1.通信的基本概念

通信的方式可以分為多種,按照數(shù)據(jù)傳送方式可分為串行通信和并行通信。按照通信的數(shù)據(jù)同步方式,可分為異同通信和同步通信。按照數(shù)據(jù)的傳輸方向又可分為單工、半雙工和全雙工通信。下面我們就來簡單介紹這幾種通信方式。

1.1串行通信與并行通信(1)串行通信 串行通信是指使用一條數(shù)據(jù)線,將數(shù)據(jù)一位一位地依次傳輸,每一位數(shù)據(jù)占據(jù)一個(gè)固定的時(shí)間長度。其只需要少數(shù)幾條線就可以在系統(tǒng)間交換信息,特別適用于計(jì)算機(jī)與計(jì)算機(jī)、計(jì)算機(jī)與外設(shè)之間的遠(yuǎn)距離通信。串行通信的特點(diǎn):傳輸線少,長距離傳送時(shí)成本低,且可以利用電話網(wǎng)等現(xiàn)成的設(shè)備,但數(shù)據(jù)的傳送控制比并行通信復(fù)雜。(2)并行通信 并行通信通常是將數(shù)據(jù)字節(jié)的各位用多條數(shù)據(jù)線同時(shí)進(jìn)行傳送,通常是8位、16位、32位等數(shù)據(jù)一起傳輸。 并行通信的特點(diǎn):控制簡單、傳輸速度快;由于傳輸線較多,長距離傳送時(shí)成本高且接收方的各位同時(shí)接收存在困難,抗干擾能力差。1.2異步通信與同步通信(1)異步通信 異步通信是指通信的發(fā)送與接收設(shè)備使用各自的時(shí)鐘控制數(shù)據(jù)的發(fā)送和接收過程。為使雙方的收發(fā)協(xié)調(diào),要求發(fā)送和接收設(shè)備的時(shí)鐘盡可能一致。 異步通信是以字符(構(gòu)成的幀)為單位進(jìn)行傳輸,字符與字符之間的間隙(時(shí)間間隔)是任意的,但每個(gè)字符中的各位是以固定的時(shí)間傳送的,即字符之間不一定有“位間隔”的整數(shù)倍的關(guān)系,但同一字符內(nèi)的各位之間的距離均為“位間隔”的整數(shù)倍。 異步通信的特點(diǎn):不要求收發(fā)雙方時(shí)鐘的嚴(yán)格一致,實(shí)現(xiàn)容易,設(shè)備開銷較小,但每個(gè)字符要附加2~3位用于起止位,各幀之間還有間隔,因此傳輸效率不高。(2)同步通信 同步通信時(shí)要建立發(fā)送方時(shí)鐘對接收方時(shí)鐘的直接控制,使雙方達(dá)到完全同步。此時(shí),傳輸數(shù)據(jù)的位之間的距離均為“位間隔”的整數(shù)倍,同時(shí)傳送的字符間不留間隙,即保持位同步關(guān)系,也保持字符同步關(guān)系。發(fā)送方對接收方的同步可以通過兩種方法實(shí)現(xiàn)。

1.3單工、半雙工與全雙工通信(1)單工通信 單工是指數(shù)據(jù)傳輸僅能沿一個(gè)方向,不能實(shí)現(xiàn)反向傳輸。

(2)半雙工通信 半雙工是指數(shù)據(jù)傳輸可以沿兩個(gè)方向,但需要分時(shí)進(jìn)行。(3)全雙工通信 全雙工是指數(shù)據(jù)可以同時(shí)進(jìn)行雙向傳輸。

1.4通信速率

衡量通信性能的一個(gè)非常重要的參數(shù)就是通信速率,通常以比特率(Bitrate)來表示。比特率是每秒鐘傳輸二進(jìn)制代碼的位數(shù),單位是:位/秒(bps)。如每秒鐘傳送240個(gè)字符,而每個(gè)字符格式包含10位(1個(gè)起始位、1個(gè)停止位、8個(gè)數(shù)據(jù)位),這時(shí)的比特率為:10位×240個(gè)/秒=2400bps

2.STM32F1的USART介紹2.1串口通信簡介

串口通信(SerialCommunication),是指外設(shè)和計(jì)算機(jī)間,通過數(shù)據(jù)信號線、地線等,按位進(jìn)行傳輸數(shù)據(jù)的一種通信方式,屬于串行通信方式。串口是一種接口標(biāo)準(zhǔn),它規(guī)定了接口的電氣標(biāo)準(zhǔn),沒有規(guī)定接口插件電纜以及使用的協(xié)議。(1)接口標(biāo)準(zhǔn) 串口通信的接口標(biāo)準(zhǔn)有很多,有RS-232C、RS-232、RS-422A、RS-485等。常用的就是RS-232和RS-485。RS-232其實(shí)是RS-232C的改進(jìn),原理是一樣的。這里我們就以RS-232C接口進(jìn)行講解,RS-485在后面章節(jié)中會介紹。 RS-232C是EIA(美國電子工業(yè)協(xié)會)1969年修訂RS-232C標(biāo)準(zhǔn)。RS-232C定義了數(shù)據(jù)終端設(shè)備(DTE)與數(shù)據(jù)通信設(shè)備(DCE)之間的物理接口標(biāo)準(zhǔn)。 RS-232C接口規(guī)定使用25針連接器,簡稱DB25,連接器的尺寸及每個(gè)插針的排列位置都有明確的定義。

公頭和母頭的管腳定義順序是不一樣,這一點(diǎn)需要特別注意。常用管腳的功能如下:

RS-232C對邏輯電平也做了規(guī)定,如下在TXD和RXD數(shù)據(jù)線上:1.邏輯1為-3~-15V的電壓2.邏輯0為3~15V的電壓在RTS、CTS、DSR、DTR和DCD等控制線上:1.信號有效(ON狀態(tài))為3~15V的電壓2.信號無效(OFF狀態(tài))為-3~-15V的電壓

由此可見,RS-232C是用正負(fù)電壓來表示邏輯狀態(tài),與晶體管-晶體管邏輯集成電路(TTL)以高低電平表示邏輯狀態(tài)的規(guī)定正好相反

串口通信中還需要注意的是,串口數(shù)據(jù)收發(fā)線要交叉連接,計(jì)算機(jī)的TXD要對應(yīng)單片機(jī)的RXD,計(jì)算機(jī)的RXD要對應(yīng)單片機(jī)的TXD,并且共GND,如下圖:

(2)通信協(xié)議 RS232的通信協(xié)議比較簡單,通常遵循96-N-8-1格式。

2.2USART簡介

USART即通用同步異步收發(fā)器,它能夠靈活地與外部設(shè)備進(jìn)行全雙工數(shù)據(jù)交換,滿足外部設(shè)備對工業(yè)標(biāo)準(zhǔn)NRZ異步串行數(shù)據(jù)格式的要求。UART即通用異步收發(fā)器,它是在USART基礎(chǔ)上裁剪掉了同步通信功能,同步和異步主要看其時(shí)鐘是否需要對外提供,這個(gè)前面也介紹了。我們開發(fā)板上使用的STM32F103ZET6芯片含有3個(gè)USART,2個(gè)UART外設(shè)。它們都具有串口通信功能,USART它支持同步單向通信和半雙工單線通信;還支持LIN(域互連網(wǎng)絡(luò))、智能卡協(xié)議與IrDA(紅外線數(shù)據(jù)協(xié)會)SIRENDEC規(guī)范,以及調(diào)制解調(diào)器操作(CTS/RTS)。而且,它還支持多處理器通信和DMA功能,使用DMA可實(shí)現(xiàn)高速數(shù)據(jù)通信。USART通過小數(shù)波特率發(fā)生器提供了多種波特率。

USART在STM32中應(yīng)用最多的是printf輸出調(diào)試信息,當(dāng)我們需要了解程序內(nèi)的一些變量數(shù)據(jù)信息時(shí),可以通過printf輸出函數(shù)將這些信息打印到串口助手上顯示,這樣一來就給我們調(diào)試程序帶來了極大的方便。2.3USART結(jié)構(gòu)框圖參考《STM32F10x中文參考手冊》25章內(nèi)容

3.串口通信配置步驟

在上面的介紹中,可能有的朋友很不理解,不過沒有關(guān)系,下面我們講解如何使用庫函數(shù)對USART進(jìn)行配置。這個(gè)也是在編寫程序中必須要了解的。具體步驟如下:(USART相關(guān)庫函數(shù)在stm32f10x_usart.c和stm32f10x_usart.h文件中)。(1)使能串口時(shí)鐘及GPIO端口時(shí)鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA時(shí)鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1時(shí)鐘(2)GPIO端口模式設(shè)置,設(shè)置串口對應(yīng)的引腳為復(fù)用功能GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;(3)初始化串口參數(shù),包含波特率、字長、奇偶校驗(yàn)等參數(shù)voidUSART_Init(USART_TypeDef*USARTx,USART_InitTypeDef*USART_InitStruct);typedefstruct{uint32_tUSART_BaudRate;//波特率uint16_tUSART_WordLength;//字長uint16_tUSART_StopBits;//停止位uint16_tUSART_Parity;//校驗(yàn)位uint16_tUSART_Mode;//USART模式uint16_tUSART_HardwareFlowControl;//硬件流控制}USART_InitTypeDef;例如:USART_InitTypeDefUSART_InitStructure;USART_InitStructure.USART_BaudRate=9600;//波特率設(shè)置USART_InitStructure.USART_WordLength=USART_WordLength_8b;//字長為8位數(shù)據(jù)格式USART_InitStructure.USART_StopBits=USART_StopBits_1;//一個(gè)停止位USART_InitStructure.USART_Parity=USART_Parity_No;//無奇偶校驗(yàn)位USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//無硬件數(shù)據(jù)流控制USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx; //收發(fā)模式USART_Init(USART1,&USART_InitStructure);//初始化串口1(4)使能串口voidUSART_Cmd(USART_TypeDef*USARTx,FunctionalStateNewState);USART_Cmd(USART1,ENABLE);//使能串口1(5)設(shè)置串口中斷類型并使能voidUSART_ITConfig(USART_TypeDef*USARTx,uint16_tUSART_IT,FunctionalStateNewState);USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//開啟接收中斷USART_ITConfig(USART1,USART_IT_TC,ENABLE);對應(yīng)的串口中斷類型可在stm32f10x_usart.h中查找到(6)設(shè)置串口中斷優(yōu)先級,使能串口中斷通道NVIC初始化庫函數(shù)是NVIC_Init()(7)編寫串口中斷服務(wù)函數(shù)USART1_IRQHandlerITStatusUSART_GetITStatus(USART_TypeDef*USARTx,uint16_tUSART_IT);if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET){ ...//執(zhí)行USART1接收中斷內(nèi)控制}voidUSART_ClearFlag(USART_TypeDef*USARTx,uint16_tUSART_FLAG);第二個(gè)參數(shù)為狀態(tài)標(biāo)志選項(xiàng),可選參數(shù)可在stm32f10x_usart.h中查找到例如:voidUSART1_IRQHandler(void) //串口1中斷服務(wù)程序{ u8r; if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)//接收中斷 { r=USART_ReceiveData(USART1);//(USART1->DR); //讀取接收到的數(shù)據(jù) USART_SendData(USART1,r); while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET); } USART_ClearFlag(USART1,USART_FLAG_TC);}4.硬件電路參考開發(fā)板原理圖

串口通信實(shí)驗(yàn)硬件原理圖5.編寫串口通信控制程序本章所要實(shí)現(xiàn)的功能是:STM32F1通過USART1實(shí)現(xiàn)與PC機(jī)對話,STM32F1的USART1收到PC機(jī)發(fā)來的數(shù)據(jù)后原封不動的返回給PC機(jī)顯示。同時(shí)使用D1指示燈不斷閃爍提示系統(tǒng)正常運(yùn)行。STM32F103單片機(jī)的USART1與PC串口之間的通信速率和通信協(xié)議規(guī)定如下:數(shù)據(jù)傳輸波特率為115200bps,數(shù)據(jù)格式為8位數(shù)據(jù)位,無奇偶檢驗(yàn)位,1位停止位,無數(shù)據(jù)流控制。程序框架如下:(1)初始化USART1,并使能串口接收中斷等(2)編寫USART1中斷函數(shù)(3)編寫主函數(shù)

(1)初始化USART1,并使能串口接收中斷等voidUSART1_Init(u32bound){//GPIO端口設(shè)置 GPIO_InitTypeDefGPIO_InitStructure; USART_InitTypeDefUSART_InitStructure; NVIC_InitTypeDefNVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); /*配置GPIO的模式和IO口*/ GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX,串口輸出PA9 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

/*復(fù)用推挽輸出*/ GPIO_Init(GPIOA,&GPIO_InitStructure);/*初始化串口輸出*/ GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RX,串口輸入PA10 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA,&GPIO_InitStructure);/*初始化串口輸入*/

//USART1初始化設(shè)置USART_InitStructure.USART_BaudRate=bound;//波特率設(shè)置USART_InitStructure.USART_WordLength=USART_WordLength_8b;USART_InitStructure.USART_StopBits=USART_StopBits_1;USART_InitStructure.USART_Parity=USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//收發(fā)模式

USART_Init(USART1,&USART_InitStructure);//初始化串口1USART_Cmd(USART1,ENABLE);//使能串口

USART_ClearFlag(USART1,USART_FLAG_TC); USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//開啟相關(guān)中斷//Usart1NVIC配置NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;//串口1中斷通道NVIC_InitS

溫馨提示

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

評論

0/150

提交評論