请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:TMS320F2.8035万 主题:controlSUITE中讨论的其他部件
工具/软件:Code Composer Studio
您好,
我正在尝试建立从2.8035万到SIM900模块的通信。
请建议我如何继续。
它很紧急。。。
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();
}