詳細解讀:MSP430G2553單片機串口通信

2020-12-25 電子產品世界

  MSP430的不同型號,其串行通訊工作模式是一樣的。以MSP430G2553為例進行說明。MSP430G2553是20個引腳的16位單片機。具有內置的16位定時器、16k的FLASH和512B的RAM,以及一個通用型模擬比較器以及採用通用串行通信接口的內置通信能力。此外還具有一個10位的模數(A/D)轉換器。這裡我們詳細說明MSP430G2553串口通信。其引腳排布如圖1.1所示。其功能表如表1.1所示。

本文引用地址:http://www.eepw.com.cn/article/201710/366362.htm

  串行通訊模塊主要由三個部分組成:波特率生成部分、發送控制器以及接收控制器。如圖1.2所示。

  

  

  

  一、UART模式

  在異步模式下,接收器自身實現幀的同步,外部的通訊設備並不使用這一時鐘。波特率的產生是在本地完成的。異步幀格式由1個起始位、7或8個數據位、校驗位(奇/偶/無)、1個地址位、和1或2個停止位。一般最小幀為9個位,最大為13位。

  (一)UART的初始化

  單片機工作的時鐘源來自內部三個時鐘或者外部輸入時鐘,由SSEL1、SSEL0,以決定最終進入模塊的時鐘信號BRCLK的頻率。所以配置串行通訊的第一步就是選擇時鐘。

  通過選擇時鐘源和波特率寄存器的數據來確定位周期。所以波特率的配置是串行通訊中最重要的一部分。波特率設置用三個寄存器實現:UxBR0(選擇控制器0):波特率發生器分頻係數低8位。UxBR1(選擇控制器1):波特率發生器分頻係數高8位。UxMCTL

  數據傳輸的格式,以及數據傳輸的模式是通過配置控制寄存器UCTL來進行設置。

  接收控制部分和發送控制部分。首先需要串行口進行配置、使能以及開啟中斷。串口接收數據一般採用中斷方式,發送數據採用主動發送。當接收到一個完整的數據,產生一個信號:URXIFG0=1(類似於51單片機的接收中斷標誌位),表示接收完整的數據。當數據正在發送中,UTXIFG0=1,此時不能再發送數據,必須等當前數據發送完畢(UTXIFG0=0)才能進行發送。

  二、SPI模式

  USTAR下的SPI模式有如下特點:

  1、SPI模式支持3線和4線模式;

  2、支持主機與從機模式;

  3、接受和發送有各自獨立的發送移位寄存器和緩衝器;

  4、接受和發送都有獨立的中斷能力;

  5、移位時鐘的極性和相位可編程;

  6、字符長度可以是7位或者8位。

  SPI工作在全雙工下,即主機發送的同時也接收數據,傳輸的速率由編程決定。4線SPI模式用附加數據線,允許從機數據的發送和接收。其信號如下: SIMO:從進主出,主機模式下,數據輸出;從機模式下,數據輸入。SOMI:從出主進,主機模式下,數據輸入,從機模式下,數據輸出。UCLK:USART SPI模式時鐘,信號有主機輸出,從機輸入。CLK時鐘只能由主機提供。STE:從機模式發送接收允許控制腳,用於4線模式。

  (一)SPI初始化

  SPI當中不需要波特率調整,所以UxMCTL=0x0000,SPI的初始化及其復位和UART公用一套寄存器。

  在初始化或者重新配置USART的SPI時,必須按照以下順序進行:

  1、UxCTL寄存器的第0位SWRST置位;

  2、在SWRST置位的條件下,初始化所有的SPI寄存器,包括UxCTL寄存器;

  3、通過置位模塊使能寄存器MEx的URXEx和UTXEx位使能SPI的接受和發送使能模塊;

  4、通過軟體復位UxCTL寄存器的第0位SWRST;

  5、通過中斷使能寄存器IEx的URXIEx和UTXIEx來使能發送和接受中斷。

  三、寄存器及其功能

  

  (1)控制寄存器UxCTL

  控制寄存器內的信息決定了USART的基本操作。如:選擇通信協議、通信模式和校驗位。在SWRST復位使USART復位操作禁止前,各位應根據選擇的模式進行編程。

  

  (2)發送控制寄存器UxTCTL(未作說明的位未用)

  寄存器UxTCTL控制與發送操作相關的USART硬體。

  

  (3)接收控制寄存器URCTL

  URCTL 控制與接收操作相關的USART硬體並保存由最新寫入URXBUF的字符引起的出錯狀況和喚醒條件。若FE、PE、OE、BRK、RXERR 或 RXWake 中的任何一位置位,通過接收下一個字符不能使其復位。它們的復位要通過訪問接收緩存URXBUF、USART的軟體復位SWRST、系統復位PUC或用指令修改。

  

  

  (4)波特率選擇寄存器和調製控制寄存器

  波特率產生器利用波特率選擇寄存器UxBR1和UxBR0,以及調整控制寄存器UxMCTL,來產生串行數據流的位定時。UxBR0、UxBR1這兩個寄存器是用於存放波特率分頻因子的整數部分,若波特率發生器的輸入頻率BRCLK不是所需波特率的整數倍,帶有小數,則整數部分寫入UxBR寄存器,小數部分則由調整寄存器UxMCT的內容反映。波特率由以下公式計算:

  波特率=BRCLK/(UBR+(M7+M6+ …M0)/8)

  

  接收緩存存放移位寄存器最後接收的字符,可由用戶訪問,讀接收緩存可以復位接收時產生的各種錯誤標誌、RXWAKE位和URXIFGx位。如果傳輸7位數據,接收緩存內容右對齊,最高位為0。當收接和控制條件為真時,接收緩存裝入當前接收到的字符。

  

  發送緩存含有當前要由發送器發送的數據。UTXIFG 標誌表示UTXBUF已準備好接收下一個要發送的字符。將數據寫入UTXBUF初始化發送功能。如果發送移位寄存器為空或即將為空,數據的發送立即開始。只有當UTXBUF為空時,數據才能寫入緩存,否則可能發送不可預料的字符。

  例子:

  #include「msp430G2553.h」

  #include 「in430.h」

  void UartPutchar(unsigned char c);

  unsigned char UartGetchar();

  unsigned char temp=0;

  unsigned char number[2]={0};

  void main( void )

  {

  WDTCTL = WDTPW + WDTHOLD; // Stop WDT

  BCSCTL1 = CALBC1_1MHZ; // Set DCO

  DCOCTL = CALDCO_1MHZ;

  P1DIR|=BIT6;

  P1OUT=~BIT6;

  P1SEL = BIT1 + BIT2; // P1.1為 RXD, P1.2為TXD

  P1SEL2 = BIT1 + BIT2; // P1.1為 RXD, P1.2為TXD

  UCA0CTL1 |= UCSSEL_2; // 選擇時鐘BRCLK

  UCA0BR0 = 106; // 1MHz 9600

  UCA0BR1 = 0; // 1MHz 9600

  UCA0MCTL = UCBRS2 + UCBRS0; // 波特率=BRCLK/(UBR+(M7+.。.0)/8)

  UCA0CTL1 = ~UCSWRST;

  // 初始化順序:SWRST=1設置串口,然後設置SWRST=0,最後設置相應中斷

  IE2 |= UCA0RXIE; // 使能接收中斷

  while(1)

  {

  //UartPutchar(9);

  // display_int(temp,0);

  __delay_cycles(10000);

  }

  }

  /**********************************UART接收中斷*************************/

  #pragma vector=USCIAB0RX_VECTOR

  __interrupt void USCI0RX_ISR(void)

  {

  //while (!(IFG2UCA0TXIFG)); // 等待發送完成

  //UCA0TXBUF = UCA0RXBUF; // TX -》 RXed character

  temp=UCA0RXBUF;

  }

  /******************************UART發送字節函數*************************/

  void UartPutchar(unsigned char c)

  {

  while(!(IFG2 UCA0TXIFG)); //待發送為空

  UCA0TXBUF=c;

  IFG2 =~UCA0RXIFG;

  }

  /*********************************UART接收字節數據******************/

  unsigned char UartGetchar()

  {

  unsigned char c;

  while(!(IFG2 UCA0RXIFG)); //等待接收完成

  c=UCA0RXBUF;

  IFG2 =~UCA0TXIFG;

  return c;

  }

  /******智能控制工作室*******/

相關焦點

  • MSP430G2553單片機使用printf函數進行串口列印輸出
    以前在使用keil編寫51單片機程序的時候,經常使用printf函數列印輸出一些關鍵的過程數據到電腦,方便監控程序的運行狀況。最近使用IAR for MSP430 調試MSP430G2553程序的時候,發現了一些小問題,MSP430G2553單片機並沒有按照我的預期輸出數據到電腦。
  • 我的矩陣鍵盤使用筆記——基於msp430g2553
    Author:zhangbin本文引用地址:http://www.eepw.com.cn/article/201611/322846.htm學習筆記formsp430g2553我使用的是msp430g2553的中斷檢測按鍵的,原理是任意一個按鍵按下時,就會進入中斷函數,然後在中斷中再進行判斷按下的是哪一個鍵。能夠實現這種方法的基礎是msp430g2553的一個IO口組(比如P1,P2)的8個IO口都共用一個中斷向量,一組中,無論哪一個IO口觸發了中斷,都會進入同一個中斷中。
  • 我的TLC2543學習筆記——基於msp430g2553單片機
    Author:zhangbin本文引用地址:http://www.eepw.com.cn/article/201611/322845.htm學習筆記formsp430g2553同時,它還在高達4MHz的串行速率下與主機進行通信。TLC2543的特點及引腳TLC2543是TI的12bit串行A/D轉換器,11個模擬輸入通道。
  • 兩單片機間的串口通信
    單片機間的串口通信注意:本文引用地址:http://www.eepw.com.cn/article/201611/318199.htm
  • STM32串口通信基本原理
    所以單片機串口與PC串口通信就應該遵循下面的連接方式:在單片機串口與上位機給出的rs232口之間,通過電平轉換電路(如下面圖中的Max232晶片) 實現TTL電平與RS232電平之間的轉換。通信過程中只有兩個腳參與通信。單片機的P3口是有兩個復用接口RXD 和TXD。這是單片機進行串行通信的收發口,連接應該錯位的對應到電腦的TDX RDX上。注意:單片機和RS232的電平標準是不一樣的。
  • 單片機使用printf函數進行串口列印輸出
    以前在使用keil編寫51單片機程序的時候,經常使用printf函數列印輸出一些關鍵的過程數據到電腦,方便監控程序的運行狀況。最近使用IAR for MSP430 調試 MSP430G2553 程序的時候,發現了一些小問題,MSP430G2553單片機並沒有按照我的預期輸出數據到電腦。帶著疑惑我查看了keil的幫助文件裡面的printf函數說明,原來printf函數最終是調用putchar函數來實現列印輸出字符的。
  • 用Proteus學習51單片機之串口
    51單片機的串口,有4種方式,分別為方式0,方式1,方式2,方式3.由於我的目的,使用串口主要是為了和電腦進行通信,所以主要使用方式1(事實上我也只學了方式1,其他方式等用到的時候再學吧)。如果不能接收,則需要檢查一下,波特率等參數是否設置的一致,特別是串口,要設置的「成雙成對」,如從「串口助手」的COM1發送到Proteus的COM2  ------------------------------------------------------------------  開始進入實際編碼,我希望寫一個上位機程序,來控制單片機,單片機很簡單,就是從P2口,接
  • 【STM32】串口通信基本原理(超基礎、詳細版)
    >設備之間通信的方式一般情況下,設備之間的通信方式可以分成並行通信和串行通信兩種。STM32串口通信基礎STM32的串口通信接口有兩種,分別是:UART(通用異步收發器)、USART(通用同步異步收發器)。
  • 51單片機與PC通信總結
    51單片機的串口,是個全雙工的串口,發送數據的同時,還可以接收數據。當串行發送完畢後,將在標誌位 TI 置 1,同樣,當收到了數據後,也會在 RI 置 1。
  • 安卓手機與51單片機間藍牙通信的實現
    利用藍牙模塊建立手機和設備間的通信應用非常廣泛。藍牙耳機今天分享下如利用藍牙4.0模塊建立安卓手機和51單片機間的藍牙通信。下文中插入的連接更重要的目的是讓您有直觀感受,一般賣家介紹的更詳細。(1)安卓智慧型手機一部,只用是近幾年的智慧型手機都內嵌藍牙模塊,藍牙4.0及以上(2)任意51單片機最小系統都可使用,如下文連結。
  • PC與單片機的串行通信及數據處理
    為此,筆者充分結合單片機和Matlab的優點,基於事件驅動的中斷通信機制,提出了一種Matlab環境下PC機與單片機實時串行通信的數據處理方法,極大地簡化開發流程,提高了系統開發效率。另外,與目前普遍採用的基於Matlab查詢方式下的非實時串行通信技術相比,這種方法的實用性也大大增強了。
  • MSP430F44X單片機SPI接口驅動C語言程序
    #include<msp430x44x.h> char MST_Data=0X00,SLV_Data=0XFF;
  • msp430g2231基礎定時器設置
    本文引用地址:http://www.eepw.com.cn/article/201611/316486.htm2、運行CPU的MCLK的來源方式:VLO 、32768晶體、DCO3、主體程序部分4、觀察LED閃光燈速度MSP430時鐘:1、在MSP430單片機
  • C8051F020單片機的RS485串行通信設計
    單片機的串口通信程序可由數據發送和接收2個模塊構成。數據發送模塊首先需要設置UART為發送狀態,清除發送標誌後向sBF中寫入數據,開始逐個發送字符,數據發送完成後,恢復UART為接收狀態。數據接收模塊清除接收標誌後讀SBF中的數據,開始接收字符,首先判斷接收數據是否有效,然後分析處理數據,接收完數據後,退出接收程序。UART串口發送和接收模塊的程序流程如圖3所示。
  • 基於MSP430F2012和nRF24L01低功耗RFID定位設計方案
    ,RFID定位正是利用了這一識別特性,利用閱讀器和標籤之間的通信信號強度等參數進行空間的定位。   2.2 晶片選擇及低功耗設計   TI推出的MSP430系列單片機是16位Flash型RISC指令集單片機[3],以超低功耗聞名業界。
  • 基於MSP430單片機編程器的設計
    本文提出一種採用MSP430F149單片機作為CPU控制核心的編程器。與51單片機編程器相比,MSP430單片機編程器增加了I2C存儲模塊,可無需電腦利用該編程器對晶片進行燒錄,使燒錄過程更方便、快捷。
  • MSP430單片機輕鬆入門與實踐 — 暢學單片機
    本書通過10幾個實例全面講解單片機開發中的各種技術,包括單片機接口的擴展、存儲器的擴展、輸入/輸出、實用電子製作、傳感控制技術、單片機通信技術、應用技術、軟體編程等等內容。本套課程基於暢學MSP430開發板講解,從理論到實踐入門教程。包含:MSP430單片機簡介、寄存器設置及使用、硬體測試、MSP430單片機C語言編程。
  • 串口發送浮點型數據及int(2個字節)long int(4個字節)的方法
    關於DMA的介紹我們僅介紹到這裡,如果需要更詳細的了解DMA原理 DMA寄存器以及庫函數 可以參考這篇文章《【STM32】 DMA原理,步驟超細詳解,一文看懂DMA》下面我們將介紹CubeMx 如何創建DMA具體流程如下:我們以USART1 的DMA傳輸為例工程創建1設置RCC設置高速外部時鐘HSE 選擇外部時鐘源2設置串口1點擊USATR12設置MODE為異步通信(Asynchronous)3基礎參數
  • 單片機解密之MSP430與AVR選型方案探析
    在破解AVR單片機的小晶片/小程序外,工作室並沒有停止擴張的步伐,而是向更多的品牌單片機發起了進軍,如MSP430系列單片機解密便是一典型案例,通過比較他們各自的特點,揚長避短,為自己的晶片二次開發能力提供肥沃的土壤。