初级会员

- 积分
- 81
- 金钱
- 81
- 注册时间
- 2019-1-12
- 在线时间
- 34 小时
|
10金钱
本帖最后由 隋树 于 2019-8-14 21:02 编辑
麻烦帮看一下我下面的程序,调了一天,不清楚什么毛病。
串口接收是以0D0A结尾,接收到数据后,在主循环里判断 if(USART_RX_STA&0x8000),如果这个表达式是1,就把数据返回,可实际操作的时候,接几次才能发送一次。接收是没问题的,板子的继电器都动作了。
while(1)
{
filter();
ADC_Value[0]=ADC_Value[0]*1.05;
if(TIM_FLAGBIT) 500ms发一次,这段发送是没问题的
{
TTLDataSendBuff[0]=(u8)(ADC_Value[0]*10);
TTLDataSendBuff[1]=(u8)(ADC_Value[1]*10);
TTLDataSendBuff[2]=(u8)(ADC_Value[2]*10);
TTLDataSendBuff[3]=(u8)(ADC_Value[3]*10);
TTLDataSendBuff[4]=(u8)(ADC_Value[4]*10);
TTLDataSendBuff[5]=(u8)(ADC_Value[5]*10);
for(senddata=0;senddata<6;senddata++)
{
USART_SendData(USART2,TTLDataSendBuff[senddata]);
while((USART2->SR&0X40)==0);
}
TIM_FLAGBIT=0;
}
if(USART_RX_STA&0x8000)
{
u16 APILECURRENT_Buf, FREQUENCE_Buf;
u8 Duty_Buf,Time_Buf,S3RELAY_Buf,Add_Buf,relay01,relay02,relay03,relay04,relay05,relay06;
len=USART_RX_STA&0x3fff;
for(senddata=0;senddata<len;senddata++)出问题的在这里,经常进了这个循环但不发送数据。
{
USART_SendData(USART2,TTLDataRevBuff[senddata]);
while((USART2->SR&0X40)==0);
}
APILECURRENT_Buf=TTLDataRevBuff[0];
FREQUENCE_Buf=((u16)(TTLDataRevBuff[1])<<8)|TTLDataRevBuff[2];
Duty_Buf=TTLDataRevBuff[3];
Time_Buf=((u16)(TTLDataRevBuff[4])<<8)|TTLDataRevBuff[5];
S3RELAY_Buf=TTLDataRevBuff[6];
Add_Buf=TTLDataRevBuff[7];
relay01=TTLDataRevBuff[8];
relay02=TTLDataRevBuff[9];
relay03=TTLDataRevBuff[10];
relay04=TTLDataRevBuff[11];
relay05=TTLDataRevBuff[12];
relay06=TTLDataRevBuff[13];
if(relay01!=0)
GPIO_SetBits(GPIOB,GPIO_Pin_12);
else
GPIO_ResetBits(GPIOB,GPIO_Pin_12);
if(relay02!=0)
GPIO_SetBits(GPIOB,GPIO_Pin_13);
else
GPIO_ResetBits(GPIOB,GPIO_Pin_13);
if(relay03!=0)
GPIO_SetBits(GPIOB,GPIO_Pin_13);
else
GPIO_ResetBits(GPIOB,GPIO_Pin_13);
if(relay04!=0)
GPIO_SetBits(GPIOB,GPIO_Pin_14);
else
GPIO_ResetBits(GPIOB,GPIO_Pin_14);
if(relay05!=0)
GPIO_SetBits(GPIOA,GPIO_Pin_12);
else
GPIO_ResetBits(GPIOA,GPIO_Pin_12);
if(relay06!=0)
GPIO_SetBits(GPIOA,GPIO_Pin_11);
else
GPIO_ResetBits(GPIOA,GPIO_Pin_11);
if(APILECURRENT_Buf!=0)
{
APILECURRENT=APILECURRENT_Buf;
switch (APILECURRENT)
{
case 10:
GPIO_ResetBits(GPIOB,GPIO_Pin_3);
GPIO_SetBits(GPIOB,GPIO_Pin_7);
GPIO_ResetBits(GPIOB,GPIO_Pin_4);
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOB,GPIO_Pin_6);
GPIO_ResetBits(GPIOB,GPIO_Pin_8);
GPIO_ResetBits(GPIOB,GPIO_Pin_9);
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
GPIO_ResetBits(GPIOA,GPIO_Pin_9);
if(S3RELAY_Buf!=0)
GPIO_SetBits(GPIOB,GPIO_Pin_3);
break;
case 16:
GPIO_ResetBits(GPIOB,GPIO_Pin_3);
GPIO_ResetBits(GPIOB,GPIO_Pin_7);
GPIO_ResetBits(GPIOB,GPIO_Pin_4);
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOB,GPIO_Pin_6);
GPIO_SetBits(GPIOB,GPIO_Pin_8);
GPIO_ResetBits(GPIOB,GPIO_Pin_9);
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
GPIO_ResetBits(GPIOA,GPIO_Pin_9);
if(S3RELAY_Buf!=0)
GPIO_SetBits(GPIOB,GPIO_Pin_4);
break;
case 32:
GPIO_ResetBits(GPIOB,GPIO_Pin_3);
GPIO_ResetBits(GPIOB,GPIO_Pin_7);
GPIO_ResetBits(GPIOB,GPIO_Pin_4);
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOB,GPIO_Pin_6);
GPIO_ResetBits(GPIOB,GPIO_Pin_8);
GPIO_SetBits(GPIOB,GPIO_Pin_9);
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
GPIO_ResetBits(GPIOA,GPIO_Pin_9);
if(S3RELAY_Buf!=0)
GPIO_SetBits(GPIOB,GPIO_Pin_5);
break;
case 63:
GPIO_ResetBits(GPIOB,GPIO_Pin_3);
GPIO_ResetBits(GPIOB,GPIO_Pin_7);
GPIO_ResetBits(GPIOB,GPIO_Pin_4);
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOB,GPIO_Pin_6);
GPIO_ResetBits(GPIOB,GPIO_Pin_8);
GPIO_ResetBits(GPIOB,GPIO_Pin_9);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_ResetBits(GPIOA,GPIO_Pin_9);
if(S3RELAY_Buf!=0)
GPIO_SetBits(GPIOB,GPIO_Pin_6);
break;
case 100:
GPIO_ResetBits(GPIOB,GPIO_Pin_3);
GPIO_ResetBits(GPIOB,GPIO_Pin_7);
GPIO_ResetBits(GPIOB,GPIO_Pin_4);
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOB,GPIO_Pin_6);
GPIO_ResetBits(GPIOB,GPIO_Pin_8);
GPIO_ResetBits(GPIOB,GPIO_Pin_9);
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
GPIO_SetBits(GPIOA,GPIO_Pin_9);
break;
deflat:
break;
}
}
if(FREQUENCE_Buf!=0)
{
FREQUENCE=FREQUENCE_Buf;
arr=arr_cnt(FREQUENCE);
TIM_SetAutoreload(TIM3,arr);
}
if(Duty_Buf!=0)
{
Duty=Duty_Buf;
Compare2=campare_cnt(FREQUENCE,Duty);
TIM_SetCompare2(TIM3, Compare2);
}
if(Time_Buf!=0)
{
Time=Time_Buf;
TIMER_FLAG=0;
}
Add=Add_Buf;
USART_RX_STA=0;
}
if(Duty<=97&&Duty>=8&&ADC_Value[0]<=9&&ADC_Value[0]>=1)
{
if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_0)==0)
delay_ms(Time);
GPIO_SetBits(GPIOB,GPIO_Pin_0);
GPIO_SetBits(GPIOB,GPIO_Pin_1);
}
else
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
GPIO_ResetBits(GPIOB,GPIO_Pin_1);
}
}
|
|