21851|21

471

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

基于MSP430G2553的串口通信 [复制链接]

 
注意一点: lauchpad的J4 跳线帽地方的RX和TX需要竖着插。横着插不能通信。

贡献自己写的MSP430G2553的串口通信代码:使用内部DCO到16M,选择串口通信时钟来源为SMCLK=8M (系统时钟2分频)。     
1.设置波特率为9600。计算方法为:Fclk=SMCLK=8M.   N=Fclk/9600=833.333;则UCxBRx=INT(N)=833  (N取整) 。又UCxBRx=UCBR0+(UCBR1*256) ,所以UCxBR1=3;UCxBR0=65 ; UCBRSx=(N-INT(N)) *8=2  (四舍五入)   
下面是源代码:
void UartRegCfg()
{
UCA0CTL1 |=UCSWRST;      //reset UART module,as well as enable UART module
UCA0CTL1 |=UCSSEL_2;     //UART clock is SMCLK
UCA0BR0  |=65;           //Baud N=BCLK/rate,rate=9600,BCLK=SMCLK=8M
UCA0BR1  |=3;
    UCA0MCTL  = UCBRS1;      //UCBRSx=2
UCA0CTL1 &=~UCSWRST;     //UART reset end
}
void UartGpioCfg()
{
P1DIR  |= BIT2;           //P1.2  UART_TX
P1DIR  &=~BIT1;           //P1.2  UART_RX
P1SEL  |= BIT1+BIT2;      //select P1.1 and P1.2 as UART port
P1SEL2 |= BIT1+BIT2;
}
void UartInit()
{
UartRegCfg();
UartGpioCfg();
}
/************************************************************************
* Function Name : UARTPutChar
* Create Date : 2012/07/27
* Author  :
*
* Description :send a character
*
* Param : cTX is willing to send character
************************************************************************/
void UARTPutChar(unsigned char cTX)
{
UCA0TXBUF=cTX;
while (!(IFG2&UCA0TXIFG));  //waiting UCA0TXBUF is empty
    IFG2&=~UCA0TXIFG;           //clear TX interrupt flag
}
/************************************************************************
* Function Name : UARTGetChar
* Create Date : 2012/07/27
* Author  :
*
* Description :get a character
*
* Param : cRX is willing to get character
************************************************************************/
int UARTGetChar(void)
{
int GetChar=0;
while (!(IFG2&UCA0RXIFG));  //UCA1RXBUF has received a complete character
IFG2&=~UCA0RXIFG;           //clear RX interrupt flag
UCA0TXBUF=UCA0RXBUF;        //back to display
GetChar  =UCA0RXBUF;
while (!(IFG2&UCA0TXIFG));  //waiting UCA0TXBUF is empty
IFG2&=~UCA0TXIFG;           //clear TX interrupt flag
return GetChar;
}
/************************************************************************
* Function Name : UARTPutstring
* Create Date : 2012/07/27
* Author  :
*
* Description :output string
*
* Param : char *str point send string
* return: the length of string
************************************************************************/
int UARTPutstring( char *str)
{
   unsigned int uCount=0;
   do
   {
    uCount++;
    UARTPutChar(*str);
   }
   while(*++str!='\0');
   UARTPutChar('\n');
   return uCount;
}
void SysCtlClockInit()
{
    DCOCTL=0;
    BCSCTL1=CALBC1_16MHZ;
    DCOCTL =CALDCO_16MHZ;
    BCSCTL1|=DIVA_1;    //ACLK =MCLK/2=8M
    BCSCTL2|=DIVS_1;    //SMCLK=MCLK/2=8M
}

[ 本帖最后由 zw357234798 于 2012-8-2 09:14 编辑 ]

最新回复

为什么我用这个程序 发送一个数据 它会返回两个呢?  详情 回复 发表于 2016-6-1 11:15

点评

谢谢分享  详情 回复 发表于 2013-4-10 20:56
写进去了,编译正常,可是打开串口助手,发送数据没任何反应啊。求指点。  详情 回复 发表于 2012-8-2 21:27
 
点赞 关注(3)

回复
举报

3

帖子

0

TA的资源

一粒金砂(初级)

推荐
 
主函数呢?
 
 

回复

13

帖子

0

TA的资源

禁止发言

推荐
 
非常好用!


但是,不要单步执行,需要全速运行才会出正确结果,建议将函数
void UARTPutChar(unsigned char cTX)
改成
void UARTPutChar(char cTX)

个人观点,仅供参考
 
 
 

回复

471

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
是的哈。没有用中断的形式。有几个while在那等待的。
 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 楼主 zw357234798 的帖子

写进去了,编译正常,可是打开串口助手,发送数据没任何反应啊。求指点。
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

6
 
这位大哥....launchpad板子可以直接用那个他给的usb线调试串口吗?

点评

可以。  详情 回复 发表于 2014-7-6 12:12
当然可以了  详情 回复 发表于 2014-6-26 11:05
 
 
 

回复

42

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 楼主 zw357234798 的帖子

谢谢分享
 
 
 

回复

47

帖子

0

TA的资源

一粒金砂(中级)

8
 
我也是完全没反应,怎么回事啊
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

9
 
请楼主回复下为什么我们执行没什么反应 你自己运行是怎么样的结果呀 谢谢楼主
 
 
 

回复

846

帖子

0

TA的资源

纯净的硅(中级)

10
 
学习了
 
 
 

回复

35

帖子

0

TA的资源

一粒金砂(中级)

11
 
UCA0TXBUF=UCA0RXBUF;        //back to display
这步的意思是把传输缓存的数据放入到接收缓存,而且楼主也硬件上将RX与TX跳脚进行了连接,如此一来就可以才调试程序里面,例如CCS的debug寄存器窗口里面观看你的tx和rx缓存,理论上你传了什么数据,那么tx和rx缓存内就会放入这个数据的值。硬件设置很重要,也就是说你的tx和rx跳脚必须连接,相当于你把uart短路了,收的数据就是你传的数据。
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

12
 
主函数里不用写些什么吗
 
 
 

回复

420

帖子

0

TA的资源

一粒金砂(高级)

13
 
xinlangtuibian 发表于 2012-8-3 13:01
这位大哥....launchpad板子可以直接用那个他给的usb线调试串口吗?

当然可以了
 
 
 

回复

75

帖子

2

TA的资源

一粒金砂(中级)

14
 
xinlangtuibian 发表于 2012-8-3 13:01
这位大哥....launchpad板子可以直接用那个他给的usb线调试串口吗?

可以。
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

15
 
跪求楼主详细讲解使用串口的过程,我也贴了一段官方历程,但是用串口调试无反应。。。找不到原因
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(初级)

16
 
有没有单片机往上位机发数据的具体程序啊
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(初级)

17
 
楼主,为何数据一直重复发送啊,怎么停止发送呢?
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

18
 
主函数呢……
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

19
 
谢谢分享
 
 
 

回复

1706

帖子

4

TA的资源

纯净的硅(初级)

20
 
先横着插----下载,然后断电---竖着插, 串口助手显示串口被占用?
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

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