入手了一块SIM900A,用232串口直接将连接模块,一切正常!可是用
单片机(MSP430F149),发送AT指令时,进不了接收中断,在串口上的表现是只有发送没有OK接收,硬件连接为:
单片机TXD---
模块5VR
或SRXD
单片机RXD---
模块5VT
或STXD
单片机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(); //等待进入接收中断
}
/*******************************************
函数名称:PutS
ting
功 能:向PC机发送字符串
参 数:无
返回值 :无
********************************************/
void PutString(char *ptr)
{
while(*ptr != ' ') //判断待发数据的开始
{
while (!(IFG1 & UTXIFG0)); // TX缓存空闲?空闲就发,否则等待哦
TXBUF0 = *ptr++; // 发送数据,指针
}
}
一周热门 更多>