OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7875|回复: 1

关于C语言移植产生的一些问题

[复制链接]

9

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2012-7-13
在线时间
0 小时
发表于 2012-9-7 09:42:24 | 显示全部楼层 |阅读模式

近期通过C++编译器写了一个程序,然后想把程序移植到keil里面再烧到STM32f103C8开发板里面,正确烧录完成后问题产生了,在串口调试助手中无法输入命令发送出去,请问这是什么问题,需要如何修改,求教各位!(下面给出工程的主程序)
#include"string.h"
#include"stdlib.h"
#include "stm32f10x.h"
#include "stdio.h"
//#define I2C_PageSize 8;
//u16 EEPROM_ADDRESS;
void RCC_Configuration(void);
void GPIO_Configuration(void);
void USART_Configuration(void);

int C10=0,C20=0,O20=0,H40=0, C11=0,C21=0,O21=0,H41=0,C12=0,C22=0,O22=0,
  H42=0,C13=0,C23=0,O23=0,H43=0,CY=0,YC=0,CB=0,YB=0,CL0=0,CL1=0,CL2=0,CL3=0,CP0=0,CP1=0,CP2=0,CP3=0,
  TM=0,SJ=0,NY=0,RS=0,FM=0;  
 int a,m;
 int k=0;
 int i,j=0,d1,d2,d3,d4,d5,d6,d7,d8;
 int c1,c2,o2,h4,cl,yl,cp,yp,cy,tm,sj,ny,rs,fm,yb,cb,yc;

 char str[256];
 char *p, tmp[10]={0},data[10][10]={0};
 char str1[40],str2[40],str3[40];
int main(void)
{
     
    /* 设置系统时钟 */
    RCC_Configuration();
    /* 设置GPIO端口 */
    GPIO_Configuration();
 /* 设置I2C*/

    /* 设置USART */
    USART_Configuration();
   
    while(1)
    {
    //int C10=0,C20=0,O20=0,H40=0, C11=0,C21=0,O21=0,H41=0,C12=0,C22=0,O22=0,
 // H42=0,C13=0,C23=0,O23=0,H43=0,CY=0,YC=0,CB=0,YB=0,CL0=0,CL1=0,CL2=0,CL3=0,CP0=0,CP1=0,CP2=0,CP3=0,
 // TM=0,SJ=0,NY=0,RS=0,FM=0;

 


 gets(str);   /*获取数据*/
 a=strlen(str);/*计算数据长度*/
 //C10=cy();

 
 /*读状态,返回命令*/
 if (a==4)
 {
   //extern int C10,C20,O20,H40;
   //int C11,C21,O21,H41,C12,C22,O22,
 // H42,C13,C23,O23,H43,CY,YC,CB,YB,TM,CL1,CL2,CL3,CP0,CP1,CP2,CP3,
 // SJ,NY,RS,FM;
 char a1[6],a2[6],a3[6],a4[6];/*定义临时数组*/
    char b1[3],b2[3],b3[3],b4[3];/*定义临时数组*/
 
 
 /*空气浓度*/
 if( !strcmp( str,"RSB0"))/*输入str的内容和‘RSB0'进行比较*/
 {
  sprintf(a1, "%04d", C10);/*将数据转换为固定的四位NNNN格式*/
  sprintf(a2, "%04d", C20);
  sprintf(a3, "%04d", O20);
  sprintf(a4, "%04d", H40);

  strcpy(b1,"C1");/*把字符串'C1'复制给变量b1*/ 
  strcpy(b2,"C2");
     strcpy(b3,"O2");
  strcpy(b4,"H4");
  strcpy(str,"RSB0");
  strcat(str,b1);/*把b1内容接到str内容后面*/
  strcat(str,a1);
  strcat(str,b2);
  strcat(str,a2);
  strcat(str,b3);
  strcat(str,a3);
  strcat(str,b4);
  strcat(str,a4);

  strcpy(str1,str);
 }

  /*标气2#浓度*/
 else if(!strcmp(str,"RSB1"))/*输入str中的内容和'RSB1'进行比较*/
 {
  sprintf(a1, "%04d", C11);
  sprintf(a2, "%04d", C21);
  sprintf(a3, "%04d", O21);
  sprintf(a4, "%04d", H41);
  strcpy(b1,"C1"); 
  strcpy(b2,"C2");
     strcpy(b3,"O2");
  strcpy(b4,"H4");
  strcpy(str,"RSB1");
  strcat(str,b1);
  strcat(str,a1);
  strcat(str,b2);
  strcat(str,a2);
  strcat(str,b3);
  strcat(str,a3);
  strcat(str,b4);
  strcat(str,a4);
 
  strcpy(str1,str);
 
 }

  /*标气3#浓度*/
 else if(!strcmp(str,"RSB2"))
 {
  sprintf(a1, "%04d", C12);
  sprintf(a2, "%04d", C22);
  sprintf(a3, "%04d", O22);
  sprintf(a4, "%04d", H42);
  strcpy(b1,"C1"); 
  strcpy(b2,"C2");
     strcpy(b3,"O2");
  strcpy(b4,"H4");
  strcpy(str,"RSB2");
  strcat(str,b1);
  strcat(str,a1);
  strcat(str,b2);
  strcat(str,a2);
  strcat(str,b3);
  strcat(str,a3);
  strcat(str,b4);
  strcat(str,a4);

  strcpy(str1,str);
 
 }

  /*当前校准的气体浓度*/
 else if(!strcmp(str,"RSJZ"))
 {
  sprintf(a1, "%04d", C13);
  sprintf(a2, "%04d", C23);
  sprintf(a3, "%04d", O23);
  sprintf(a4, "%04d", H43);

  strcpy(b1,"C1"); 
  strcpy(b2,"C2");
     strcpy(b3,"O2");
  strcpy(b4,"H4");
  strcpy(str,"RSJZ");

  strcat(str,b1);
  strcat(str,a1);
  strcat(str,b2);
  strcat(str,a2);
  strcat(str,b3);
  strcat(str,a3);
  strcat(str,b4);
  strcat(str,a4);

  strcpy(str1,str);
 
 }


  /*各个管路的采样时间*/
 else if(!strcmp(str,"RSGS"))
 {
  sprintf(a1, "%04d", CY);
  sprintf(a2, "%04d", SJ);
 
  strcpy(b1,"CY"); 
  strcpy(b2,"SJ");

  strcpy(str,"RSGS");
 
  strcat(str,b1);
  strcat(str,a1);
  strcat(str,b2);
  strcat(str,a2);
 
  strcpy(str1,str);
 
 }


  /*空气自动校准设置周期*/
 else if(!strcmp(str,"RSAS"))
 {
  sprintf(a1, "%04d", SJ);
  
  strcpy(b1,"SJ"); 
  strcpy(str,"RSAS");

  strcat(str,b1);
  strcat(str,a1);

  strcpy(str1,str);
 }


  /*查询仪器内部时间年月日时分秒*/
 else if(!strcmp(str,"RSSJ"))
 {
  sprintf(a1, "%04d",NY);
  sprintf(a2, "%04d",RS);
  sprintf(a3, "%04d",FM);
 
  strcpy(b1,"NY"); 
     strcpy(b2,"RS"); 
  strcpy(b3,"FM");
  strcpy(str,"RSSJ");

  strcat(str,b1);
  strcat(str,a1);
  strcat(str,b2);
  strcat(str,a2);
  strcat(str,b3);
  strcat(str,a3);

  strcpy(str1,str);
 }

  /*查询当前采样的管路预抽管路气泵状态*/
 else if(!strcmp(str,"RSZT"))
 {
  sprintf(a1, "%04d", CY);
  sprintf(a2, "%04d", YC);
  sprintf(a3, "%04d", CB);
  sprintf(a4, "%04d", YB);

  strcpy(b1,"CY"); 
  strcpy(b2,"YC");
     strcpy(b3,"CB");
  strcpy(b4,"YB");
  strcpy(str,"RSZT");

  strcat(str,b1);
  strcat(str,a1);
  strcat(str,b2);
  strcat(str,a2);
  strcat(str,b3);
  strcat(str,a3);
  strcat(str,b4);
  strcat(str,a4);
 
  strcpy(str1,str);
 }printf(str1); 
 
}

 

 /*读数据,查询相应管路的数据*/
 else if(a==6)
 {
  //int C10=1,C20=1,O20=1,H40=1,C11=2,C21=2,O21=2,H41=2,C12,C22,O22,H42,C13;
  //int C23,O23,H43,CY=0,YC,CB,YB,TM,CL0=1,CL1,CL2,CL3,CP0=1,CP1,CP2,CP3;
        //int SJ,NY,RS,FM;
  char a1[6],a2[6],a3[6],a4[6],a5[6],a6[6],a7[6];
  char b1[3],b2[3],b3[3],b4[3],b5[3],b6[3],b7[3];
 
  p= &str[2];
  tmp[0]= *p; /*读取命令中的参数并把数据储存在数组tmp中*/
  tmp[1]= *(p+1);
  tmp[2]= *(p+2);
  tmp[3]= *(p+3);
  m=atoi(tmp); /*将数组tmp内容转换为整型*/


 if( !strcmp( str,"CY0000"))
 {
  if(CY==m)
  {
   sprintf(a1, "%04d", CY);
   sprintf(a2, "%04d", C10);
   sprintf(a3, "%04d", C20);
   sprintf(a4, "%04d", O20);
   sprintf(a5, "%04d", H40);
   sprintf(a6, "%04d", CL0);
   sprintf(a7, "%04d", CP0);
   strcpy(b1,"CY"); 
   strcpy(b2,"C1");
   strcpy(b3,"C2");
   strcpy(b4,"O2");
   strcpy(b5,"H4");
   strcpy(b6,"CL");
   strcpy(b7,"CP");
  
   strcpy(str,b1);
   strcat(str,a1);
   strcat(str,b2);
   strcat(str,a2);
   strcat(str,b3);
   strcat(str,a3);
   strcat(str,b4);
   strcat(str,a4);
   strcat(str,b5);
   strcat(str,a5);
   strcat(str,b6);
   strcat(str,a6);
   strcat(str,b7);
   strcat(str,a7);

   strcpy(str3,str);
  }

  else
  { sprintf(a1, "%04d", CY);
         strcpy(b1,"RG");
   strcat(str,b1);
   strcat(str,a1);
      strcpy(str3,str);
  }
}


 if( !strcmp( str,"CY0001"))
 {
  if(CY==m)
  {
   sprintf(a1, "%04d", CY);
   sprintf(a2, "%04d", C11);
   sprintf(a3, "%04d", C21);
   sprintf(a4, "%04d", O21);
   sprintf(a5, "%04d", H41);
   sprintf(a6, "%04d", CL1);
   sprintf(a7, "%04d", CP1);

   strcpy(b1,"CY"); 
   strcpy(b2,"C1");
   strcpy(b3,"C2");
   strcpy(b4,"O2");
   strcpy(b5,"H4");
   strcpy(b6,"CL");
   strcpy(b7,"CP");

   strcpy(str,b1);
   strcat(str,a1);
   strcat(str,b2);
   strcat(str,a2);
   strcat(str,b3);
   strcat(str,a3);
   strcat(str,b4);
   strcat(str,a4);
   strcat(str,b5);
   strcat(str,a5);
   strcat(str,b6);
   strcat(str,a6);
   strcat(str,b7);
   strcat(str,a7);
   strcpy(str3,str);
  }

   /*错误时返回错误管路号*/
  else
  { 
   sprintf(a1, "%04d", CY);
         strcpy(b1,"RG");
   strcat(str,b1);
   strcat(str,a1);
      strcpy(str3,str);
  }
}


 if( !strcmp( str,"CY0002"))
 {
  if(CY==m)
  {
   sprintf(a1, "%04d", CY);
   sprintf(a2, "%04d", C12);
   sprintf(a3, "%04d", C22);
   sprintf(a4, "%04d", O22);
   sprintf(a5, "%04d", H42);
   sprintf(a6, "%04d", CL2);
   sprintf(a7, "%04d", CP2);
   strcpy(b1,"CY"); 
   strcpy(b2,"C1");
   strcpy(b3,"C2");
   strcpy(b4,"O2");
   strcpy(b5,"H4");
   strcpy(b6,"CL");
   strcpy(b7,"CP");
  
   strcpy(str,b1);
   strcat(str,a1);
   strcat(str,b2);
   strcat(str,a2);
   strcat(str,b3);
   strcat(str,a3);
   strcat(str,b4);
   strcat(str,a4);
   strcat(str,b5);
   strcat(str,a5);
   strcat(str,b6);
   strcat(str,a6);
   strcat(str,b7);
   strcat(str,a7);

   strcpy(str3,str);
  }

  else
  {
   sprintf(a1, "%04d", CY);
         strcpy(b1,"RG");
   strcat(str,b1);
   strcat(str,a1);
      strcpy(str3,str);
  }
}


  if( !strcmp( str,"CY0003"))
 {
   if(CY==m)
  {
   sprintf(a1, "%04d", CY);
   sprintf(a2, "%04d", C13);
   sprintf(a3, "%04d", C23);
   sprintf(a4, "%04d", O23);
   sprintf(a5, "%04d", H43);
   sprintf(a6, "%04d", CL3);
   sprintf(a7, "%04d", CP3);
   strcpy(b1,"CY"); 
   strcpy(b2,"C1");
   strcpy(b3,"C2");
   strcpy(b4,"O2");
   strcpy(b5,"H4");
   strcpy(b6,"CL");
   strcpy(b7,"CP");
  
   strcpy(str,b1);
   strcat(str,a1);
   strcat(str,b2);
   strcat(str,a2);
   strcat(str,b3);
   strcat(str,a3);
   strcat(str,b4);
   strcat(str,a4);
   strcat(str,b5);
   strcat(str,a5);
   strcat(str,b6);
   strcat(str,a6);
   strcat(str,b7);
   strcat(str,a7);

   strcpy(str3,str);
   }

  else
  {
   sprintf(a1, "%04d", CY);
         strcpy(b1,"RG");
   strcat(str,b1);
   strcat(str,a1);
      strcpy(str3,str);
  }
  
 }
 printf(str3);
}

 
 
 
 
 /*写数据,下传参数*/ 
 else if(a>=8)
 {
  for(k=0;k<4;k++)
  {
   str2[k]=str[k];
  }
  str2[k]='\0'; 
 
  p= &str[4];
  while( *p !='\0')
  {
   tmp[0]= *p;
   tmp[1]= *(p+1);
   i=2;
   p +=2;
   while(1)
   {
    if( *p>='0' && *p<='9')
    {
     tmp[i++]= *p++;
    }
    else
    {
     strcpy(data[j++],tmp);
     break;
    }
   }
  }


  d1=atoi(data[0]+2);
  d2=atoi(data[1]+2);
  d3=atoi(data[2]+2);
  d4=atoi(data[3]+2);
  d5=atoi(data[4]+2);
  d6=atoi(data[5]+2);
  d7=atoi(data[6]+2);
  d8=atoi(data[7]+2);


 if(!strcmp(str2,"GY01"))
 {
  cy=d1;
 }
 else if(!strcmp(str2,"YC01"))
 {
  yc=d1;
 }
 else if(!strcmp(str2,"PP01"))
 {
  cb=d1;yb=d2;
 }
 else if(!strcmp(str2,"JZB0"))
 {
  c1=d1;c2=d2;o2=d3;h4=d4;
 }
 else if(!strcmp(str2,"JZB1"))
 {
  c1=d1;c2=d2;o2=d3;h4=d4;
 }
 else if(!strcmp(str2,"JZB2"))
 {
  c1=d1;c2=d2;o2=d3;h4=d4;
 }
 else if(!strcmp(str2,"JZC1"))
 {
  c1=d1;
 }
 else if(!strcmp(str2,"JZC2"))
 {
  c2=d1;
 }
 else if(!strcmp(str2,"JZO2"))
 {
  o2=d1;
 }
 else if(!strcmp(str2,"JZH4"))
 {
  h4=d1;
 }
 else if(!strcmp(str2,"JZCL"))
 {cl=d1;
 }
 else if(!strcmp(str2,"JZYL"))
 {
  yl=d1;
 }
 else if(!strcmp(str2,"JZCP"))
 {
  cp=d1;
 }
 else if(!strcmp(str2,"JZYP"))
 {
  yp=d1;
 }
 else if(!strcmp(str2,"JZRD"))
 {
  c1=d1;
  c2=d2;
  o2=d3;
  h4=d4;
  cl=d5;
  yl=d6;
  cp=d7;
  yp=d8;
 }
 else if(!strcmp(str2,"CSB0"))
 {
  c1=d1;
  c2=d2;
  o2=d3;
  h4=d4;
 }
 else if(!strcmp(str2,"CSB1"))
 {
  c1=d1;
  c2=d2;
  o2=d3;
  h4=d4;
 }
 else if(!strcmp(str2,"CSB2"))
 {
  c1=d1;
  c2=d2;
  o2=d3;
  h4=d4;
 }
 else if(!strcmp(str2,"CSGS"))
 {
  cy=d1;
  tm=d2;
 }
 else if(!strcmp(str2,"CSAS"))
 {
  sj=d1;
 }
 else if(!strcmp(str2,"CSSJ"))
 {
  ny=d1;
  rs=d2;
  fm=d3;
 }
 printf("%d,%d,%d,%d",c1,c2,o2,h4);
  }
 

 
 
//  printf("\r\n The I2C has send data: 0x0%x\r\n",Buffer);
  
      
    }
}
/*******************************************************************************
* 函数名 : RCC_Configuration
* 函数描述  : 设置系统各部分时钟
* 输入参数  : 无
* 输出结果  : 无
* 返回值    : 无
*******************************************************************************/
void RCC_Configuration(void)
{
/* 定义枚举类型变量 HSEStartUpStatus */
 ErrorStatus HSEStartUpStatus;

   /* 复位系统时钟设置*/
   RCC_DeInit();
   /* 开启HSE*/
   RCC_HSEConfig(RCC_HSE_ON);
   /* 等待HSE起振并稳定*/
   HSEStartUpStatus = RCC_WaitForHSEStartUp();
 /* 判断HSE起是否振成功,是则进入if()内部 */
   if(HSEStartUpStatus == SUCCESS)
   {
     /* 选择HCLK(AHB)时钟源为SYSCLK 1分频 */
     RCC_HCLKConfig(RCC_SYSCLK_Div1);
     /* 选择PCLK2时钟源为 HCLK(AHB) 1分频 */
     RCC_PCLK2Config(RCC_HCLK_Div1);
     /* 选择PCLK1时钟源为 HCLK(AHB) 2分频 */
     RCC_PCLK1Config(RCC_HCLK_Div2);
     /* 设置FLASH延时周期数为2 */
     FLASH_SetLatency(FLASH_Latency_2);
     /* 使能FLASH预取缓存 */
     FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
     /* 选择锁相环(PLL)时钟源为HSE 1分频,倍频数为9,则PLL输出频率为 8MHz * 9 = 72MHz */
     RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
     /* 使能PLL */
     RCC_PLLCmd(ENABLE);
     /* 等待PLL输出稳定 */
     while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
     /* 选择SYSCLK时钟源为PLL */
     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
     /* 等待PLL成为SYSCLK时钟源 */
     while(RCC_GetSYSCLKSource() != 0x08);
   } 
   /* 打开APB2总线上的GPIOA时钟*/
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA , ENABLE);
}
void GPIO_Configuration(void)
{
    /* 定义 GPIO 初始化结构体 GPIO_InitStructure */

 GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA , &GPIO_InitStructure);
   
    /* 设置USART1的Rx脚(PA.10)为浮空输入脚 */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA , &GPIO_InitStructure);
}

/*******************************************************************************
* 函数名  : USART_Configuration
* 函数描述    : 设置USART1
* 输入参数      : None
* 输出结果      : None
* 返回值        : None
*******************************************************************************/
void USART_Configuration(void)
{
    /* 定义USART初始化结构体 USART_InitStructure */
    USART_InitTypeDef USART_InitStructure;
   
    /* 
    * 波特率为9600bps
    * 8位数据长度
    * 1个停止位,无校验
    * 禁用硬件流控制
    * 禁止USART时钟
    * 时钟极性低
    * 在第2个边沿捕获数据
    * 最后一位数据的时钟脉冲不从 SCLK 输出
    */
    USART_InitStructure.USART_BaudRate = 9600;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    USART_InitStructure.USART_Parity = USART_Parity_No ;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
    USART_Init(USART1 , &USART_InitStructure);
   
    /* 使能USART1 */
    USART_Cmd(USART1 , ENABLE);
}

int fputc(int ch, FILE *f)
{
    USART_SendData(USART1, (u8) ch);
    while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
    return ch;
}

 


 

努力学习
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2012-7-13
在线时间
0 小时
 楼主| 发表于 2012-9-7 10:08:39 | 显示全部楼层
gets(str)是不是得换成其他语句?
努力学习
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 16:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表