<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > LPC1768-Cortex-M3學(xué)習(xí)日志-- UART0實(shí)驗(yàn)

          LPC1768-Cortex-M3學(xué)習(xí)日志-- UART0實(shí)驗(yàn)

          作者: 時(shí)間:2016-11-21 來源:網(wǎng)絡(luò) 收藏
          LPC1768的串口功能,只是簡(jiǎn)單的測(cè)試,下現(xiàn)先簡(jiǎn)單總結(jié)一下LPC1768串口。

          LPC1768含有4個(gè)符合16C550工業(yè)標(biāo)準(zhǔn)的異步串口UATR0-UART3,其中UART1具有標(biāo)準(zhǔn)的MODEM接口和RS232。至于RS232的標(biāo)準(zhǔn)是什么樣的,這里不在總結(jié)了,如果哪位有興趣可以上網(wǎng)查一下維基百科。RS-485是后期出現(xiàn)的一個(gè)傳輸標(biāo)準(zhǔn),關(guān)于它們的特性,下面列表總結(jié)一下:

          本文引用地址:http://www.ex-cimer.com/article/201611/319424.htm

          RS-232特性

          RS-485特性

          最高速率約為20kb/s

          與TTL電平兼容

          傳輸最大距離約為15m

          傳輸距離實(shí)際達(dá)1200m

          共模抑制比能力差

          共模抑制比能力強(qiáng)

          UATR0/2/3可以工作在UART模式下,也可以工作在IrDA模式下,IrDA是紅外數(shù)據(jù)組織(Infrared Data Association)的簡(jiǎn)稱,目前廣泛采用的IrDA紅外連接技術(shù)就是由該組織提出的。到目前為止,全球采用IrDA技術(shù)的設(shè)備超過了5000萬部。IrDA已經(jīng)制訂出物理介質(zhì)和協(xié)議層規(guī)格,以及2個(gè)支持IrDA標(biāo)準(zhǔn)的設(shè)備可以相互監(jiān)測(cè)對(duì)方并交換數(shù)據(jù)。初始的IrDA1.0標(biāo)準(zhǔn)制訂了一個(gè)串行,半雙工的同步系統(tǒng),傳輸速率為2400bps到115200bps,傳輸范圍1 m,傳輸半角度為15度到30度。最近IrDA擴(kuò)展了其物理層規(guī)格使數(shù)據(jù)傳輸率提升到4Mbps。IrDA數(shù)據(jù)協(xié)議由物理層,鏈路接入層和鏈路管理層三個(gè)基本層協(xié)議組成,另外,為滿足各層上的應(yīng)用的需要,IrDA棧支持IrLAP, IrLMP, IrIAS, IrIAP, IrLPT, IrCOMM, IrOBEX和IrLAN等。IrDA的優(yōu)點(diǎn)是成本低,體積小、功耗低,數(shù)據(jù)傳輸干擾小等。關(guān)于IrDA的協(xié)議與應(yīng)用這里暫時(shí)先不總結(jié),后續(xù)學(xué)習(xí)中會(huì)再慢慢涉及到,屆時(shí)將做深入研究。UATR1具有MODEM接口,能過該接口可以接入電話網(wǎng)絡(luò),實(shí)現(xiàn)遠(yuǎn)距離通訊。至于怎么通訊,這里也暫時(shí)不總結(jié),因?yàn)檫@一塊懶貓也沒有深入研究。

          關(guān)于串口的配置主要涉及到引腳的配置,波特率的配置,幀格式的設(shè)置及FIFO設(shè)置等。涉及到的寄存器主要有接收緩沖寄存器,它包含即將讀取的接收數(shù)據(jù)。發(fā)送保持寄存器,它主要是用來寫入發(fā)送數(shù)據(jù)的,中斷使能寄存器IER,若是用到中斷接收或發(fā)送時(shí)需配置些寄存器,與之相關(guān)聯(lián)的寄存器還有中斷標(biāo)志寄存器IIR。還有FIFO控制寄存器FCR,它是用來配置先進(jìn)先出相關(guān)的東東的。線控制寄存器LCR,這個(gè)寄存器主要就是用來設(shè)置幀格式的,與這個(gè)寄存器相關(guān)聯(lián)的寄存器是線狀態(tài)寄存器LSR,用來讀取幀格式狀態(tài)的寄存器。當(dāng)然還有緩存寄存器SCR,這個(gè)與串口操作關(guān)系不大。還有自動(dòng)波特率控制器ACR,配置程序自適應(yīng)波特率的。還有IrDA控制寄存器,它與紅外發(fā)送與接收有關(guān)。小數(shù)分頻寄存器FDR,它是波特率配置有關(guān)。傳輸使能寄存器TER,如果這個(gè)寄存器的TXEN配置為1,剛只要緩存中有有效數(shù)據(jù),就可以通過發(fā)送引腳把數(shù)據(jù)發(fā)送出去。還有一個(gè)寄存器FIFO等級(jí)寄存器FIFOLVL,它是個(gè)只讀寄存器,用來讀取當(dāng)前FIFO等級(jí)狀態(tài)。此次實(shí)驗(yàn)我是用查詢方式發(fā)送字符到串口,所以很大寄存器沒有用到,關(guān)于寄存器的詳細(xì)說明可以參考LPC1768的數(shù)據(jù)手冊(cè),這里就不再照搬手冊(cè)了。下面簡(jiǎn)單說一下這次實(shí)驗(yàn)電路圖,主要是一個(gè)按鍵,8個(gè)LED燈,還有串口0,功能就是按一下按鍵亮一個(gè)燈,等全亮?xí)r,再按按鍵燈全來,然后再按按鍵時(shí)第按一下點(diǎn)亮一個(gè),循環(huán)往復(fù),同時(shí)哪個(gè)燈亮,就發(fā)送字符“LedXon”,下面是這次實(shí)驗(yàn)的電路圖:



          1-1實(shí)驗(yàn)電路圖

          下面簡(jiǎn)單說一下這個(gè)軟件,軟件主要分為兩大部分,一個(gè)是關(guān)于串口配置及常用的函數(shù),另一個(gè)就是主LED點(diǎn)燈程序,分別在UART.C與MAIN.C兩個(gè)源文件中,下面把部分代碼帖出來,完整部分請(qǐng)參閱附件:

          (1)、uart.c源文件

          #include "includes.h"

          void UARTInit( uint32_t PortNum, uint32_t baudrate )

          {

          uint32_t Fdiv;

          if ( PortNum == 0 )

          {

          PINCON->PINSEL0 |= (1 << 4);

          PINCON->PINSEL0 |= (1 << 6);

          UART0->LCR= 0x83;

          Fdiv = (SystemFrequency/4/ 16) / baudrate;

          UART0->DLM= Fdiv / 256;

          UART0->DLL= Fdiv % 256+1;

          UART0->LCR= 0x03;

          UART0->FCR= 0x07;

          }

          else if ( PortNum == 1 )

          {

          PINCON->PINSEL4 |= (1<<1);

          PINCON->PINSEL4 |= (1<<3);

          UART1->LCR = 0x83;

          Fdiv = (SystemFrequency/4/16)/ baudrate ;

          UART1->DLM = Fdiv/256;

          UART1->DLL = (Fdiv%6)+1;

          UART1->LCR = 0x03;

          UART1->FCR = 0x07;

          }

          }

          void UARTSend( uint32_t portNum, uint8_t *BufferPtr, uint32_t Length )

          {

          if ( portNum == 0 )

          {

          while ( Length != 0 )

          {

          while ( !(UART0->LSR & 0x20) );

          UART0->THR = *BufferPtr;

          BufferPtr++;

          Length--;

          }

          }

          else

          {

          while ( Length != 0 )

          {

          while ( !(UART1->LSR & 0x20));

          UART1->THR = *BufferPtr;

          BufferPtr++;

          Length--;

          }

          }

          return;

          }

          int UART0_SendByte (int ucData)

          {

          while (!(UART0->LSR & 0x20));

          return (UART0->THR = ucData);

          }

          void UART0_SendString (unsigned char *s)

          {

          while (*s != 看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();