社区导航

 
查看: 1118|回复: 0

[资料分享] 给你写的launchpad430--UART

[复制链接]

3360

TA的帖子

421

TA的资源

五彩晶圆(中级)

Rank: 8Rank: 8

荣誉会员勋章

发表于 2013-11-29 19:56:03 | 显示全部楼层 |阅读模式
技术说明

20131105160743328.jpg
因此我们在设计电路的时候,只需要连接这两个引脚到MAX3232电平转换芯片上就可以进行通信。
在通信之前我们应做一些设置,例如管脚、时钟等。




波特率设置技巧
查看datasheet:可以在chapter15找到下表
20131105150645187.jpg
                                                                         图1



例如:我们设置SMCLK、MCLK = 1MHz,UARTA输入时钟为SMCLK,波特率 = 115200,开启读中断。
管脚设置查看数据手册,连接UARTA的管脚是P1.1,P1.2




  • P1SEL  = BIT1 + BIT2 ;                    // P1.1 = RXD, P1.2=TXD  
  • P1SEL2 = BIT1 + BIT2;  

时钟及波特率设置

查看数据手册,找到设置波特率的表格,如上图1所示:




  • 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  

完整例程



  • #include <msp430.h>  
  •   
  • 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  
  • }  


函数扩展编写个发送字符的函数




  • void SendChar(unsigned char c_data)  
  • {  
  •   UCA0TXBUF = c_data;  
  •   while(!(IFG2&UCA0TXIFG));  
  • }

此帖出自MSP430论坛


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-8-20 20:51 , Processed in 0.069931 second(s), 20 queries , Gzip On, Redis On.

快速回复 返回顶部 返回列表