[求助] 新人问个关于串口的低级问题。。

fraisty   2017-9-18 09:39 楼主
我刚开始接触单片机,用的msp430f5529的launchpad。我现在想用PC和开发板串口连接,板子用来烤程序的那个usb接口可以达到串口连接的作用嘛,还是要短接啥的。。。不能的话是不是只能用个usb转串口?

回复评论 (22)

可以直接使用,板子默认短接好了,看下原理图和板子对应一下就知道了
点赞  2017-9-18 09:45
引用: qwerghf 发表于 2017-9-18 09:45
可以直接使用,板子默认短接好了,看下原理图和板子对应一下就知道了

我使用官方的例程,用串口调试助手的时候没有反应= =
点赞  2017-9-18 09:57
引用: fraisty 发表于 2017-9-18 09:57
我使用官方的例程,用串口调试助手的时候没有反应= =

你看下对应的串口是不是对的,看下原理图和程序
点赞  2017-9-18 10:00
  1. #include <msp430.h>

  2. int main(void)
  3. {
  4.   unsigned char i;

  5.   WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  6.   P3SEL = BIT3+BIT4;                        // P3.4,5 = USCI_A0 TXD/RXD
  7. //.......................
  8. //  P5SEL |= BIT4+BIT5;                       // Select XT1
  9. //
  10. //  UCSCTL6 &= ~(XT1OFF);                     // XT1 On
  11. //  UCSCTL6 |= XCAP_3;                        // Internal load cap
  12. //  UCSCTL3 = 0;                              // FLL Reference Clock = XT1
  13. //
  14. //  // Loop until XT1,XT2 & DCO stabilizes - In this case loop until XT1 and DCo settle
  15. //  do
  16. //  {
  17. //    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
  18. //                                            // Clear XT2,XT1,DCO fault flags
  19. //    SFRIFG1 &= ~OFIFG;                      // Clear fault flags
  20. //  }while (SFRIFG1&OFIFG);                   // Test oscillator fault flag
  21. //  
  22. //  UCSCTL6 &= ~(XT1DRIVE_3);                 // Xtal is now stable, reduce drive strength
  23. //
  24. //  UCSCTL4 |= SELA_0 + SELS_4 + SELM_4;      // ACLK = LFTX1
  25. //                                            // SMCLK = default DCO
  26. //                                            // MCLK = default DCO
  27. //  
  28.   //................
  29.   UCA0CTL1 |= UCSWRST;                      // **Put state machine in reset**
  30.   UCA0CTL1 |= UCSSEL_1;                     // CLK = ACLK
  31.   UCA0BR0 = 0x03;                           // 32kHz/9600=3.41 (see User's Guide)
  32.   UCA0BR1 = 0x00;                           //
  33.   UCA0MCTL = UCBRS_3+UCBRF_0;               // Modulation UCBRSx=3, UCBRFx=0
  34.   UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  35.   UCA0IE |= UCRXIE;                         // Enable USCI_A0 RX interrupt

  36.   __bis_SR_register(LPM3_bits + GIE);       // Enter LPM3, interrupts enabled
  37.   __no_operation();                         // For debugger
  38. }

  39. // Echo back RXed character, confirm TX buffer is ready first
  40. #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
  41. #pragma vector=USCI_A0_VECTOR
  42. __interrupt void USCI_A0_ISR(void)
  43. #elif defined(__GNUC__)
  44. void __attribute__ ((interrupt(USCI_A0_VECTOR))) USCI_A0_ISR (void)
  45. #else
  46. #error Compiler not supported!
  47. #endif
  48. {
  49.   switch(__even_in_range(UCA0IV,4))
  50.   {
  51.   case 0:break;                             // Vector 0 - no interrupt
  52.   case 2:                                   // Vector 2 - RXIFG
  53.     while (!(UCA0IFG&UCTXIFG));             // USCI_A0 TX buffer ready?
  54.     UCA0TXBUF = UCA0RXBUF;                  // TX -> RXed character
  55.     break;
  56.   case 4:break;                             // Vector 4 - TXIFG
  57.   default: break;  
  58.   }
  59. }
点赞  2017-9-18 10:04
QQ图片20170918100433.png
点赞  2017-9-18 10:06
串口打得开,但是我发送数据没有回复= =
点赞  2017-9-18 10:07
@qwerghf  能看下吗
点赞  2017-9-18 10:19
引用: fraisty 发表于 2017-9-18 10:19
@qwerghf  能看下吗

单步调试看看MCU那有没有收到数据
点赞  2017-9-18 10:32
引用: qwerghf 发表于 2017-9-18 10:32
单步调试看看MCU那有没有收到数据

我单步发现卡在使能中断那了。。。一直进不了中断
点赞  2017-9-18 10:34
QQ图片20170918103627.png
点赞  2017-9-18 10:36

你中断开启了吗,把全局中断打开
点赞  2017-9-18 11:19
引用: qwerghf 发表于 2017-9-18 11:19
你中断开启了吗,把全局中断打开

__bis_SR_register(LPM3_bits + GIE);       // Enter LPM3, interrupts enabled  这句不是嘛。。。
点赞  2017-9-18 11:32
引用: fraisty 发表于 2017-9-18 11:32
__bis_SR_register(LPM3_bits + GIE);       // Enter LPM3, interrupts  ...

这是低功耗模式3,不是全局中断
点赞  2017-9-18 11:35
引用: qwerghf 发表于 2017-9-18 11:35
这是低功耗模式3,不是全局中断

你的程序写的也不对,你看下官方的电路用的串口几
点赞  2017-9-18 11:37
引用: qwerghf 发表于 2017-9-18 11:37
你的程序写的也不对,你看下官方的电路用的串口几

这个例程是UART0。。 但硬件显示的COM是UART1。。。
点赞  2017-9-18 16:28
  1. #include <msp430f5529.h>

  2. /*
  3. * main.c
  4. */
  5. /*int main(void) {
  6.     WDTCTL = WDTPW | WDTHOLD;        // Stop watchdog timer
  7.        
  8.         return 0;
  9. }*/
  10. void main(void)
  11. {
  12.         WDTCTL = WDTPW | WDTHOLD;        // Stop watchdog timer
  13.         P4SEL = BIT4+BIT5;                            // P5_6和P5_7第二功能打开,设置方向
  14.             UCA1CTL1 |= UCSWRST;          // 首先使RST位置位,只有这样后面的设置才有效
  15.             UCA1CTL1 |= UCSSEL_2;                  // SMCLK,为系统时钟4MHz
  16.             UCA1BR0 = 0x02;                            // 4MHz 115200
  17.             UCA1BR1 = 0;                               // 4MHz 115200
  18.             UCA1MCTL |= UCBRS_3 + UCBRF_2 + UCOS16;        // 设置调整参数UCBRSx=1, UCBRFx=0
  19.             UCA1CTL1 &= ~UCSWRST;                // RST复位
  20.             UCA1IE |= UCRXIE + UCTXIE;
  21.             _EINT();
  22.            while (1)
  23.             {
  24.                     //
  25.             }

  26. }

  27. #pragma vector=USCI_A1_VECTOR
  28. __interrupt void USCI_A1_ISR(void)
  29. {
  30.         switch(__even_in_range(UCA1IV,4))
  31.         {
  32.         case 0:break;
  33.         case 2:
  34.                 while (!(UCA1IFG&UCTXIFG));
  35.                 UCA1TXBUF = UCA1RXBUF;
  36.                 break;
  37.         case 4:break;
  38.         default: break;


  39.         }
  40. }
点赞  2017-9-18 17:05
@qwerghf  改了一下=-=  还是不行 头好晕
点赞  2017-9-18 17:06
@qwerghf 我用usb转串口模块使用UART0可以正常接收= =  为什么自带的UART1不行呢
点赞  2017-9-18 19:09
  1. #include <msp430.h>
  2. int main(void)
  3. {
  4. WDTCTL = WDTPW + WDTHOLD; // Stop WDT
  5. P4SEL |= BIT4+BIT5; // P4.4,5 = USCI_A1 TXD/RXD
  6. UCA1CTL1 |= UCSWRST; // **Put state machine in reset**
  7. UCA1CTL1 |= UCSSEL_2; // SMCLK
  8. UCA1BR0 = 9; // 1MHz 115200 (see User's Guide)
  9. UCA1BR1 = 0; // 1MHz 115200
  10. UCA1MCTL |= UCBRS_1 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0
  11. UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
  12. UCA1IE |= UCRXIE; // Enable USCI_A1 RX interrupt
  13. __bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
  14. __no_operation(); // For debugger
  15. }
  16. // Echo back RXed character, confirm TX buffer is ready first
  17. #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
  18. #pragma vector=USCI_A1_VECTOR
  19. __interrupt void USCI_A1_ISR(void)
  20. #elif defined(__GNUC__)
  21. void __attribute__ ((interrupt(USCI_A1_VECTOR))) USCI_A1_ISR (void)
  22. #else
  23. #error Compiler not supported!
  24. #endif
  25. {
  26. switch(__even_in_range(UCA1IV,4))
  27. {
  28. case 0:break; // Vector 0 - no interrupt
  29. case 2: // Vector 2 - RXIFG
  30. while (!(UCA1IFG&UCTXIFG)); // USCI_A1 TX buffer ready?
  31. UCA1TXBUF = UCA1RXBUF; // TX -> RXed character
  32. break;
  33. case 4:break; // Vector 4 - TXIFG
  34. default: break;
  35. }
  36. }
以上代码我拿官方程序修改,拿板子测试通过,你直接可以用 2 (2).jpg 2 (1).jpg 本帖最后由 qwerghf 于 2017-9-18 23:32 编辑

    UART.zip (2017-9-18 23:31 上传)

    399.11 KB, 下载次数: 6

点赞  2017-9-18 23:23
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复