This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
您好,
我正在尝试建立从2.8035万到SIM900模块的通信。
请建议我如何继续。
它很紧急。。。
是的,我只是像您所说的那样做。
如果 我在某些地方错了,请纠正我。
请 查找所附代码以供您理解。
我在行中收到错误消息:141 ( msg ="AT+SAPBR=3,1,"Contype,"GPRS";)
/********** 帧格式************** //*********************************** / //标头检测 //设备ID,帧大小 //d1 //d2 //d3 //DN //CRC #include "DSP28x_Project.h" //设备标题文件和示例包括文件 #include "DSP2803x_Device.h" // Headerfile包括文件 #include "DSP2803x_examples.h"//示例包括文件 #define MAX_FRAM_DATA_SIZE 32//10 //16位数数据//两个8位的倍数 #define buffer_size 64 //应大于数据大小的2倍//unsigned char tx_frame[buffer_size],tx_frame_len = 4;// 60 8位 char tx_frame[buffer_size],tx_frame_len = 0;// 60 8位 char rx_frame_size],rx_frame_len = 0; #define Device_ID 0x01 //设备ID #define frame_header 0xAABB //COMM frame detect header void transmit_dat (char nData,char x_device_address); void cleal_rx_frame (void); void cleal_x_frame (void); char scia_xmit (char a); char scia_msg(car *msg); volatile char temp_address = 0x01; unsigned int CRC16 (char * pucFrame,char len); __interrupt void sciaTxFifoIsr (void); __interrupt void scia_fifo_init(void); 结构字节 { 字符LO_BYTE:8; 字符Hi-Byte:8; }; UNION DATA_BIT16 { 无符号int bit_16; 结构字节字节;}; volatile char Rx_Data_received =0,CRC_Check_BEGIN =0; UNION DATA_BIT16 Rx_Data[MAX_FRAGE_DATA_SIZE]; UNION DATA_BIT16 TX_Data[MAX_FRAGE_SIZE]; CHAR *msg; CHAR aucTx_BUFFER_INDEX =0; 静态const CHI[]={ 0x00,0xC1,0x81,0x40,0x01, 0xC0,0x80,0x41,0x01,0xC0, 0x80,0x41, 0x00,0xC1,0x81,0x40,0x01, 0xC0,0x80,0x41,0x00,0xC1, 0x81,0x40, 0x00,0xC1,0x81,0x40,0x01, 0xC0,0x80,0x41,0x01,0xC0, 0x80,0x41, 0x00,0xC1,0x81,0x40,0x00, 0xC1,0x81,0x40,0x01,0xC0, 0x80,0x41, 0x00,0xC1,0x81,0x40,0x01, 0xC0,0x80,0x41,0x01,0xC0, 0x80,0x41, 0x00,0xC1,0x81,0x40,0x01, 0xC0,0x80,0x41,0x00,0xC1, 0x81,0x40, 0x00,0xC1,0x81,0x40,0x01, 0xC0,0x80,0x41,0x00,0xC1, 0x81,0x40, 0x01,0xC0,0x80,0x41,0x01, 0xC0,0x80,0x41,0x00,0xC1, 0x81,0x40, 0x00,0xC1,0x81,0x40,0x01, 0xC0,0x80,0x41,0x01,0xC0, 0x80,0x41, 0x00,0xC1,0x81,0x40,0x01, 0xC0,0x80,0x41,0x00,0xC1, 0x81,0x40, 0x00,0xC1,0x81,0x40,0x01, 0xC0,0x80,0x41,0x01,0xC0, 0x80,0x41, 0x00,0xC1,0x81,0x40,0x00, 0xC1,0x81,0x40,0x01,0xC0, 0x80,0x41, 0x00,0xC1,0x81,0x40,0x01, 0xC0,0x80,0x41,0x01,0xC0, 0x80,0x41, 0x00,0xC1,0x81,0x40,0x00, 0xC1,0x81,0x40,0x01,0xC0, 0x80,0x41, 0x01,0xC0,0x80,0x41,0x00, 0xC1,0x81,0x40,0x01,0xC0, 0x80,0x41, 0x00,0xC1,0x81,0x40,0x00, 0xC1,0x81,0x40,0x01,0xC0, 0x80,0x41, 0x00,0xC1,0x81,0x40,0x01, 0xC0,0x80,0x41,0x01,0xC0, 0x80,0x41, 0x00,0xC1,0x81,0x40,0x01, 0xC0,0x80,0x41,0x00,0xC1, 0x81,0x40, 0x00,0xC1,0x81,0x40,0x01, 0xC0,0x80,0x41,0x01,0xC0, 0x80,0x41, 0x00,0xC1,0x81,0x40,0x00, 0xC1,0x81,0x40,0x01,0xC0, 0x80,0x41, 0x00,0xC1,0x81,0x40,0x01, 0xC0,0x80,0x41,0x01,0xC0, 0x80,0x41, 0x00,0xC1,0x81,0x40 }; 静态const char aucCRCLo[]={ 0x00,0xC0,0xC1,0x01,0xC3, 0x03,0x02,0xC2,0xC6,0x06, 0x07,0xC7, 0x05,0xC5,0xC4,0x04,0xCC, 0x0C,0x0D,0xCD,0x0F,0xCF, 0xCE,0x0E, 0x0A,0xCA,0xCB,0x0B,0xC9, 0x09,0x08,0xC8,0xD8,0x18, 0x19,0xD9, 0x1b,0xDB,0xDA,0x1A,0x1E, 0xDE,0xDF,0x1F,0xDD,0x1D, 0x1C,0xDC, 0x14,0xD4,0xD5,0x15,0xD7, 0x17,0x16,0xD6,0xD2,0x12, 0x13,0xD3, 0x11,0xD1,0xD0,0x10,0xF0, 0x30,0x31,0xF1,0x33,0xF3, 0xF2,0x32, 0x36,0xF6,0xF7,0x37,0xf5, 0x35,0x34,0xF4,0x3C,0xFC, 0xFD,0x3D, 0xFF,0x3F,0x3E,0xFE,0xFA, 0x3A,0x3B,0xFB,0x39,0xF9, 0xf8,0x38, 0x28,0xE8,0xE9,0x29,0xEB, 0x2B,0x2A,0xEA,0xEE,0x2E, 0x2F,0xEF, 0x2D,0xED,0xEC,0x2C,0xE4, 0x24,0x25,0xE5,0x27,0xE7, 0xE6,0x26, 0x22,0xE2,0xE3,0x23,0xE1, 0x21,0x20,0xE0,0xA0,0x60, 0x61,0xA1, 0x63,0xA3,0xA2,0x62,0x66, 0xA6,0xA7,0x67,0xA5,0x65, 0x64,0xA4, 0x6C,0xAC,0xAD,0x6D,0xAF, 0x6f,0x6E,0xAE,0xAA,0x6A, 0x6B,0xAB, 0x69,0xA9,0xA8,0x68,0x78, 0xB8,0xB9,0x79,0xBB,0x7B, 0x7A,0xBA, 0xBE,0x7E,0x7F,0xBF,0x7D, 0xBD,0xBC,0x7C,0xB4,0x74, 0x75,0xB5, 0x77,0xB7,0xB6,0x76,0x72, 0xB2,0xB3,0x73,0xB1,0x71, 0x70,0xB0, 0x50,0x90,0x91,0x51,0x93, 0x53,0x52,0x92,0x96,0x56, 0x57,0x97, 0x55,0x95,0x94,0x54,0x9C, 0x5C,0x5D,0x9D,0x5F,0x9F, 0x9E,0x5E, 0x5A,0x9A,0x9B,0x5B,0x99, 0x59,0x58,0x98,0x88,0x48, 0x49,0x89, 0x4B,0x8B,0x8A,0x4A,0x4E, 0x8E,0x8F,0x4F,0x8D,0x4D, 0x4C,0x8C, 0x44,0x84,0x85,0x45,0x87, 0x47,0x46,0x86,0x82,0x42, 0x43,0x83, 0x41,0x81,0x80,0x40 }; //从SCI传输字符 char scia_xmit (char a) { while (SciaRegs.SCIFFTX.Bit.TXFFST !=0){} SciaRegs.SCITXBUF=A; 返回A; } char scia_msg (char * msg) { int i; I = 0; while (msg[i]!='\0') { scia_xmit (msg[i]); I++; tx_buffer_index+; } 返回msg[i]; } void transmit_dat (char nData,char Tx设备地址) //输入"no of data","to address",使用"Tx_data[]"数组存储Tx数据 { unsigned int crc_dat =0; tx_frame[0]= frame_header>>8; //首先发送数据MSB tx_frame[1]= frame_header; //帧标题 tx_frame[2]= tx_device_address; //收件人地址 MSG ="AT+SAPBR=3,1,"Contype,"GPRS"; tx_frame[x_buffer_index+]= scia_msg (msg); crc_dat = crc16 ((char*)(Tx_frame+4),(nData*2)); //计算16位CRC tx_frame[26]= crc_dat; tx_frame[27]= crc_dat>8;// 0*(Tx_data+m)>> 8. //将CRC分配给Tx帧 tx_frame[28]= 0x0022; TX_Frame_len = TX_BUFFER_INDEX; tx_frame[29]= 0x00E3; tx_frame[30]= 0x00E0; tx_frame[31]= tx_buffer_index; GpioDataRegs.GPASET.bit.GPIO6 = 1; //写入1以启用Pin SciaRegs.SCICTL1.bit.TXENA = 1; //启用传输中断 。} unsigned int CRC16( char * pucFrame,char len ) //从参考表中检查CRC。 { 字符 ucCRCHi = 0xFF; 字符 ucCRCLo = 0xFF; 内部 iIndex; 同时( len---) { iIndex = ucCRCLo ^*( pucFrame++); uccrclo =(char)( uccrchi ^ auccrchi[iIndex]); ucCRCHi = aucCRCLo[iIndex]; } return ( unsigned int )( ucCRCHi <<8| ucCRCLo ); } void cleal_rx_frame(void) //清除rx_frame { 字符j; 对于(j = 0;j < buffer_size;j++) { Rx_frame[j]= 0; } } 作废cleal_x_frame(void) //清除Tx_frame { 字符j; 对于(j = 0;j < buffer_size;j++) { tx_frame[j]= 0; } } void main(void){// 步骤1. 初始化系统控制: // PLL,看门狗,启用外设时钟 //此示例功能可在DSP2803x_sysctrl.c文件中找到。 InitSysCtrl();// 步骤2. 初始化GPIO: //此示例函数可在DSP2803x_GPIO.c文件中找到, //说明了如何将GPIO设置为其默认状态。 // InitGpio();//跳过此示例 //此示例仅初始化ePWM1,ePWM2,ePWM3的GPIO引脚 //这些函数位于DSP2803x_ePWM.c文件q InitEPwm1Gpio(); InitEPwm2Gpio();InitEPwm3Gitpio/ Indio( ) //步骤3. 清除所有中断并初始化PIE矢量表: //禁用CPU中断 DINT; //将PIE控制寄存器初始化到其默认状态。 //默认状态是禁用所有PIE中断, 并清除标志//。 //此函数位于DSP2803x_PIECTRL.c文件中。 InitPieCtrl(); Memcopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart); InitFlash(); //禁用CPU中断并清除所有CPU中断标志: IER = 0x0000; IFR = 0x0000; //初始化PIE矢量表,其中包含指向Shell中断 //服务例程(ISR)的指针。 //这将填充整个表,即使在此 示例中未使用中断//。 这对于调试非常有用。 // shell ISR例程可在DSP2803x_DefaultIsr.C.中找到 //此函数位于DSP2803x_PieVect.C.中 InitPieVectorTable(); EALLOW;//需要写入EALLOW保护寄存器 PieVectorTable.SCIRXINTA =&sciaRxFifoIsr; PieVectorTable.SCITXINTA =&SyssciaTxGPoTBIsr; EDIS;//这是禁用写入ELA12.CLI的必需项;寄存 器= EALLOW.CLAL.CA.ALDW; 寄存器= 0;受保护的寄存器。 scia_fifo_init();//初始化SCI-A EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; EDIS; //PieCtrlRegs.PIECTRL.bit.ENPIE =1;//启用PIE块 PieCtrlRegs.PIEIER9.bit.INTx1=1; // PIE组9,INT1 PieCtrlRegs.PIEIER9.bit.INTx2=1; // PIE组9,INT2 IER || M_INT1; //启用CPU中断1 IER || M_INT9; EINT; //启用全局中断INTM ERTM; //启用全局实时中断DBGM Clear_Rx_frame(); Clear_Tx_frame(); for (;) { clean_x_frame(); transmit_dat (30,temp_address);// IF (CRC_Check_BEGIN == 1) { CRC_Check_BEGIN = 0; IF (CRC16 ((char*)(rx_frame+4),rx_frame_len)== 0) { int t_rx_pos = 0,rx_pos = 4; while (t_rx_pos <((rx_Frame_len-2)/2)) { RX_Data[t_Rx_pos].byte.HI_byte = Rx_frame[Rx_pos+]; RX_Data[t_Rx_pos++].byte.Lo_byte = Rx_frame[Rx_pos+]; } T_Rx_pos = 0; rx_pos = 0; RX_Data_Received = 1; } 否则 { RX_Data_Received = 0; } Clear_Rx_frame(); RX_Frame_len = 0; } } } __interrupt void sciaRxFifoIsr (void) { /* 在Rx_ISR中执行的操作 ->如果两次连续比较失败,请重置Rx_pos ->断言标头检测=0; ->如果Rx已启动,则启用Rx_receiving =1,启动计数器并重置所有内容(以确保代码不会在半帧状态下被删除) ->在Rx_frame长度等于指定帧长度时设置CHECK_CRC标志-完成 ->在ISR环路之外检查CRC - Done (完成)*/ 静态易失性无符号char Header_Detect = 0,rx_pos = 0,rx_isr_count = 0; RX_ISR_COUNT++; while (SciaRegs.SCIFFRX.bit.RXFFST!= 0) { Rx_frame[Rx_pos+]= SciaRegs.SCIRXBUF.ALL; } IF (Header_Detect == 1) { IF ((rx_pos-4)>= rx_Frame_len)//if (t_rx_pos >= rx_pos) { CRC_Check_BEGIN = 1; header_detect = 0; rx_pos = 0; RX_ISR_COUNT = 0; } } 否则,如果(Rx_frame[0]== 0xAA) { // rx_frame_detected = 1; IF (Rx_frame[1]== 0xBB)/(Rx_frame[2]== Device_ID))/&&(Rx_ISR_COUNT ==2)) { 如果(rx_pos > 3) { Rx_Frame_len = Rx_frame[3]; header_detect = 1; } } } 否则,如果((Rx_pos >= 4)&&(Header_detect == 0)) { RX_ISR_COUNT = 0; rx_pos = 0; Rx_frame[0]= 0x00; Rx_frame[1]= 0x00; Rx_frame[2]= 0x00; Rx_frame[3]= 0x00; } SciaRegs.SCIFFRX.Bit.RXFFOVRCLR=1;//清除溢出标志 SciaRegs.SCIFFRX.Bit.RXFFINTCLR=1;//清除中断标志 PieCtrlRegs.PIEACK.all|=0x100; //问题派克 } /* 在Rx_ISR中执行的操作 发送Tx帧时禁用Tx提示。 将启用设置为低 重置txpos */ __interrupt void sciaTxFifoIsr (void) { SciaRegs.SCIFFTX.Bit.TXFFINTCLR=1;//清除SCI中断标志 PieCtrlRegs.PIEACK.all|=0x100; //发出PIE ACK ASM (" NOP"); EINT; 静态无符号字符Tx位置= 0; while ((SciaRegs.SCIFFTX.Bit.TXFFST < 4)&&(Tx位置< TX_Frame_len)) { SciaRegs.SCITXBUF = Tx_frame[Tx_pos+]; } IF ((TX_POS >= TX_Frame_len)&&(SciaRegs.SCICTL1.bit.TXENA == 1)// IF ((Tx位置>= TX_Frame_len)&&(SciaRegs.SCICTL1.bit.TXENA == 1)) { Clear_Rx_frame(); //GpioDataRegs.GPACLEAR.bit.GPIO6 = 1; SciaRegs.SCICTL1.bit.TXENA = 0; //禁用传输中断。 TX_POS = 0; TX_Frame_len = 0; } 色调; /* SciaRegs.SCIFFTX.Bit.TXFFINTCLR=1;//清除SCI中断标志 PieCtrlRegs.PIEACK.all|=0x100; //发出PIE ACK*/ } void scia_fifo_init() { EALLOW; GpioCtrlRegs.GPAPUD.bit.GPIO7 = 0; //启用GPIO7 (SCIRXDA)的上拉功能 gpioCtrlRegs.GPAPUD.bit.GPIO12 = 0;//启用GPIO12 (SCITXDA)的上拉 gpioCtrlRegs.GPAQSEL1.bit.GPIO7 = 3;//异步输入GPIO7 (SCIRXDA) GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 2;//为SCIRXDA操作配置GPIO7 GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 2;//为SCITXDA操作配置GPIO12 EDIS; SciaRegs.SCICCR.ALL =0x0007;// 1停止位,无回送 //无奇偶校验,8个字符位, //异步模式,空闲线路协议 SciaRegs.SCICTL1.all =0x0001;//0x0003 //启用TX,RX,内部SCICLK, //禁用RX ERR,睡眠,TXWAKE SciaRegs.SCICTL2.bit.TXINTENA =1; SciaRegs.SCICTL2.bit.RXBKINTENA =1; SciaRegs.SCIHBAUD = 0x0000; SciaRegs.SCILBAUD = 0x00C2;//125万//1;//62.5万//15;//--5.6万 //30;//--3.8265万//61//--19200;1.92万;//C2;//--9600 SciaRegs.SCIFFTX.ALL = 0xC020; SciaRegs.SCIFFRX.ALL = 0x0022; SciaRegs.SCIFFCT.ALL = 0x0000; SciaRegs.SCIPRI.ALL = 0x0010; SciaRegs.SCICTL1.all =0x0021;//0x0023 //从重置放弃SCI SciaRegs.SCIFFTX.Bit.TXFIFOXRESET=1; SciaRegs.SCIFFRX.Bit.RXFIFORESET=1; clean_x_frame(); clean_x_frame(); }
Ramakrishna Dutt 说:我在行中收到错误:141 ( msg ="AT+SAPBR=3,1,"Contype,"GPRS";)[/QUOT]
是,您不能有多个双反转逗号。\n尝试:
msg =
"AT+SAPBR=3,1,
Contype
,
GPRS
"
;
顺便说一下,这是一个仅在"GPRS"之后才带有CR的单个命令吗?
此致,
Gautam
主席先生,我现在没有错。
但我仍然处于一个混乱的阶段,如何同时获取数据和AT命令。 你能给出任何想法/想法...
您好,Gautham:
我的工作已经到了尾声。
但现在的问题是:
根据sim900模块,命令的语法应为:
AT+SAPBR=3,1,"Contype","GPRS"。
那么,如何定义这种类型的字符串。
我不知道。