原创 【TI博客大赛】msp430的USCI串口,妙招搞定

2012-11-20 16:18 10593 17 19 分类: MCU/ 嵌入式

430的USCI串口(UART mode)初始化设置十分繁杂, UCA0BR0  UCA0BR1   UCA0MCTL 等还需按照波特率计算,并且有小数部分微调,在这里共享一个头文件,在操作串口时,只要一个init_uart(9600);就全搞定,注:9600还能改成4800 115200等其他波特率,十分方便。

 

#define clock 8000000
#define UCBRS(x) UCBRS_##x

void uart_init(long baud)
{
      float  x  =  clock / baud ;
      long  y  =  clock / baud ;
      char n;
      P1SEL  =  BIT1  +  BIT2 ;                     // P1.1 = RXD, P1.2=TXD
      P1SEL2  =  BIT1  +  BIT2 ;   
      UCA0CTL1|=UCSSEL_2 ;
     
      UCA0BR0  =  y % 256;                         
      UCA0BR1  =  y / 256;
     
      n=(char)((x-y)*8);
      UCA0MCTL=2*n; //UCBRS_n n为*2     
      UCA0CTL1 &= ~UCSWRST;                    
      IE2  |=  UCA0RXIE ;          
}

UCA0MCTL=2*n; 这里是移位操作,详情请看register。

当然,时钟修改了的话,也要记得把clock修改一下。

好用的话,大家支持一个吧,下面我把头文件共享,支持printf,getchar等

 

 

 

 

文章评论2条评论)

登录后参与讨论

用户377235 2013-9-9 11:15

非常好,感谢博主,一直没有搞明白UCA0MCTL的算法,现在明白了

用户1671843 2013-5-27 13:54

謝謝大大 先下 測試ING
相关推荐阅读
用户1576293 2012-11-20 16:08
【TI博客大赛】TMS320F28035入门教程
本文是之前写的,属9crk原创。 首先,c2000有多重启动方式,可以从datasheet 29页看到支持的启动模式,目前基本上都是使用仿真器,很少有使用其他方式下载的方案提供,不过有个SDf...
我要评论
2
17
关闭 站长推荐上一条 /2 下一条