多语言展示
当前在线:1114今日阅读:2今日分享:38

msp430 uart串口

串口,作为嵌入式系统最为熟悉的通信与调试方式。数据线少(一般只需要2根)、通信速度快、便于观察等是串口的特点,下面简要介绍一下msp430单片机串行接口之uart方式。
工具/原料

msp430单片机

方法/步骤
1

查阅msp430x2xx系列单片机说明书,可以知道msp430集成了Universal serial interface(USI)接口,具有3种工作方式:I2C、SPI、UART方式,本文先讲述UART模式,其余模式有机会的话后续讲解。

2

UART简介关于UART的理论与科普之类的基础知识在这里略过,只讲述一般实际应用时需要的关注点:波特率、停止位、数据位数、流控制、奇偶校验等。一般常见的波特率有4800、9600、14400、19200、115200等;而停止位可以选择1位、1.5位或是2位;数据位数常见为7位或是8位;可以开启或关闭流控制,一般不使用流控制;奇偶校验则有奇校验、偶校验或是无校验方式。

3

引脚复用为UART模式msp430引脚多具有功能复用功能,在使用UART模式时,需要先设置对应引脚复用为UART模式,比如对于msp430g2553芯片,P1.1=RXD, P1.2=TXD,所以需要如下指令:P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXDP1SEL2 = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD

4

UART模块时钟选择msp430时钟系统十分强大,资源丰富。UART模块通信时,需要时钟输入。如下图所示,有3种时钟供UART选择:UCLKI、ACLK、SMCLK。其中UCLKI是外部引脚输入时钟,ACLK是辅助时钟,可以为芯片内部VLO或者是外部32.768 KHz晶振,SMCLK是系统子时钟。UxTCTL寄存器中SSELx选择时钟源。

5

UxBR0\UxBR1寄存器UxBR0与UxBR1是2个8位的寄存器,合起来组成UxBR 16位寄存器,只要用于设置UART通信速率,如下图所示:

6

UxMCTL寄存器UxMCTL主要是用于矫正波特率,使得通信速率更加准确。

7

UxCTL寄存器该寄存器中许多位用于配置UART工作方式,其中第一位用于是否具有软件复位UART功能,一般需要关闭该功能,也就是复位。

8

IEx寄存器通过IEx使能UART中断,比如置位IE2中UCA0RXIE使能UCA0模块串口接收中断。在配置完之后,置位GIE开启系统中断。

9

示例代码:#include int main(void){  WDTCTL = WDTPW + WDTHOLD; // Stop WDT  if (CALBC1_1MHZ==0xFF) // If calibration constant erased  {    while(1); // do not load, trap CPU!!  }  DCOCTL = 0; // Select lowest DCOx and MODx settings  BCSCTL1 = CALBC1_1MHZ; // Set DCO  DCOCTL = CALDCO_1MHZ;  P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD  P1SEL2 = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD  UCA0CTL1 |= UCSSEL_2; // SMCLK  UCA0BR0 = 104; // 1MHz 9600  UCA0BR1 = 0; // 1MHz 9600  UCA0MCTL = UCBRS0; // Modulation UCBRSx = 1  UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**  IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt  __bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled}// Echo back RXed character, confirm TX buffer is ready first#pragma vector=USCIAB0RX_VECTOR__interrupt void USCI0RX_ISR(void){  while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?  UCA0TXBUF = UCA0RXBUF; // TX -> RXed character}

推荐信息