近期通过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;
}
|