求教 TI例程调试出问题 430F24X uart

2019-03-24 15:24发布

//****************************************************************************** // MSP430x24x Demo - USCI_A0, Ultra-Low Pwr UART 9600 RX/TX, 32kHz ACLK  //  // Description: This program demonstrates a full-duplex 9600-baud UART using  // USCI_A0 and a 32kHz crystal. The program will wait in LPM3, and receive // a string1 into RAM, and echo back the complete string.  // ACLK = BRCLK = LFXT1 = 32768Hz, MCLK = SMCLK = DCO ~1.045Mhz  // Baud rate divider with 32768Hz XTAL @9600 = 32768Hz/9600 = 3.41 // //* An external watch crystal is required on XIN XOUT for ACLK *//  //                          // MSP430F249 //                             ----------------- //                 /|    |                            XIN|- //                  |     |                                 | 32kHz //                     --|RST                XOUT |- //                       |                                  | //                       |         P3.4 /UCA0TXD|------------>  //                      |                                  | 9600 - 8N1 //                       |          P3.5/UCA0RXD|<------------  //           // B. Nisarga // Texas Instruments Inc.  // September 2007 // Built with IAR Embedded Workbench Version: 3.42A //******************************************************************************  #include "msp430x24x.h" char string1[8]; char i; char j = 0;  void main(void)  {         WDTCTL = WDTPW + WDTHOLD;        // Stop WDT         P1DIR = 0xFF;                                     // All P1.x outputs         P1OUT = 0;                                           // All P1.x reset         P2DIR = 0xFF;                                    // All P2.x outputs         P2OUT = 0;                                      // All P2.x reset         P3SEL = 0x30;                                               // P3.4,5 = USCI_A0 TXD/RXD         P3DIR = 0xFF;                                               // All P3.x outputs         P3OUT = 0;                                                  // All P3.x reset         P4DIR = 0xFF;                                                 // All P4.x outputs         P4OUT = 0;                                                         // All P4.x reset        UCA0CTL1 |= UCSSEL_1;                              // CLK = ACLK         UCA0BR0 = 0x03;                                         // 32kHz/9600 = 3.41         UCA0BR1 = 0x00;                                           //        UCA0MCTL = UCBRS1 + UCBRS0;               // Modulation UCBRSx = 3        UCA0CTL1 &= ~UCSWRST;                          // **Initialize USCI state machine**         IE2 |= UCA0RXIE;                                           // Enable USCI_A0 RX interrupt           __bis_SR_register(LPM3_bits + GIE);          // Enter LPM3, interrupts enabled }      // USCI A0/B0 Transmit ISR  #pragma vector=USCIAB0TX_VECTOR __interrupt void USCI0TX_ISR(void) {           UCA0TXBUF = string1[i++];          // TX next character           if (i == sizeof string1)                   // TX over?          IE2 &= ~UCA0TXIE;                     // Disable USCI_A0 TX interrupt }    // USCI A0/B0 Receive ISR #pragma vector=USCIAB0RX_VECTOR  __interrupt void USCI0RX_ISR(void) {           string1[j++] = UCA0RXBUF;           if (j > sizeof string1 - 1)             {               i = 0;               j = 0;               IE2 |= UCA0TXIE;                      // Enable USCI_A0 TX interrupt               UCA0TXBUF = string1[i++]; }  } 我分析的 格式 N,8,1,9600 程序说的是 发什么 接收窗显示什么  端口号 我绝对没有错 我的错误状况是  发送任意字符串后 接收在字节数在自加 接手区无显示 (非十六进制显示)                                接收在字节数在自加 接收到若干 00 (十六进制显示)  求教 我哪里出了问题!     贴个代码 贴的 一个空格没有    手动调了半天 [ 本帖最后由 shirl 于 2011-11-7 21:09 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
wstt
1楼-- · 2019-03-25 02:07
< 找到了一个我以前验证过的代码
#include "msp430x24x.h"

char string1[8];
char i;
char j = 0;

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P1DIR = 0xFF;                             // All P1.x outputs
  P1OUT = 0;                                // All P1.x reset
  P2DIR = 0xFF;                             // All P2.x outputs
  P2OUT = 0;                                // All P2.x reset
  P3SEL = 0x30;                             // P3.4,5 = USCI_A0 TXD/RXD
  P3DIR = 0xFF;                             // All P3.x outputs
  P3OUT = 0;                                // All P3.x reset
  P4DIR = 0xFF;                             // All P4.x outputs
  P4OUT = 0;                                // All P4.x reset
  UCA0CTL1 |= UCSSEL_1;                     // CLK = ACLK
  UCA0BR0 = 0x03;                           // 32kHz/9600 = 3.41
  UCA0BR1 = 0x00;                           //
  UCA0MCTL = UCBRS1 + UCBRS0;               // Modulation UCBRSx = 3
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt

  __bis_SR_register(LPM3_bits + GIE);       // Enter LPM3, interrupts enabled
}

// USCI A0/B0 Transmit ISR
#pragma vector=USCIAB0TX_VECTOR
__interrupt void USCI0TX_ISR(void)
{
  UCA0TXBUF = string1[i++];                 // TX next character

  if (i == sizeof string1)                  // TX over?
    IE2 &= ~UCA0TXIE;                       // Disable USCI_A0 TX interrupt
}

// USCI A0/B0 Receive ISR
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
  string1[j++] = UCA0RXBUF;
  if (j > sizeof string1 - 1)
  {
    i = 0;
    j = 0;
    IE2 |= UCA0TXIE;                        // Enable USCI_A0 TX interrupt
    UCA0TXBUF = string1[i++];
  }
}
wstt
2楼-- · 2019-03-25 07:51
< :TI_MSP430_内容页_SA7 --> 无奇偶校验,8比特模式,停止位是1位。
串口有收到的话,基本可以定位成时钟和显示的问题。
可以用调试器在线调试状态下查看,MSP430到底接收到了什么,这样再定位是单片机接收还是发送的过程中出的问题
shirl
3楼-- · 2019-03-25 10:24
 精彩回答 2  元偷偷看……
shirl
4楼-- · 2019-03-25 13:54
搞出来了
程序 是 没问题 的   当然也不是波特率的问题了
串口调试 助手  没用  !  换一个调试  可以的  
那个什么疼的!!!

一周热门 更多>

相关问题

    相关文章