我想将 GSM SIM800模块与 Tiva c 系列协调器相连接。
和要使用 TM4C.I 的 UART 向 GSM 模块发送 AT 命令、我希望使用 SIM800和 AT 命令通过 GPRS 发布 MQTT 数据
如果我发送
"在\r\n 时"我接收回
"在"
好的
"\\"AT+CSTT="BSNLNET\"\n\n\0"我接收回
"AT+CSTT="BSNLNE 预期
AT+CSTT="BSNLNET"
好的
这是我的代码
#include
#include
#include
//#include "inc/tm4c123ghp6.h"
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "driverlib/debug.h"
#include "driverlib/fpu.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "utils/uartstdio.h"
#include "driverlib/uart.h"
char ok[]="OK\r\n";
char receivechar[50];
int 计数= 0;
int count1=0;
unsigned int i、j;
空 UARTTransmitCommand (char *p)
{
while (*p!='0')
{
ROM_UARTCharPutNonBlocking (UART1_base、* p);
P++;
}
ROM_IntEnable (INT_UART1);
}
//驱动程序库遇到错误时调用的错误例程。
//
//
#ifdef 调试
无效
_error__(char * pcFilename、uint32_t ui32Line)
{
}
#endif
//
// UART 中断处理程序。
/********* /
无效
UART1 IntHandler (空)
{
uint32_t ui32Status;
++国家1;
//
//获取中断状态。
//
ui32Status = ROM_UARTIntStatus (UART1_base、true);
//
//清除已发出的中断。
ROM_UARTIntClear (UART1_BASE、ui32Status);
//在接收 FIFO 中有字符时循环。
//
while (ROM_UARTCharsAvail (UART1_base))
{
receivechar[count]=ROM_UARTCharGetNonBlocking (UART1_base);
ROM_UARTCharPutNonBlocking (UART0_BASE、receivechar[count]);
count++;
if (count = 50);
计数= 0;
}
ROM_IntDisable (INT_UART1);
}
/******** /
内部
main (空)
{
//
//为中断处理程序启用怠惰堆栈。 这允许使用浮点
/////要在中断处理程序中使用的指令,但代价是
//额外的堆栈用法。
//
ROM_FPUEnable();
ROM_FPULazyStackingEnable();
//
//将时钟设置为直接从晶体运行。
//
ROM_SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_16MHz);
//
//启用此示例使用的外设。
//
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART1);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
//
//启用处理器中断。
//
ROM_IntMasterEnable();
//
//将 GPIO B0和 B1设置为 UART 引脚。
//
GPIOPinConfigure (GPIO_PB0_U1RX);
GPIOPinConfigure (GPIO_PB1_U1TX);
GPIOPinConfigure (GPIO_PA0_U0RX);
GPIOPinConfigure (GPIO_PA1_U0TX);
ROM_GPIOPinTypeUART (GPIO_PORTB_BASE、GPIO_PIN_0 | GPIO_PIN_1);
ROM_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);
//
//将 UART 配置为115、200、8-N-1操作。
//
ROM_UARTConfigSetExpClk (UART1_base、ROM_SysCtlClockGet ()、115200、
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));
ROM_UARTConfigSetExpClk (UART0_BASE、ROM_SysCtlClockGet ()、115200、
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));
//
//启用 UART 中断。
ROM_UARTIntEnable (UART1_base、UART_INT_RX | UART_INT_RT);
ROM_UARTFIFOEnable (UART1_BASE);
UARTFIFOLevelSet (UART1_base、UART_FIFO_TX1_8、UART_FIFO_RX1_8);
ROM_UARTIntEnable (UART0_BASE、UART_INT_RX | UART_INT_RT);
ROM_UARTFIFOEnable (UART0_BASE);
UARTFIFOLevelSet (UART0_BASE、UART_FIFO_TX1_8、UART_FIFO_RX1_8);
UARTEnable (UART0_BASE);
UARTEnable (UART1_BASE);
while (1)
{
操作
{
UARTTransmitCommand ("at\r\n");
SysCtlDelay (SysCtlClockGet ());
SysCtlDelay (SysCtlClockGet ());
SysCtlDelay (SysCtlClockGet ());
中断;
}while ((strcmp (ok、receivechar))!=0);
操作
{
UARTTransmitCommand ("\"AT+CSTT="BSNLNET\"n\r\n\r\n");
SysCtlDelay (SysCtlClockGet ());
SysCtlDelay (SysCtlClockGet ());
SysCtlDelay (SysCtlClockGet ());
中断;
}while ((strcmp (ok、receivechar))!=0);
}
}
我得到如下输出
在高级版中感谢..........
