|
技术说明
因此我们在设计电路的时候,只需要连接这两个引脚到MAX3232电平转换芯片上就可以进行通信。
在通信之前我们应做一些设置,例如管脚、时钟等。
波特率设置技巧
查看datasheet:可以在chapter15找到下表
图1
例如:我们设置SMCLK、MCLK = 1MHz,UARTA输入时钟为SMCLK,波特率 = 115200,开启读中断。
管脚设置查看数据手册,连接UARTA的管脚是P1.1,P1.2
[objc] view plain copy
- P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
- P1SEL2 = BIT1 + BIT2;
时钟及波特率设置
查看数据手册,找到设置波特率的表格,如上图1所示:
[objc] view plain copy
- UCA0CTL1 |= UCSSEL_2; // SMCLK
- UCA0BR0 = 8; // 1MHz 115200
- UCA0BR1 = 0; // 1MHz 115200
- UCA0MCTL = UCBRS2 + UCBRS1; // Modulation UCBRSx = 6
初始化及中断设置
[objc] view plain copy
- UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
- IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
完整例程[objc] view plain copy
- #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;
-
- UCA0CTL1 |= UCSSEL_2; // SMCLK
- UCA0BR0 = 8; // 1MHz 115200
- UCA0BR1 = 0; // 1MHz 115200
- UCA0MCTL = UCBRS2 + UCBRS1; // Modulation UCBRSx = 6
-
- 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
- }
函数扩展编写个发送字符的函数
[objc] view plain copy
- void SendChar(unsigned char c_data)
- {
- UCA0TXBUF = c_data;
- while(!(IFG2&UCA0TXIFG));
- }
|
|