3545|16

161

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

launchpad中使用UART出现短路 [复制链接]

大神,我用UART+TTL+串口助手,launchpad上接P1.1 P1.2口,使用网上找的程序,第一次发送显示为乱码,更改程序内配置后发送任为乱码,我用的是SW||UART  ,烧写几次后屏幕上鼠标箭头乱点,文件乱打开(之前有一次USB转TTL短接出现过这种情况),稍后短路几次电脑立即变慢,除了关机,其它都无法打开,该如何解决?

网上找的程序

# include "msp430g2553.h"

volatile char Temp_Size;
void DisplayCharacter(char array[], char size);

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 停止看门狗
BCSCTL1 |= XTS;

//BCSCTL1 = CALBC1_8MHZ;//MCLK为DCO,8MHZ  
//DCOCTL = CALDCO_8MHZ;

// 设置时基寄存器1,使ACLK = LFXT1 = HF XTAL,也就是高频模式.
P1DIR |= 0x1F; // 设置P3.4方向寄存器为输出
char array[]= "dddddddddddd"; // Connection Established, display msg to hyperterminal


  while(1)
  {
    Temp_Size = sizeof(array);
    DisplayCharacter(array, Temp_Size);

  }
}




void DisplayCharacter(char array[], char size)
{

  _DINT();
  P1SEL |= 0x18;                             // P1.3,4 = USCI_A0 TXD/RXD
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  UCA0BR0 = 0x41;                            // 8MHz 9600
  UCA0BR1 = 0x03;                              // 8MHz 9600
  UCA0MCTL = UCBRS1;                        // Modulation UCBRSx = 2
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**

  for(int count=0; count     {
       while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
       UCA0TXBUF = array[count];                    // TX -> RXed character
       _EINT();
    }
}



最新回复

时钟应该是没有问题的,要不然也不会在硬件复位之后能正确的发数据了;上位机出现乱码,我不知道你是在程序运行的时候才接上位机的还是一开始就接好上位机才开始运行程序,如果是前者的话,那很好解释,就是程序运行过程中才接上位机,那么在上位机端是可能会出现乱码的,因为你不知道你接上的上位机的时候单片机是否在发送数据的过程中,除非你刚好在新的数据帧被发送出去之前接上上位机,但是这个概率很低,但是如果是后者的话,就得好好研究了  详情 回复 发表于 2014-8-2 22:48
 
点赞 关注

回复
举报

2781

帖子

419

TA的资源

五彩晶圆(中级)

沙发
 
SW||UART改为HW,把短路帽横接试试

点评

老大,我对配置波特率的表看不懂,UCA0MCTL = UCBRS2+UCBRS2 + UCBRF3 + UCOS16; UCBRx,UCBRSx, UCBRFx,UCOSx;中的2,2,3,16分别代之什么, 主频配置为 BCSCTL1 = CALBC1_8MHZ;//MCLK为DCO,8MHZ DCOCTL = CA  详情 回复 发表于 2014-8-2 07:30
我试了一下,如果引脚直接接到usb转TLL的串口转接器上,无论是短路帽拔掉还是竖接又或者是横接,数据都能正常接收,所以这个应该不会对“IO加串口转接器”组合有影响吧,如果要用板上集成的usb转串口,这个短路帽应  详情 回复 发表于 2014-8-1 23:59
 
个人签名
 

回复

1972

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
如果使用CCS开发的话,建议自己用Grace功能产生相关的初始化代码,这样能保证配置正确,然后只需要再自己编写发送和接收程序即可

点评

多谢  详情 回复 发表于 2014-8-2 07:18
 
 
 

回复

1972

帖子

0

TA的资源

五彩晶圆(初级)

4
 
qinkaiabc 发表于 2014-8-1 20:46
SW||UART改为HW,把短路帽横接试试

我试了一下,如果引脚直接接到usb转TLL的串口转接器上,无论是短路帽拔掉还是竖接又或者是横接,数据都能正常接收,所以这个应该不会对“IO加串口转接器”组合有影响吧,如果要用板上集成的usb转串口,这个短路帽应该会有影响,这个我没有深究

点评

多谢。  详情 回复 发表于 2014-8-2 07:19
 
 
 

回复

161

帖子

0

TA的资源

一粒金砂(中级)

5
 
bobde163 发表于 2014-8-1 23:11
如果使用CCS开发的话,建议自己用Grace功能产生相关的初始化代码,这样能保证配置正确,然后只需要再自己编 ...

多谢
 
 
 

回复

161

帖子

0

TA的资源

一粒金砂(中级)

6
 
bobde163 发表于 2014-8-1 23:59
我试了一下,如果引脚直接接到usb转TLL的串口转接器上,无论是短路帽拔掉还是竖接又或者是横接,数据都能 ...

多谢。
 
 
 

回复

161

帖子

0

TA的资源

一粒金砂(中级)

7
 
qinkaiabc 发表于 2014-8-1 20:46
SW||UART改为HW,把短路帽横接试试

老大,我对配置波特率的表看不懂,UCA0MCTL = UCBRS2+UCBRS2 + UCBRF3 + UCOS16;   UCBRx,UCBRSx, UCBRFx,UCOSx;中的2,2,3,16分别代之什么,  主频配置为
BCSCTL1 = CALBC1_8MHZ;//MCLK为DCO,8MHZ  
DCOCTL = CALDCO_8MHZ;


SMCLK配置为
BCSCTL2 = SELM_0 + DIVM_0 + DIVS_0;  
SMCLK也为8MHz,但依旧是乱码,怎么解决,谢谢。



 
 
 

回复

2781

帖子

419

TA的资源

五彩晶圆(中级)

8
 
你的开发版是LaunchPad吗?外接了8M晶振?

点评

是的,但外接不是8MHz,是launchpad包装盒自带晶振,还有,我想问一下关于UCSWRST实用的问题,我在UART初始化程序中一开始先关闭,配置完后打开,对不对?多谢  详情 回复 发表于 2014-8-2 10:16
 
个人签名
 
 

回复

161

帖子

0

TA的资源

一粒金砂(中级)

9
 
qinkaiabc 发表于 2014-8-2 10:08
你的开发版是LaunchPad吗?外接了8M晶振?

是的,但外接不是8MHz,是launchpad包装盒自带晶振,还有,我想问一下关于UCSWRST实用的问题,我在UART初始化程序中一开始先关闭,配置完后打开,对不对?多谢

点评

是的  详情 回复 发表于 2014-8-2 11:09
 
 
 

回复

2781

帖子

419

TA的资源

五彩晶圆(中级)

10
 
会会 发表于 2014-8-2 02:16
是的,但外接不是8MHz,是launchpad包装盒自带晶振,还有,我想问一下关于UCSWRST实用的问题,我在UART初 ...

是的

点评

大哥,还是得手动复位,加延时都不行,麻烦看看才行那有问题,多谢了。 #include "msp430g2553.h" #define uchar unsigned char #define uint unsigned int # define LED1_1 P1OUT |= BIT0 # defin  详情 回复 发表于 2014-8-2 11:16
 
个人签名
 
 

回复

161

帖子

0

TA的资源

一粒金砂(中级)

11
 

大哥,还是得手动复位,加延时都不行,麻烦看看才行那有问题,多谢了。


#include "msp430g2553.h"

#define uchar unsigned char
#define uint unsigned int


# define  LED1_1 P1OUT |= BIT0
# define  LED1_0 P1OUT &= ~BIT0          

# define  LED2_1 P1OUT |= BIT6
# define  LED2_0 P1OUT &= ~BIT6       


/*****系统时钟初始化*****/
void Clock_Init()
{
  //BCSCTL2 |= SELS;
  //BCSCTL1 = CALBC1_8MHZ;//MCLK为DCO,8MHZ  
  //DCOCTL = CALDCO_8MHZ;

  BCSCTL1 = CALBC1_1MHZ;//MCLK为DCO,8MHZ  
  DCOCTL = CALDCO_1MHZ;

}


void  delay_us( uchar k )
{
   uchar i,j;
   for( i=0;i<100;i++ )
      for( j=100;j<100;j++ );
}

/*****串口设置*****/
void UART_Init()
{
  P1SEL = BIT1 + BIT2;//P1.1 P1.2设置为TXD,RXD
  P1SEL2 = BIT1 + BIT2;

  delay_us(10);
  UCA0CTL1 |= UCSWRST;
  UCA0CTL1 |= UCSSEL_1;      //ACLK
  UCA0BR0 = 3;                              // ACLK 32768Hz 9600   32768Hz/9600 = 3.41
  UCA0BR1 = 0;                              // 32768Hz 9600
  UCA0MCTL = UCBRS1 + UCBRS0;               // Modulation UCBRSx = 3

  //UCA0CTL1 |= UCSWRST;
  //UCA0CTL1 &= ~UCSWRST;


  UCA0CTL1 &= (~UCSWRST);//串口设置完毕,在UCSWRST=1时设置串口
  UC0IE |= UCA0TXIE + UCA0RXIE;//使能接收和发送中断
}
/*****串口发送数据函数*****/
void Send_Byte(uchar data)
{
  while(IFG2 & UCA0TXIFG == 0);//发送寄存器空的时候发送数据
  UCA0TXBUF = data;
}

/*****处理来自串口的接收中断*****/
#pragma vector = USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
  uchar data = 0;
  data = UCA0RXBUF;//接收到的数据存起来
  Send_Byte(data);//将接收到的数据再发送出去
}

/*****处理来自串口的发送中断*****/
#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCI0TX_ISR(void)
{

}


/*****主函数*****/
int main( void )
{
  WDTCTL = WDTPW + WDTHOLD;
  Clock_Init();

  UCA0CTL1 &= ~UCSWRST;
  UART_Init();//串口初始化
  //_EINT();//开中断

  while(1)
  {
     Send_Byte('n');
     Send_Byte('s');
  }
}


 
 
 

回复

2781

帖子

419

TA的资源

五彩晶圆(中级)

12
 
还是得手动复位

是什么意思?

点评

用上位机显示后,出现乱码,按复位键才开始发送正常数据,老大,是我那没配好?  详情 回复 发表于 2014-8-2 21:21
 
个人签名
 
 

回复

161

帖子

0

TA的资源

一粒金砂(中级)

13
 

用上位机显示后,出现乱码,按复位键才开始发送正常数据,老大,是我那没配好?
 
 
 

回复

2781

帖子

419

TA的资源

五彩晶圆(中级)

14
 
开发板上电后,通常都要按一下复位键

点评

老大,我想,让他软件复位。软件复位也写了,还有,时钟配置对不对。  详情 回复 发表于 2014-8-2 21:46
 
个人签名
 
 

回复

161

帖子

0

TA的资源

一粒金砂(中级)

15
 
qinkaiabc 发表于 2014-8-2 21:43
开发板上电后,通常都要按一下复位键

老大,我想,让他软件复位。软件复位也写了,还有,时钟配置对不对。
 
 
 

回复

1972

帖子

0

TA的资源

五彩晶圆(初级)

16
 
时钟应该是没有问题的,要不然也不会在硬件复位之后能正确的发数据了;上位机出现乱码,我不知道你是在程序运行的时候才接上位机的还是一开始就接好上位机才开始运行程序,如果是前者的话,那很好解释,就是程序运行过程中才接上位机,那么在上位机端是可能会出现乱码的,因为你不知道你接上的上位机的时候单片机是否在发送数据的过程中,除非你刚好在新的数据帧被发送出去之前接上上位机,但是这个概率很低,但是如果是后者的话,就得好好研究了

点评

我的 UCA0MCTL配置,好像不是完整的,多谢  详情 回复 发表于 2014-8-3 08:58
 
 
 

回复

161

帖子

0

TA的资源

一粒金砂(中级)

17
 
bobde163 发表于 2014-8-2 22:48
时钟应该是没有问题的,要不然也不会在硬件复位之后能正确的发数据了;上位机出现乱码,我不知道你是在程序 ...

我的 UCA0MCTL配置,好像不是完整的,多谢
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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