4188|22

30

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

新人问个关于串口的低级问题。。 [复制链接]

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

最新回复

调出来就好,参考官方代码,根据手册修改官方代码为自己所用快一些,有问题多交流  详情 回复 发表于 2017-9-19 10:53
 
点赞 关注

回复
举报

1059

帖子

1

TA的资源

版主

沙发
 
可以直接使用,板子默认短接好了,看下原理图和板子对应一下就知道了
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

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

我使用官方的例程,用串口调试助手的时候没有反应= =

点评

你看下对应的串口是不是对的,看下原理图和程序  详情 回复 发表于 2017-9-18 10:00
 
 
 

回复

1059

帖子

1

TA的资源

版主

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

你看下对应的串口是不是对的,看下原理图和程序
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

5
 
  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. }
复制代码
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

6
 

 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

7
 
串口打得开,但是我发送数据没有回复= =
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

8
 
@qwerghf  能看下吗

点评

单步调试看看MCU那有没有收到数据  详情 回复 发表于 2017-9-18 10:32
 
 
 

回复

1059

帖子

1

TA的资源

版主

9
 
fraisty 发表于 2017-9-18 10:19
@qwerghf  能看下吗

单步调试看看MCU那有没有收到数据
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

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

我单步发现卡在使能中断那了。。。一直进不了中断
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

11
 

点评

你中断开启了吗,把全局中断打开  详情 回复 发表于 2017-9-18 11:19
 
 
 

回复

1059

帖子

1

TA的资源

版主

12
 

你中断开启了吗,把全局中断打开
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

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

__bis_SR_register(LPM3_bits + GIE);       // Enter LPM3, interrupts enabled  这句不是嘛。。。

点评

这是低功耗模式3,不是全局中断  详情 回复 发表于 2017-9-18 11:35
 
 
 

回复

1059

帖子

1

TA的资源

版主

14
 
fraisty 发表于 2017-9-18 11:32
__bis_SR_register(LPM3_bits + GIE);       // Enter LPM3, interrupts  ...

这是低功耗模式3,不是全局中断

点评

你的程序写的也不对,你看下官方的电路用的串口几  详情 回复 发表于 2017-9-18 11:37
 
 
 

回复

1059

帖子

1

TA的资源

版主

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

你的程序写的也不对,你看下官方的电路用的串口几
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

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

这个例程是UART0。。 但硬件显示的COM是UART1。。。
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

17
 
  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. }
复制代码
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

18
 
@qwerghf  改了一下=-=  还是不行 头好晕
 
 
 

回复

30

帖子

0

TA的资源

一粒金砂(中级)

19
 
@qwerghf 我用usb转串口模块使用UART0可以正常接收= =  为什么自带的UART1不行呢
 
 
 

回复

1059

帖子

1

TA的资源

版主

20
 
本帖最后由 qwerghf 于 2017-9-18 23:32 编辑
  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. }
复制代码
以上代码我拿官方程序修改,拿板子测试通过,你直接可以用



UART.zip

399.11 KB, 下载次数: 6

点评

十分感谢,最后调出来发现还是波特率没对上  详情 回复 发表于 2017-9-19 10:45
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表