先上代码
//***********************************************************************
// 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
";
uint i=0;
for(i=0;s
!=' ';i++)
{
Send_Byte0(s);
} //发送字符串测试
delay_ms(500);
// RS485_CTR0; //切换到接收状态
_EINT(); //开中断
while(1) //无限循环
{
}
}
我用串口助手调试,为什么会收到9个"AT+CSTT”
有什么办法让他只收到一个“AT+CSTT”呢
本人新手,希望高手们不吝赐教。
此帖出自小平头技术问答
这个问题已得到解决
出错的原因是:开发板有个usb转串口的下载程序模块,每次上电后,它会复位几次,直到模块稳定。
所以才有这个问题的产生。
解决方法:不适用usb转串口,直接使用串口连接就行了。
另外:清除接收中断标志位的方法IFG1&=0XBF; IFG2&=0XEF;
一周热门 更多>