2737|3

1800

帖子

0

TA的资源

五彩晶圆(初级)

楼主
 

串口通讯问题 [复制链接]

先上代码


 

//***********************************************************************
//             MSP430双串口双向通讯
//***********************************************************************

#include <msp430x14x.h>
#include "Config.h"                //开发板配置头文件,主要配置IO端口信息
#include "Uart.h"


//***********************************************************************
//               MSP430IO口初始化
//***********************************************************************
void Port_Init()
{
  LED8SEL  = 0x00;                      //设置IO口为普通I/O模式,此句可省
  LED8DIR  = 0xFF;                      //设置IO口方向为输出
  LED8PORT = 0xFF;                      //P2口初始设置为FF
 
  DATASEL  = 0x00;                      //设置IO口为普通I/O模式,此句可省
  DATADIR  = 0xFF;                      //设置IO口方向为输出
  DATAPORT = 0xFF;                      //P4口初始设置为FF
 
  CTRSEL  =  0x00;                      //设置IO口为普通I/O模式,此句可省
  CTRDIR |=  BIT3 + BIT4;               //设置IO口方向为输出,控制口在P63,P64
  CTRPORT =  0xFF;                      //P6口初始设置为FF 
 
  P2DIR |= BIT0;                        //P20口为RS485控制口,输出模式
  P2OUT |= BIT0;                        //置高P20
}

//*************************************************************************
//               MSP430串口初始化
//*************************************************************************
void UART1_Init()
{
  U1CTL|=SWRST + CHAR;                //复位SWRST,8位数据模式
  U1TCTL|=SSEL1;                      //SMCLK为串口时钟
  U1BR1=baud_h;                       //BRCLK=8MHZ,Baud=BRCLK/N
  U1BR0=baud_l;                       //N=UBR+(UxMCTL)/8
  U1MCTL=0x00;                        //微调寄存器为0,波特率9600bps
  ME2|=UTXE1;                         //UART1发送使能
  ME2|=URXE1;                         //UART1接收使能
  U1CTL&=~SWRST;
  IE2|=URXIE1;                        //接收中断使能位
 
  P3SEL|= BIT6 + BIT7;                //设置IO口为第二功能模式,启用UART功能
  P3DIR|= BIT6;                       //设置TXD1口方向为输出
}

void UART0_Init()
{
  U0CTL|=SWRST + CHAR;                //复位SWRST,8位数据模式
  U0TCTL|=SSEL1;                      //SMCLK为串口时钟
  U0BR1=baud_h;                       //BRCLK=8MHZ,Baud=BRCLK/N
  U0BR0=baud_l;                       //N=UBR+(UxMCTL)/8
  U0MCTL=0x00;                        //微调寄存器为0,波特率9600bps
  ME1|=UTXE0;                         //UART0发送使能
  ME1|=URXE0;                         //UART0接收使能
  U0CTL&=~SWRST;
  IE1|=URXIE0;                        //接收中断使能位
 
  P3SEL|= BIT4 + BIT5;                //设置IO口为第二功能模式,启用UART功能
  P3DIR|= BIT4;                       //设置TXD0口方向为输出
}

//*************************************************************************
//               处理来自串口0的接收中断
//*************************************************************************

#pragma vector=UART0RX_VECTOR
__interrupt void UART0_RX_ISR(void)
{
  uchar data=0;
  data=U0RXBUF;                       //接收到的数据存起来
  Send_Byte1(data);                    //将接收到的数据再发送出去
}


//*************************************************************************
//               处理来自串口1的接收中断
//*************************************************************************

#pragma vector=UART1RX_VECTOR
__interrupt void UART1_RX_ISR(void)
{
  uchar data=0;

  data=U1RXBUF;                        //接收到的数据存起来
  Send_Byte0(data);                    //将接收到的数据再发送出去
 // delay_ms(5);                        //切换之前先有个小延时
 // RS485_CTR0;                         //切换到接收状态
}

//*************************************************************************
//           主函数
//*************************************************************************
void main(void)
{
  WDT_Init();                         //看门狗设置
  Clock_Init();                       //系统时钟设置
  Port_Init();                        //端口初始化
  UART1_Init();                       
  UART0_Init();                       //串口设置初始化
  Close_LED();                        //关闭数码管显示
    uchar s[]="AT+CSTT\n";
    uint i=0;
    for(i=0;s!='\0';i++)
    {
        Send_Byte0(s);
    }                                   //发送字符串测试
    delay_ms(500);
 // RS485_CTR0;                         //切换到接收状态
  _EINT();                            //开中断
  while(1)                            //无限循环
    {
    }
}

 

我用串口助手调试,为什么会收到9个"AT+CSTT”

有什么办法让他只收到一个“AT+CSTT”呢

本人新手,希望高手们不吝赐教。

 
点赞 关注

回复
举报

1800

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 
顶一下,貌似是中断寄存器没清零
 
 

回复

1800

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
貌似还是不行,请问下清除中断标志是不是IFG1=0;IFG2=0;啊
 
 
 

回复

1800

帖子

0

TA的资源

五彩晶圆(初级)

4
 
今天心情大好,上来对以前问的问题做一下总结,
这个问题已得到解决
出错的原因是:开发板有个usb转串口的下载程序模块,每次上电后,它会复位几次,直到模块稳定。
             所以才有这个问题的产生。
解决方法:不适用usb转串口,直接使用串口连接就行了。
另外:清除接收中断标志位的方法IFG1&=0XBF;    IFG2&=0XEF;
 
 
 

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

随便看看
查找数据手册?

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