向各位大神求助了,我在用msp430串口连接GSM模块(TC35)的时候产生了重大问题。请听我细细道来。
我写了一个小程序,发送一个GSM的命令,然后GSM收到的话回返回数据的。可是GSM不返回。一开始我以为是电平问题,接了一块74ls244,再送给GSM。我确认通过74ls244后能数据能通过的,因为我接了USB转TTL的小板,串口调试助手收到了。
一个奇怪的现象是,USB转TTL发命令给GSM,让GSM返回数据到430,430收得到。但是430发数据给GSM,GSM不知道是收不到还是4什么原因,不返回数据给430(还是430收不到?用串口调试助手发给GSM,GSM也不返回。但是,同样用51通过GSM模块引出的串口,51和GSM是可以通信的。
我很怀疑是程序的问题,要么是电路的问题了。附上程序,跪求解决或者建议
#include
#define uint unsigned int
#define uchar unsigned char
#define MAXCHAR 20
uchar aa[MAXCHAR];
uchar j=0;
uchar ATE0[]="ATE0\r\n" ; //关闭回显一个\n 0a(还行符)
void Print_Char(uchar ch) //发送单个字节
{
while (!(IFG2&UCA0TXIFG));
UCA0TXBUF = ch;
}
void Print_Str(uchar *str) //发送字符串
{
while(*str!='\0')
{
Print_Char(*str);
//__delay_cycles(2000);
str++;
}
}
void Ini_UART(void)
{
P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
P1SEL2 = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
UCA0CTL1 |= UCSSEL_1; // CLK = ACLK ACLK默认外部32K晶振
UCA0BR0 = 0x03; // 32kHz/9600 = 3.41 32k/19200=1.66667
UCA0BR1 = 0; //
UCA0MCTL = UCBRS1 + UCBRS0; // Modulation UCBRSx = 3
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
_EINT();
}
#pragma vector=USCIAB0RX_VECTOR //接受中断
__interrupt void USCI0RX_ISR(void)
{
aa[j]= UCA0RXBUF;//命令存到命令数组
j++;
}
int main()
{
WDTCTL = WDTPW + WDTHOLD; // Stop
Ini_UART();
while(1)
{
Print_Str(ATE0);//关闭回显
__delay_cycles(1000000);
// while(1);
}
} |