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.

[参考译文] CCS/TMS320F2.8035万:TMS320F2.8035万

Guru**** 2042920 points
Other Parts Discussed in Thread: CONTROLSUITE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/582049/ccs-tms320f28035-tms320f28035

部件号:TMS320F2.8035万
主题:controlSUITE中讨论的其他部件

工具/软件:Code Composer Studio

您好,

我正在尝试建立从2.8035万到SIM900模块的通信。

请建议我如何继续。

它很紧急。。。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,

    是否使用SCI-9600波特?

    此致,
    Gautam
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,先生。
    我还没有开始。我想问一下如何开始。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    下载controlSUITE并参阅:
    C:\ti\controlSUITE\DEVICE_SUPPORT\F2833x\v142\DSP2833x_Examples_ccsv5\scia_loopback</s>2833

    在与GSM模块连接时,请浏览SCI用户指南并禁用环回功能。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,主席先生,我只是指该守则。

    实际上我有一个GSM模块的命令集。

    我不了解如何将端口连接到sci-loopback代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您只需通过'scia_xmit'例程在命令处发送命令。 您需要创建新例程以接受数据数组,如sci_echoback示例中的'sci_msg'例程。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的,我只是像您所说的那样做。

    如果 我在某些地方错了,请纠正我。

    请 查找所附代码以供您理解。

    我在行中收到错误消息: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命令。 你能给出任何想法/想法...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请先尝试以下操作:

    MSG ="at\r\n";

    检查接收缓冲区中接收的内容。

    此致,
    Gautam
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Gautham:
    我的工作已经到了尾声。
    但现在的问题是:
    根据sim900模块,命令的语法应为:

    AT+SAPBR=3,1,"Contype","GPRS"。 

    那么,如何定义这种类型的字符串。


    我不知道。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    没关系。
    我得到了答案,无需回复。