请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP432P401R 主题中讨论的其他部件:MAX232
您好,
我正在使用MSP432P01R 启动板通过UART与SIM808 GSM模块通信。 我希望基于HTTP协议将数据发布到远程服务器。
MSP432和GSM模块之间的通信基于AT命令。 为了 监控通过微控制器发送至GSM模块的指令,我已将GSM的TX连接至MAX232,并通过超级终端将数据发送至PC。
在下面提到的代码中,我能够执行所有AT命令,并在PC上的超级终端上获得相应的响应。 但该问题出现在说明 "AT+HTTPDATA=720000"中,在GSM模块中,返回下载以表示它已准备好接收要发送到服务器的数据, 但是,当执行要发送的数据(即 “id=1” )时,在超级终端上不显示任何内容。程序将继续执行。GSM将返回400作为HTTP的错误,该错误请求是错误的。
#include "driverlib.h"
#include <MSP.h>
void clockInit(void);
//------------------ 时钟初始化@ 48MHz---------------------------
void clockInit (void)
{
/* 2个闪存等待状态,VCORE =1,正在关闭直流-直流,48 MHz */
Flashctl_setWaitState(flash_BANK0, 2);
Flashctl_setWaitState(flash_Bank1,2);
PCM_setPowerState (PCM_AM_DCDC_VCORE1);
cs_setDCOCenteredFrequency (CS_DCO_Frequency_48);
cs_setDCOFrequency(4800万);
cs_initClockSignal (CS_MCLK,CS_DCOCLK_SELECT,1);
cs_initClockSignal (CS_SMCLK,CS_DCOCLK_SELECT,1);
cs_initClockSignal (CS_HSMCLK,CS_DCOCLK_SELECT,1);
返回;
}//------------------
正在设置UART波特率@ 9600------------------
const eUSI_UART_Config uartConfig ={
EUSCI_A_UART_CLOCKSOURCE_SMCLK, // SMCLK时钟源
312 // BRDIV = 78
8, // UCXBRF = 2
0, // UCXBRS = 0
EUSCI_A_UART_NO_PARity, //不奇偶校验
EUSCI_A_UART_LSB First, // MSB优先
EUSCI_A_UART_ON_STOP_BIT, //一个停止位
EUSCI_A_UART_MODE, // UART模式
EUSCI_A_UART_oversampling_BAUDRATE_generation // Oversampling
};//---------------
在UART中传递字符串的函数---------------------------
void UART_STRING(char*str)
{
while (*str !='\0')
{
while (!(UCA0IFG & UCTXIFG));
UCA0TXBUF=*str;
str++;
}//-------
在UART中发送命令的函数-------------------------------
void UART_cmd(unsigned int cmd)
{while
(!(UCA0IFG & UCTXIFG));
UCA0TXBUF=cmd;
}//------------------
主计划-------------------------------
int main (void)
{
/*正在停止WDT */
WDT_A_HoldTimer();
clockInit();
无符号int I;
GPIO _setAsPeripheralModuleFunctionInputPin (GPIO_PORT_P1,
GPIO _PIN1|GPIO _PIN2 | GPIO _PIN3,GPIO主要模块功能);
P1DIR|=BIT0;
P1OUT&=~BIT0;
/*配置UART模块*/
UART_INITModule (EUSCI_A0_BASE,&uartConfig);
/*启用UART模块*/
UART_enableModule (EUSCI_A0_BASE);
UCA0IE|=UCTXIE; //启用Rx和Tx中断
UART_STRING ("AT"); // GSM AT命令
UART_CMD (0x0A); // Enter
UART_CMD(0x0D); //载波返回
_DELAY周期(2.4亿);
UART_STRING ("AT+CPIN?"); // SIM PIN Ready
UART_CMD (0x0A);
UART_CMD(0x0D);
_DELAY周期(2.4亿);
UART_STRING ("AT+CREG?"); //检查注册的网络
UART_CMD (0x0A);
UART_CMD(0x0D);
_DELAY周期(2.4亿);
UART_STRING ("AT+CSQ"); //网络强度
UART_CMD (0x0A);
UART_CMD(0x0D);
_DELAY周期(2.4亿);
UART_STRING ("AT+SAPBR=3,1,\"类型\",\"GPRS\"); //连接GPRS
UART_CMD (0x0A);
UART_CMD(0x0D);
_delay_cycles (2.4亿);
UART_STRING ("AT+SAPBR=3,1,\" APN\",\"www\"); //设置APN名称
UART_CMD (0x0A);
UART_CMD (0x0D);
_Delay_Cycles (2.4亿);
UART_STRING ("AT+SAPBR=3,1,\";\"用户\" //将用户名设置为空白
UART_CMD(0x0A);
UART_CMD(0x0D);
_DELAY周期(2.4亿);
UART_STRING ("AT+SAPBR=3,1,\"PWD\",\"\"); //将密码设置为空白
UART_CMD(0x0A);
UART_CMD(0x0D);
_DELAY CYCLES (2.4亿);
UART_STRING("AT+SAPBR=1,1"); //启用GPRS
UART_CMD(0x0A);
UART_CMD(0x0D);
用于(i=0;I<=5;I++)
{
_delay_cycles(2.4亿);
}
UART_STRING("AT+SAPBR=2,1"); //获取本地IP
UART_cmd(0x0A);
cmd_cmd(0x0D);
_delay_cycles(2.4亿);
UART_STRING("AT+HTTPINIT"); //初始化
UART HTTP_UART(0x0A);
UART_cmd(0x0D);
_delay_cycles(2.4亿);
UART_STRING("AT+HTTPPARA=\"CID\",1"); //设置HTTP
UART_cmd(0x0A);
UART_cmd_cmd(0x0D);UART_DELAY
_CYCLES (2.4亿);_STRING_UAR_2.4亿;
UAR_UAR_UAR_UAR_UAR_UAR=0000; UARUAR_2400.001万_UAR_UAR_UAR_UAR_UAR;_240000000; ");240000000">trendzworld.000webhostapp.com/api.php\"");240000000 ");">trendzworld.000webhostapp.com/api.php\"");
UARUAR_2.4亿; UAR_UARUAR_UAR=02000(art_UAR_UARUARUAR_UAR=02000; UARUARUAR_UAR_UAR_UARUAR_UAR_UAR_D02000 UARUARUAR_UAR_UAR_UARUAR_UAR_UAR_D
@ 0cm010;_2400.001万;_24000010;_24000010_UARUAR;_2400002000_D堆2400.001万堆叠24000010叠式2400002000式UAR_2400.001万;_24000010;_UAR</s>24000010
UART_STRING ("AT+HTTPACTION=1"); //HTTP Post
UART_CMD(0x0A);
UART_CMD(0x0D);
_DELAY周期(2.4亿);
P1OUT|=BIT0; //指示代码结束
while (1);
}
另外,我还想提及的是,上述所有AT命令都是使用超级终端软件独立执行的,而且数据的发布也是成功的。
感谢您的任何帮助
此致,
Amit Kotal