GSM问题求救大神

2019-07-15 16:18发布

入手了一块SIM900A,用232串口直接将连接模块,一切正常!可是用单片机(MSP430F149),发送AT指令时,进不了接收中断,在串口上的表现是只有发送没有OK接收,硬件连接为:单片机TXD---模块5VRSRXD

单片机RXD---模块5VTSTXD单片机GND---模块GND模块的VCC(VCC5V)接入DC3.3V模块的GND接入电源串口程序单独测试过,波特率配置为9600,配置没有问题。电源供给应该也没问题,因为串口直接发指令可以成功。希望大神帮忙,搞了很多天了,连个短信都发不出去!
#include  <msp430x16x.h>#include"gsm.h"#include<string.h>typedef unsigned char uchar;typedef unsigned int  uint;uchar rx_num=0;//用来计算串口发来的数据的个数uchar rx_sign=0;//用来提示单片机已经接收完一组完整的数据,等待接下来的比较char num[10];
void Init_CLK(void){   unsigned int i;    BCSCTL1 &= ~XT2OFF;   do   {    IFG1 &= ~OFIFG;    for(i= 0xff; i>0; i--);   }   while ((IFG1 & OFIFG)!=0);    BCSCTL2 |= SELM_2+DIVM_3;       BCSCTL2 |= SELS+DIVS_3; }
void Init_uart0(void){      P3SEL |= 0x30;    //P3.4,5为UART的收发端口  P3DIR|=BIT4;//P3.4为输出引脚  U0CTL|=CHAR;     //8_bit的数据  U0TCTL|=SSEL0;   //时钟源选择:AClk  UBR00=0x03;   //波特率是指为9600  UBR10=0x00;                               UMCTL0=0x4a;  UCTL0&= ~SWRST;  // 初始化USART0的状态  ME1 |= URXE0+UTXE0;   //打开收发开关  IE1 |= URXIE0;       //打开接受使能中断   _EINT();}
/********************主函数**********************/void main(void){    WDTCTL = WDTPW + WDTHOLD;                 // 关闭看门狗定时器    Init_CLK();    Init_uart0();     while(1)    {         send_message();     if(rx_sign==1)//表示接收到新的信息,并且已经读入接收缓冲区       {          rx_sign=0;//清零标志位       }
    }  }#pragma vector=USART0RX_VECTOR__interrupt void usart0_rx(void){        char data1;    rx_num++;//用于计数接收数据个数,也作为接收数组的下标    data1=RXBUF0;    if(data1!='')//判断是否为结束符    {       num[rx_num]=data1;       TXBUF0=num[rx_num];    }     else       {        rx_num=0;// 清零,用于下次计数        rx_sign=1;//标志已经接收完一组数据        TXBUF0=' ';      }
}
/******************下面是调用的其他一些函数:
void send_message(void)
{
    PutString("AT ");
    Delays();Delays();     //等待进入接收中断
}  

/*******************************************
函数名称:PutSting
功    能:向PC机发送字符串
参    数:无
返回值  :无
********************************************/
void PutString(char *ptr)
{
      while(*ptr != '')                             //判断待发数据的开始
      {
            while (!(IFG1 & UTXIFG0));              // TX缓存空闲?空闲就发,否则等待哦
            TXBUF0 = *ptr++;                       // 发送数据,指针           
      }

}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。