请教关于串口的问题

2019-07-25 15:28发布

我最近在学MSP430F149串口模块,我用的是TI的标准程序,一个字都没改;但是单片机就是不能正常收发数据。而且换了2个了,不知道到底怎么回事,大家能够帮帮我吗。

  1. //******************************************************************************
  2. //  MSP-FET430P140 Demo - USART0, Ultra-Low Pwr UART 9600 Echo ISR, 32kHz ACLK
  3. //
  4. //  Description: Echo a received character, RX ISR used. In the Mainloop UART0
  5. //  is made ready to receive one character with interrupt active. The Mainloop
  6. //  waits in LPM3. The UART0 ISR forces the Mainloop to exit LPM3 after
  7. //  receiving one character which echo's back the received character.
  8. //  ACLK = UCLK0 = LFXT1 = 32768, MCLK = SMCLK = DCO~ 800k
  9. //  Baud rate divider with 32768hz XTAL [url=home.php?mod=space&uid=681799]@9600[/url] = 32768Hz/9600 = 3.41 (0003h 4Ah )
  10. //  //* An external watch crystal is required on XIN XOUT for ACLK *//        
  11. //
  12. //                MSP430F149
  13. //            -----------------
  14. //        /||              XIN|-
  15. //         | |                 | 32kHz
  16. //         --|RST          XOUT|-
  17. //           |                 |
  18. //           |             P3.4|----------->
  19. //           |                 | 9600 - 8N1
  20. //           |             P3.5|<-----------
  21. //
  22. //
  23. //  M. Buccini
  24. //  Texas Instruments Inc.
  25. //  Feb 2005
  26. //  Built with IAR Embedded Workbench Version: 3.21A
  27. //******************************************************************************

  28. #include  <msp430x14x.h>

  29. void main(void)
  30. {
  31.     WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  32.     P3SEL |= 0x30;                            // P3.4,5 = USART0 TXD/RXD
  33.     ME1 |= UTXE0 + URXE0;                     // Enable USART0 TXD/RXD
  34.      UCTL0 |= CHAR;                            // 8-bit character
  35.     UTCTL0 |= SSEL0;                          // UCLK = ACLK
  36.     UBR00 = 0x03;                             // 32k/9600 - 3.41
  37.     UBR10 = 0x00;                             //
  38.     UMCTL0 = 0x4A;                            // Modulation
  39.     UCTL0 &= ~SWRST;                          // Initialize USART state machine
  40.     IE1 |= URXIE0;                            // Enable USART0 RX interrupt

  41. // Mainloop
  42.     for (;;)
  43.     {
  44.         _BIS_SR(LPM3_bits + GIE);                 // Enter LPM3 w/interrupt
  45.         while (!(IFG1 & UTXIFG0));                // USART0 TX buffer ready?
  46.         TXBUF0 = RXBUF0;                          // RXBUF0 to TXBUF0
  47.     }
  48. }

  49. // UART0 RX ISR will for exit from LPM3 in Mainloop
  50. #pragma vector=UART0RX_VECTOR
  51. __interrupt void usart0_rx (void)
  52. {
  53.     _BIC_SR_IRQ(LPM3_bits);                   // Clear LPM3 bits from 0(SR)
  54. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。