先上代码
//*********************************************************************** // 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”呢
本人新手,希望高手们不吝赐教。
|