微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求STM32与MG323程序

求STM32与MG323程序

时间:10-02 整理:3721RD 点击:
,本人在用STM32做与MG323芯片的程序,一直没通过编译,请问有哪位高人在做这方面的程序,能帮下忙吗这是本人写的程序
  // #include "sys.h"
#include "mg323.h"
//#include"usart.h"
//#include "delay_ms.h"
//#include "lcd.h"
//#include"putout.h"
//#include "string.h"
#include<iostream>  
#include <stdio.h>
#include <string.h>
//#include<windows.h>
#include<stdio.h>
//#include<wchar.h>
//#include<memory.h>
extern char  ascii_table_8x16[95][16];
struct uart
         {
   char rx0buf[64];
   char rx0buf_cnt;
         }
   //uart0_rec;   //--定义发送缓冲区
struct gprs{
          char car[64];
        }
  struct uart uart0_rec;
struct gprs gprs_report;
  //gprs_report; //---GPRS接受缓冲区
void clear_rx0buf()  //--擦除缓冲区
    {
    int i;
  for(i=0;i<120;i++)
  {
  uart0_rec.rx0buf[i]=0;
  }  
    }
  void  GPRS_POWER(char x) //---GPRS开机
      {
      mg323power=x;
      }
  void  GPRS_RESET(char x)//---GPRS复位
      {
      mg323rest=x;
      }
  void uart0_send(char *dp)//--发送函数
      {
      
      
    while(*dp!='\0')
      {
       USART1->DR=*dp;
          dp++;
       while((USART1->SR&0X40)==0);
      }
      }
      /*
void* memset(void* s, int c, size_t n)
{
    unsigned char* p = (unsigned char*) s;
    while (n > 0){
    *p++ = (unsigned char) c;
    --n;
    }
    return s;
}
   */
//  void *memset(void *s,int c,size_t n);
// char *strstr(char *str1, char *str2);
//char buf_login[];
//char cmp[];
//char adc[];
  /*
  void strstr()
     {
     }
     
  char ascii[]
     {
     *,!,",#,$,%,&,',(,),*,+,,,-,.,/,0,1,2,3,4,5,6,7,8,9,
     :,;,<,=,>,?,@,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,
     U,V,W,X,Y,Z,[,\,],^,_,`,a,b,c,d,e,f,g,h,i,g,k,l,m,n,o,
     p,q,r,s,t,u,v,w,x,y,z,{,|,},~
     }
    */
unsigned  char gprs_login_test(unsigned char portnum)
{
int i;
    unsigned char step, step_1_count, step_cnt = 0;
    unsigned char temp, temp1, tmp;
    unsigned char buf[120];
    unsigned char *p_strchr;
unsigned char flag_gprs;
// struct uart uart0_rec;
// struct gprs gprs_report;
  char cmp[];
  char adc[];
  char buf_login[];
    memset((void *)buf, 0x0, sizeof(buf));//----------------------
//for(i=0;i<120;i++)buf[i]=0;
  
    step = 1;
    step_1_count = 0;
    flag_gprs = 1;
    gprs_report.car[0] = adc[0];
    while(flag_gprs){
        switch(step){
            case 1://上电
           memset((void *)buf, 0x0, sizeof(buf)); //--------------- 系统函数
     //for(i=0;i<120;i++)buf[i]=0; //-----------
            sprintf((char *)buf, "this is #%02x times\r\n",  step_1_count);//-----------------------系统函数
   //clear_screen(); //---------------------
            //display_string_8x16ring_8x16("(char *)buf"); //-------------
           
           // display_string_8x16ring_8x16
            
                step_1_count ++;
                if(step_1_count > 5){
                    return 0;
                }
                uart0_rec.rx0buf_cnt = 0;
               memset((void *)uart0_rec.rx0buf, 0x0, sizeof(uart0_rec.rx0buf));//擦除缓冲区 ----------系统函数
    //for(i=0;i<120;i++)uart0_rec.rx0buf[0]=0;//-------
                uart0_send("AT^SMSO\r");
                delay_ms(1000);
    //clear_screen(); //--------------------------------
                //display_string_8x16("Power OFF MG323B\r\n"); //------------------
                GPRS_RESET(1);
                GPRS_POWER(1); //先置低onoff,两种情况
                // 1之前工作,置低可以是模块关机
                // 2之前没有工作,提前将onoff置低,可靠性高
                delay_ms(1000);        
                //GPRS_POWER_ENABLE(0); //关闭供电mos管切断590电源
                GPRS_POWER(0);
                GPRS_RESET(0);
                delay_ms(1000);
    //clear_screen(); //------------------        
                //display_string_8x16("Power ON MG323B\r\n");//--------------
               // GPRS_POWER_ENABLE(1); //打开供电mos管
                delay_ms(1000); //延时等待,等待电路中的电容充电过程
                GPRS_POWER(1);
                delay_ms(2000);
                GPRS_POWER(0);
                delay_ms(2000);
                temp = 200;
                while((temp != 0) && (uart0_rec.rx0buf_cnt == 0)){
                    temp --;
                    delay_ms(50);
                }
                if(uart0_rec.rx0buf_cnt != 0){//uart0收到数
                    delay_ms(100);
                    if(strstr(uart0_rec.rx0buf, "SYSSTART")){//上电成功
                        step ++;//下一次执行下一步
      //clear_screen(); //-----------------------
                        //display_string_8x16("power ok\r\n"); //----------------
                        uart0_rec.rx0buf_cnt = 0;
                        memset((void *)uart0_rec.rx0buf, 0x0, sizeof(uart0_rec.rx0buf));//擦除缓冲区
      //for(i=0;i<120;i++)uart0_rec.rx0buf[0]=0;
                    }else{//收到的数不对
                        step = 1;
      //clear_screen(); //---------------------------
                       // display_string_8x16("wrong data:");//-------------------
      delay_ms(1000);
      //clear_screen(); //---------------
                       // display_string_8x16("uart0_rec.rx0buf");//---------------
      delay_ms(1000);
      //clear_screen(); //-------------
                        //display_string_8x16("\r\ngo to step 1\r\n"); //---------------------------
                        uart0_rec.rx0buf_cnt = 0;
                        memset((void *)uart0_rec.rx0buf, 0x0, sizeof(uart0_rec.rx0buf));//擦除缓冲区
      //for(i=0;i<120;i++)uart0_rec.rx0buf[0]=0;//-----------     
                    }
                 
                }else{
     //clear_screen(); //-------------------
                    //display_string_8x16("step1 get nothing\r\ngo to step 1\r\n");//--------------
                    step = 1;
                }
                //flag ++;
            break;
            case 2://AT   
                uart0_send("AT\r\n");
    //clear_screen(); //-----------
                //display_string_8x16("at\r\n");//-------------
                temp = 10;
                //100 大概20秒  时间不够  现在改为200,40s
                while((temp != 0) && (uart0_rec.rx0buf_cnt == 0)){
                    temp --;
                    delay_ms(200);
                }  
                if(uart0_rec.rx0buf_cnt != 0){
                    delay_ms(50);
                    if(strstr(uart0_rec.rx0buf, "OK")){
                        step ++;//下一次执行下一步
      //clear_screen(); //---------------------
                        //display_string_8x16("GPRS AT OK\r\n");//-----------------
                        uart0_rec.rx0buf_cnt = 0;
                        memset((void *)uart0_rec.rx0buf, 0x0, sizeof(uart0_rec.rx0buf));//擦除缓冲区
      //for(i=0;i<120;i++)uart0_rec.rx0buf[0]=0;
                    }else{//收到的数不对
                        step = 1;
      //clear_screen(); //-----------------
                        //display_string_8x16("uart0 get wrong data:");//--------------------
      delay_ms(1000);
      //clear_screen(); //-----------------
                        //display_string_8x16("uart0_rec.rx0buf"); //------------------
      delay_ms(1000);
      //clear_screen(); //--------------------
                       // display_string_8x16("\r\ngo to step 1\r\n");//-------------
                        uart0_rec.rx0buf_cnt = 0;
                        memset((void *)uart0_rec.rx0buf, 0x0, sizeof(uart0_rec.rx0buf));//擦除缓冲区
      //for(i=0;i<120;i++)uart0_rec.rx0buf[0]=0;//--------------     
                    }
                }else{
        //clear_screen(); //--------------------
                   // display_string_8x16("uart0 get nothing\r\ngo to step 1\r\n");//-------------
                    step ++;              //----
                }
                //flag ++;
            break;
            case 3://ATE0   
                uart0_send("ATE0\r\n");
    //clear_screen(); //--------------------
               // display_string_8x16("ate0\r\n");//---------------------
                temp = 60;
                while((temp != 0) && (uart0_rec.rx0buf_cnt == 0)){
                    temp --;
                    delay_ms(200);
                }  //
                if(uart0_rec.rx0buf_cnt != 0){//uart0收到数
                    delay_ms(50);
                    if(strstr(uart0_rec.rx0buf, "OK")){//
                        step ++;//下一次执行下一步
      //clear_screen(); //--------------
                       // display_string_8x16("ATE0 OK\r\n");//---------------
                        uart0_rec.rx0buf_cnt = 0;
                        memset((void *)uart0_rec.rx0buf, 0x0, sizeof(uart0_rec.rx0buf));//擦除缓冲区
      //for(i=0;i<120;i++)uart0_rec.rx0buf[0]=0;//--------------
                    }else{//收到的数不对
                        step = 1;
      //clear_screen(); //----------------
                        //display_string_8x16("uart0 get wrong data:");//-------------
      delay_ms(1000);
      //clear_screen(); //-----------------
                        //display_string_8x16("uart0_rec.rx0buf");//----------------
      delay_ms(1000);
      //clear_screen(); //---------------------------
                       // display_string_8x16("\r\ngo to step 1\r\n");//----------------------
                        uart0_rec.rx0buf_cnt = 0;
                        memset((void *)uart0_rec.rx0buf, 0x0, sizeof(uart0_rec.rx0buf));//擦除缓冲区
      //for(i=0;i<120;i++)uart0_rec.rx0buf[0]=0;//--------------     
                    }
                }else{
     //clear_screen(); //--------------------------
                   // display_string_8x16("uart0 get nothing\r\ngo to step 1\r\n");//----------------
                    step = 1;
                }
                //flag ++;
            break;
            case 4://AT+CREG?
                clear_rx0buf();
                uart0_send("AT^SISO?\r\n");
                delay_ms(1000);
    //clear_screen(); //-------------------
                //display_string_8x16("uart0_rec.rx0buf");  
                clear_rx0buf();
                //clear_screen(); //----------------
                //display_string_8x16("at%creg\r\n"); //--------------
                for(temp1 = 0; temp1 <20; temp1 ++){
                    uart0_send("AT+CREG?\r\n");
                    temp = 150;
                    while((temp != 0) && (uart0_rec.rx0buf_cnt == 0)){
                        temp --;
                        delay_ms(50);
                    }      
                    if(uart0_rec.rx0buf_cnt != 0){//有数据返回
                        delay_ms(50);
                        if((strstr(uart0_rec.rx0buf, "CREG: 0,5")) || (strstr(uart0_rec.rx0buf, "CREG: 0,1"))){//网络正常
                            //step ++;
                            temp1 = 20;
       //clear_screen(); //--------------------
                           // display_string_8x16("uart0_rec.rx0buf");//--------------------
                            uart0_rec.rx0buf_cnt = 0;
                            memset((void *)uart0_rec.rx0buf, 0x0, sizeof(uart0_rec.rx0buf));//擦除缓冲区
       //for(i=0;i<120;i++)uart0_rec.rx0buf[0]=0;//----------
                            uart0_send("AT+CSQ\r\n");
                            delay_ms(1000);
                            uart0_send("AT+CSQ\r\n");
                            delay_ms(1000);
                            uart0_send("AT+CSQ\r\n");
                            delay_ms(1000);
                            uart0_send("AT+CSQ\r\n");
                            delay_ms(1000);
                            uart0_send("AT+CSQ\r\n");
                            delay_ms(1000);
       //clear_screen(); //------------------------
                            //display_string_8x16("uart0_rec.rx0buf");//----------
                            step ++;
                            step_cnt = 0;
                        }else{//返回数据不对
                            delay_ms(500);
       //clear_screen(); //-------------------------
                           // display_string_8x16("uart0_rec.rx0buf");//----------------
                            uart0_rec.rx0buf_cnt = 0;
                            memset((void *)uart0_rec.rx0buf, 0x0, sizeof(uart0_rec.rx0buf));//擦除缓冲区
       //for(i=0;i<120;i++)uart0_rec.rx0buf[0]=0;//----
                        }                 
                    }else{//没有数据返回
                        step = 1;
                        temp1 = 20;
      //clear_screen(); //----------------------------------------
                       // display_string_8x16("creg go to step 1\r\n");//----------------
                        uart0_rec.rx0buf_cnt = 0;
                        memset((void *)uart0_rec.rx0buf, 0x0, sizeof(uart0_rec.rx0buf));//擦除缓冲区
      //for(i=0;i<120;i++)uart0_rec.rx0buf[0]=0;//---------
                    }               
                }
                //flag ++;
            break;
            case 5://AT+CGDCONT=1,"IP","CMNET"   
                //uart0_send("AT^SISC=0\r");
                delay_ms(1000);
                uart0_send("AT+CGACT=1,1\r");
                delay_ms(1000);
                temp = 0;
                while(1){
                    if(strstr(uart0_rec.rx0buf, "OK")){
                        break;
                    }
                    temp ++;
                    if(temp > 25){
                        break;
                    }
                   memset((void *)buf, 0x0, sizeof(buf));//--------
     //for(i=0;i<120;i++)buf[i]=0;//-------------
                    sprintf(buf, "AT CGACT try times %d\r\n", temp);
                    
                    delay_ms(1000);
                }
                uart0_send("AT^SICS=0,conType,GPRS0\r");
                delay_ms(1500);
                uart0_send("AT^SISS=0,srvType,Socket\r");
                delay_ms(1500);
                uart0_send("AT^SISS=0,conid,0\r");
                delay_ms(1500);
                //uart0_send("AT^SISS=0,address,\"socktcp://111.017.191.202:09098\"\r");
                //uart0_send("AT^SISS=0,address,\"socktcp://218.201.102.222:08081\"\r");
                uart0_send("AT^SISS=0,address,\"socktcp://111.017.191.202:08081\"\r");
                delay_ms(1500);
                //clear_rx0buf();
                uart0_send("AT^SISO=0\r");
                delay_ms(1000);
    //clear_screen(); //---------------------------
                //display_string_8x16("uart0_rec.rx0buf");//----------------------
    delay_ms(1000);
    //clear_screen(); //--------------------
               // display_string_8x16("ldldldl\r\n");//-------------------
                temp = 0;
                while(1){
                    if(strstr(uart0_rec.rx0buf, "OK")){
                        break;
                    }
                    if(strstr(uart0_rec.rx0buf, "ERROR")){ //如果错误则退出
                        step = 5;
                        step_cnt ++; // 总的循环计数增加
                        break;
                    }
                    
                    temp ++;
                    if(temp > 10){
                        step_cnt ++;
                        break;
                    }
                    delay_ms(1000);
                    memset((void *)buf, 0x0, sizeof(buf));//--------------
     //for(i=0;i<120;i++)buf[i]=0;//-----------
                    sprintf(buf, "AT SISO try times %d\r\n", temp); //相当于拨号登录
                    // 有可能会出现暂时登陆不上所以要多尝试几次
                    //uart0_send("AT^SISO=0\r");
          //clear_screen();//------------------------
                   // display_string_8x16("buf");//----------------
                }
                //delay_ms(15000);
                if(strstr(uart0_rec.rx0buf, "OK")){
     //clear_screen(); //--------------------------
                    //display_string_8x16("tcp connect ok\r\n");//----------------
                    step = 6;
                }
                if(step_cnt > 3){
                    step = 1;
                }
                delay_ms(2000);
            break;
            case 6: //AT%ETCPIP
                buf_init();
                clear_rx0buf();
                uart0_send("AT^SISW=0,");
                memset((void *)buf, 0x0, sizeof(buf));//-----------------
    //for(i=0;i<120;i++)buf[i]=0;//-----------------
                sprintf((char *)buf, "%d\r",  15);
                uart0_send((char *)buf);
                delay_ms(2000);
                if(strstr(uart0_rec.rx0buf, "\r\n")){
     //clear_screen(); //-----------------------
                    //display_string_8x16("rx sisw's back\r\n");//---------------
                }else{
                    step = 1;
                }
                step = 7;
            break;
            case 7:
                delay_ms(2000);
    //clear_screen(); //--------------------------
                //display_string_8x16("uart0_rec.rx0buf"); //--------------------
                clear_rx0buf();
                for(temp = 0; temp < 15; temp ++){
                    temp1 = buf_login[temp];
                    uart0_send_char(temp1);
                }
                delay_ms(2000);
    //clear_screen(); //-------------------------
                //display_string_8x16("uart0_rec.rx0buf");//----------------------   
                if(strstr(uart0_rec.rx0buf, "OK")){
     //clear_screen(); //----------------------
                    //display_string_8x16("tcp connect ok\r\n");//--------------
                    
                    step = 8;
                }else{
     //clear_screen(); //-------------------------------
                    //display_string_8x16("tcp connect ERROR\r\n");//---------------
                    step = 1;
                }
                clear_rx0buf();
                delay_ms(2000);
                //uart0_send("AT^SISC=0\r");
                delay_ms(5000);
               
            break;
            case 8:
                clear_rx0buf();
                uart0_send("AT^SISO?\r\n");
                delay_ms(1000);
    //clear_screen(); //------------------
                //display_string_8x16("uart0_rec.rx0buf"); //-----------
                clear_rx0buf();
            
                clear_rx0buf();
                uart0_send("AT^SISR=0,64\r\n");
                memset((void *)cmp, 0x0, sizeof(cmp));//---------------
    //for(i=0;i<120;i++)cmp[i]=0; //--------------------   
                cmp[0] = 0x0d;
                cmp[1] = 0x0a;
                cmp[2] = 0xaa;
                cmp[3] = 0x10;
                delay_ms(2000);
  if (strstr(uart0_rec.rx0buf, "^SISR:") && strstr(uart0_rec.rx0buf, cmp)){
//  if (strstr(uart0_rec.rx0buf, "^SISR:") && strstr(uart0_rec.rx0buf, "OK\r\n")){
          for(tmp = 0; tmp < uart0_rec.rx0buf_cnt; tmp ++){
                            memset((void *)buf, 0x0, sizeof(buf));//-------------
       //for(i=0;i<120;i++)buf[i]=0;//----------
                            sprintf((char *)buf, "%02x ",  uart0_rec.rx0buf[tmp]);
       //clear_screen(); //-----------
                            //display_string_8x16("(char *)buf"); //---------
          }
    //clear_screen(); //-----------------
   //display_string_8x16("login ok\r\n");//---------------
   return 1;
  }else if(strstr(uart0_rec.rx0buf, "ERROR: 18")){
   delay_ms(2000);
   step = 9;
  }else{//乱码
   //clear_screen(); //---------------
   //display_string_8x16("login get error\r\n");//--------------
   ///display_string_8x16(uart0_rec.rx0buf);
   step = 1;
  }
  clear_screen();//--------------
  display_string_8x16("uart0_rec.rx0buf"); //-----------
  break;
  return 0;
   
           return 0;
    //clear_screen(); //---------------
    //display_string_8x16("step 8\r\n");//---------------
    uart0_rec.rx0buf_cnt = 0;
    memset((void *)uart0_rec.rx0buf, 0x0, sizeof(uart0_rec.rx0buf));//擦除缓冲区
    //for(i=0;i<120;i++)uart0_rec.rx0buf[0]=0;//------
    uart0_send("AT%IOMODE=1,1,1\r\n");
    temp = 100;
    while((temp !=0) && (uart0_rec.rx0buf_cnt == 0)){  
     delay_ms(100);
     temp --;
    }
    if(uart0_rec.rx0buf_cnt != 0){//有收到数据
     delay_ms(100);
     if(strstr(uart0_rec.rx0buf, "OK")){
      uart0_rec.rx0buf_cnt = 0;
      memset((void *)uart0_rec.rx0buf, 0x0, sizeof(uart0_rec.rx0buf));//擦除缓冲区
      //for(i=0;i<120;i++)uart0_rec.rx0buf[0]=0;//----------
      step = 9;     
     }else{
      step = 4;
     }
         
    }else{
     step = 4;
    }
    break;
   case 9://AT%IPSEND    buf_login
    //clear_screen(); //--------------
    //display_string_8x16("step 9\r\n");//-----------   
    uart0_send("AT%IPDR\r\n");
    delay_ms(100);
    uart0_send("AT%IPDR\r\n");
    delay_ms(100);
    uart0_send("AT%IPDR\r\n");
    delay_ms(100);
    uart0_send("AT%IPDR\r\n");
    delay_ms(100);
     uart0_rec.rx0buf_cnt = 0;
    memset((void *)uart0_rec.rx0buf, 0x0, sizeof(uart0_rec.rx0buf));//擦除缓冲区
    //for(i=0;i<120;i++)uart0_rec.rx0buf[0]=0;//---------
    ////////////////////////////////////////////
    ////////////////////////////////////////////
    break;
   case 10:
    break;
   case 11:
     clear_screen(); //---------------
    display_string_8x16("step 11\r\n"); //---------------
    delay_ms(3000);
    uart0_send("AT%IPDR\r\n");
    delay_ms(100);
    uart0_send("AT%IPDR\r\n");
    delay_ms(100);
    uart0_send("AT%IPDR\r\n");
    delay_ms(100);
    uart0_send("AT%IPDR\r\n");
    delay_ms(100);
    clear_rx0buf();
    memset((void *)buf, 0x0, sizeof(buf));//---------
    //for(i=0;i<120;i++)buf[i]=0;//------------
    break;   
   case 12:
    break;   
   default :
    //flag ++;
    break;
  }

}
//if(flag >= 30){
  return 0;
//}
}

编译时出现
D:\keil2\ARM\RV31\Inc\wchar.h(228): error:  #20: identifier "size_t" is undefined
D:\keil2\ARM\RV31\Inc\wchar.h(230): error:  #20: identifier "size_t" is undefined
D:\keil2\ARM\RV31\Inc\wchar.h(232): error:  #20: identifier "size_t" is undefined
D:\keil2\ARM\RV31\Inc\wchar.h(236): error:  #20: identifier "size_t" is undefined
D:\keil2\ARM\RV31\Inc\wchar.h(240): error:  #20: identifier "size_t" is undefined
D:\keil2\ARM\RV31\Inc\wchar.h(244): error:  #20: identifier "size_t" is undefined
D:\keil2\ARM\RV31\Inc\wchar.h(247): error:  #20: identifier "size_t" is undefined
D:\keil2\ARM\RV31\Inc\wchar.h(248): error:  #20: identifier "size_t" is undefined
Target not created
请问怎回事,本人编译器是最高版本的,并且用stm3.0,都出现这个错误,:

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top