1404|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

launchpad430--UART [复制链接]

技术说明

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




波特率设置技巧
查看datasheet:可以在chapter15找到下表


                                                                         图1



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


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

时钟及波特率设置

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


  • UCA0CTL1 |= UCSSEL_2;                     // SMCLK  
  • UCA0BR0 = 8;                              // 1MHz 115200  
  • UCA0BR1 = 0;                              // 1MHz 115200  
  • UCA0MCTL = UCBRS2 + UCBRS1;               // Modulation UCBRSx = 6  

初始化及中断设置

[objc] view plain copy


  • UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**  
  • IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt  

完整例程[objc] view plain copy


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


函数扩展编写个发送字符的函数
[objc] view plain copy


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



 
点赞 关注

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表