新手求教msp430-485串口通信的问题

2019-03-24 14:13发布

测试环境:1)485芯片用的是TI的sn65hvd11,单片机用是TI的msp430F2618.2)用了一个rs232-rs485的转换器,和一个rs232-USB的数据线 问题:请前辈帮看下代码,哪里有错误没?串口助手始终收不到数据。单步调试中,UCA1TXBUF实终有数据存在,且UCA1TXIFG无法置位。我怀疑,是否我的时钟源,或者波特率配置有问题? 望前辈不吝赐教!谢谢 以下是代码:/*****************************************************************************
文件名:main.c
描述:MSP430 RS485示例程序
*****************************************************************************/#include <msp430x26x.h>
#define DRE_OUT P4DIR |=BIT0  //连接485芯片的DE,RE端口的IO设置为输出
#define DE P4OUT |=BIT0       //设置485芯片处于发送状态
#define RE P4OUT &=~BIT0      //设置485芯片处于接收状态
void Set_UART1(void);/***********主函数************/
void main(void)
{
  unsigned int i;
  WDTCTL = WDTPW + WDTHOLD;   //关闭开门狗
  BCSCTL3|=(XT2S_2+XCAP_2); //设置XT2为3--16MHZ范围
  BCSCTL1&=~XT2OFF;         //启动TX2
  BCSCTL1|=DIVA_1;          //LFXT1工作在低频模式,ACLK为2分频
  
  do
  {
    IFG1 &=~OFIFG;          //清除振荡器失效标志
    for(i=0xFF; i>0;i--);    //延时,待稳定
  }
  while ((IFG1&OFIFG)!=0); //若振荡器失效标志有效  /* Select SMCLK = XT2 - MCLK = XT2  */              
  BCSCTL2 |= SELM_2+SELS+DIVS_3;  //MCLK为8MHz,SMCLK为1MHz 
 
  DRE_OUT;
  DE;
  Set_UART1();
 
  while(1)
  {
    UCA1TXBUF =0xaa;
    while(!(UC1IFG&UCA1TXIFG));//等待发送结束
    UC1IFG &=~UCA1TXIFG;
  }
}/*****************************
函数名称:Set_UART1
功能:设置MCU的UART1对应的寄存器
参数:无
返回值:无
******************************/
void Set_UART1(void)
{
  P3SEL |=0xC0;                                 //将P3.6,P3.7选做UART1的通信端口
 
   UCA1CTL1|=UCSWRST; //进入复位状态
   //UC1IE &=~(UCA1TXIE | UCA1RXIE);
   UCA1CTL0=0x00;     //设置为USRT模式,无奇偶效验,8位1停,异步
   UCA1CTL1|=UCSSEL_2;//选择的时钟源为SMLK,无分频
   UCA1BR0=0x68;
   UCA1BR1=0x00;    
   UCA1MCTL=0x40;      //设置波特率为9600
   UC1IFG &=~UCA1TXIFG;       //清除中断标志 
   UCA1CTL1&=~UCSWRST;                  //启动UART1
   UC1IE |= (UCA1TXIE | UCA1RXIE);          //发送or接收中断使能
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
TONY.TJ
2019-03-24 22:44
问题解决了,是我编译环境没有配置好,option-->Debugger-->Driver选项中,我用的是软件调试,MCU没有复位。
把Driver选项换成FET Debugger,然后在FET Debugger选择中选择"Texas Instrument USB-IF"就好了。

另外,代码上我犯了个概念错误:UCA1IFG标志位,是没有数据时置位,我搞反了。
代码作下简单修改就测试成功了。

一周热门 更多>

相关问题

    相关文章