5231|7

316

帖子

1

TA的资源

纯净的硅(中级)

楼主
 

求高手看一个,UART 自发自收的问题! [复制链接]

芯片是MSP430F5310
环境是IAR5.20.1

代码如下方式实现:
void Init_Clk(void)
{
 
  P5SEL |= BIT4+BIT5;                       //使能 XT1功能脚
 
  UCSCTL6 &= ~(XT1OFF);                     // XT1 开启
  UCSCTL3 = 0;                              // FLL Reference Clock = XT1
 
  // Loop until XT1,XT2 & DCO stabilizes - In this case loop until XT1 and DCo settle
  do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG  + DCOFFG);
                                    // Clear XT2,XT1,DCO fault flags
    SFRIFG1 &= ~OFIFG;                      // Clear fault flags
  }while (SFRIFG1&OFIFG);
 
  UCSCTL6 &= ~(XT1DRIVE_3);                 // Xtal is now stable, reduce drive strength
 
  UCSCTL4 |= SELA_0 ;                        // ACLK = LFTX1 (by default)
}


/*******************************************
函数名称:InitUARTA
功    能:初始化UART端口
参    数:无
返回值  :无
********************************************/
void Init_uartA(void)
{
  P4SEL = BIT4+BIT5;                        // P4.4,5 = USCI_A0 TXD/RXD
  UCA0CTL1 |= UCSWRST;                      // **Put state machine in reset**
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  //UCA0CTL1 |= UCLISTEN;
  UCA1STAT |= BIT7;                         //使用自收自发模式
  UCA0BR0 = 0x03;                           // 32kHz/9600=3.41 (see User's Guide)
  UCA0BR1 = 0x00;                           //
  UCA0MCTL = UCBRS_1+UCBRF_0;               // Modulation UCBRSx=3, UCBRFx=0
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  UCA0IE |= UCRXIE; 
}


/*******************************************
函数名称:InitUARTB
功    能:初始化UART端口
参    数:无
返回值  :无
********************************************/
void Init_uartB(void)
{
  P4SEL = BIT4+BIT5;                        // P4.4,5 = USCI_A0 TXD/RXD
  UCB0CTL1 |= UCSWRST;                      // **Put state machine in reset**
  UCB0CTL1 |= UCSSEL_2;                     // SMCLK
  //UCA0CTL1 |= UCLISTEN;
  UCB1STAT |= BIT7;                         //使用自收自发模式
  UCB0BR0 = 0x03;                           // 32kHz/9600=3.41 (see User's Guide)
  UCB0BR1 = 0x00;                           //
  UCA0MCTL = UCBRS_1+UCBRF_0;               // Modulation UCBRSx=3, UCBRFx=0
  UCB0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  UCB0IE |= UCRXIE; 
}


/*******************************************
函数名称:InitUARTB
功    能:初始化UART端口
参    数:无
返回值  :无
********************************************/
void Init_uartB(void)
{
  P4SEL = BIT4+BIT5;                        // P4.4,5 = USCI_A0 TXD/RXD
  UCB0CTL1 |= UCSWRST;                      // **Put state machine in reset**
  UCB0CTL1 |= UCSSEL_2;                     // SMCLK
  //UCA0CTL1 |= UCLISTEN;
  UCB1STAT |= BIT7;                         //使用自收自发模式
  UCB0BR0 = 0x03;                           // 32kHz/9600=3.41 (see User's Guide)
  UCB0BR1 = 0x00;                           //
  UCA0MCTL = UCBRS_1+UCBRF_0;               // Modulation UCBRSx=3, UCBRFx=0
  UCB0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  UCB0IE |= UCRXIE; 
}

/*******************************************
函数名称:BGet1Char
功    能:接收一个来自PC机的字符
参    数:无
返回值  :接收到的字符
********************************************/
uchar BGet1Char(void)
{
     while (!(UCB0IFG&UCTXIFG));    //等待接收到字符       
    return  UCB0RXBUF;
}

int main( void )
{

  WDTCTL   = WDTPW + WDTHOLD;           //关看门狗
  Init_Clk();
  Init_Port();

  Init_uartA();
  Init_uartB();

  _EINT();            //开总中断
 
  while(1)
  {

    ASend1Char(0x11);
   
    ReceiveV = BGet1Char();
   
    //LPM3;
  }
}

现在问题是在UCA0TXBUF时可以看到值!但是在UCB0RXBUF中看不到收到的值!

求高手指点!
别外在同一个芯片内实现一个UART 发一个UART 收,这样设置是不是有问题!






最新回复

楼上都已经开始讨论串口通信了,我现在还在纠结5310的最小系统呢,希望楼主可以给出个最小系统的原理,我做个最小系统的板子但是用山寨的PIF仿真器不能用,现在不知道是仿真器问题还是最小系统的问题!qq:462629051  详情 回复 发表于 2012-2-24 09:30
 
点赞 关注

回复
举报

5015

帖子

12

TA的资源

裸片初长成(初级)

沙发
 
代码都开了UART的中断接收使能,没有中断服务函数,代码基本上会跑飞重启。
 
 

回复

22

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
这么多,高手说详细点,本人笨
 
个人签名http://www.zjhztv.com
 
 

回复

316

帖子

1

TA的资源

纯净的硅(中级)

4
 
原帖由 wstt 于 2011-12-24 13:03 发表 代码都开了UART的中断接收使能,没有中断服务函数,代码基本上会跑飞重启。


有中断服务程序如下:


#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
       while (!(UCA1IFG & UCTXIFG));                                // 判断是否发送完毕
       UCA1TXBUF = UCA1RXBUF;                                       // 发送接收到的数据
}

当然应该有两个中断!一个A的一个B的!
我现在改成只有一个A ,让他发出,然后用示波器打,但是没有反应!
求指点!
[ 本帖最后由 wuyanyanke 于 2011-12-24 14:49 编辑 ]
 
 
 

回复

7219

帖子

195

TA的资源

五彩晶圆(高级)

5
 

回复 沙发 wstt 的帖子

就是 中断了 没入口给他了  他也不知道往哪里走 就不知道飞那里去了
 
 
 

回复

316

帖子

1

TA的资源

纯净的硅(中级)

6
 
代码不会跑飞!就是发不出去数据!
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

7
 
好长 我得慢慢看一下
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

8
 

MSP430F5310最小系统原理图

楼上都已经开始讨论串口通信了,我现在还在纠结5310的最小系统呢,希望楼主可以给出个最小系统的原理,我做个最小系统的板子但是用山寨的PIF仿真器不能用,现在不知道是仿真器问题还是最小系统的问题!qq:462629051
 
个人签名我爱嵌入式
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

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