stm32f4串口只能接受一次。

2019-07-20 06:03发布

[mw_shl_code=applescript,true]u8 t;
        u8 data[5];
        u8 len;       
        u16 times=0;
        unsigned int time=0;
        void Cargo_RUN(void);
        void Cargo_two_RUN(void);
       
int main(void)
{

          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éèÖÃÏμí3ÖD¶ÏóÅÏ輶·Ö×é2
        delay_init(168);                //Ñóê±3õê¼»ˉ
        uart_init(115200);        //′®¿ú3õê¼»ˉ2¨ìØÂêÎa115200
        LED_Init();                                  //3õê¼»ˉóëLEDᬽóμÄó2¼t½ó¿ú  
  delay_ms(10);   
        while(1)
        {
        //        usat_init();
                if(USART_RX_STA&0x4000)
                {                                          
                        //len=USART_RX_STA&0x3fff;//μÃμ½′Ë′νóêÕμ½μÄêy¾Y3¤¶è
                        if(USART_RX_BUF[0]==0x01)
                        {
                                if(USART_RX_BUF[1]==0x05)
                                {       
                                  if(USART_RX_BUF[2]==0x05)
                                        {       
                                                   USART_RX_STA=0;
                                                   Cargo_RUN();
//                                                            data[0]=0x08;
//                                                                                                data[1]=0x05;
//                                                                                                data[2]=0x01;
//                                                                                                data[3]=0x09;
//                                                      len=4;
                                        }
                                }
                        }
                       
                        for(t=0;t<len;t++)
                        {
                                USART_SendData(USART1, data[t]);         //&#207;ò′&#174;&#191;ú1·¢&#203;íêy&#190;Y               
        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//μè′y·¢&#203;í&#189;áê&#248;
                        }
                       
                        //printf(" ");//2&#229;è&#235;&#187;&#187;DD
                        memset(data,0,20*sizeof(char));
                        USART_RX_STA=0;
                }
                else
                {
                        times++;
//                        if(times%5000==0)
//                        {
//                                printf("AT+CIPSTART="TCP","192.168.1.10",8080 ");
//                                printf("&#213;yμ&#227;&#212;-×ó@ALIENTEK ");
//                        }
                        data[0]=0x08;
                                                                                                data[1]=0x02;
                                                                                                data[2]=0x09;
                                                                                                data[3]=0x07;
                        if(times%200==0)printf("%02X%02X%02X%02X",data[0],data[1],data[2],data[3]);  
                        if(times%30==0)LED0=!LED0;//éá&#203;&#184;LED,ìáê&#190;&#207;μí3&#213;y&#212;ú&#212;&#203;DD.
                        delay_ms(10);   
                }
               
                  
       
}
}

void Cargo_RUN(void)
{
//        if (USART_RX_BUF[3]<=0x3C)//μ±μú4&#184;&#246;×&#214;&#189;úD&#161;óú60&#184;&#246;&#187;&#245;μàê±£&#172;&#188;ìD&#248;&#207;&#194;ò&#187;2&#189;
//                                                        {
                                                               
                                                                switch (USART_RX_BUF[3])
                                                                {
                                                                        case 0x01://′ò&#191;a1o&#197;&#187;&#245;μà
                                                                                                                Cargo_1_RUN();
                                                                                                                delay_ms(time);       
                                                                                  Cargo_1_STOP();
                                                                       
                                                                                                                data[0]=0x00;
                                                                                                                data[1]=0x05;
                                                                                                                data[2]=0x00;
                                                                                                                len=3;
                                                                                                                break;
                                                                        case 0x02://′ò&#191;a2o&#197;&#187;&#245;μà
                                                                                                                Cargo_2_RUN();
                                                                                                                delay_ms(time);       
                                                                                  Cargo_2_STOP();
                                                                       
                                                                                                                data[0]=0x00;
                                                                                                                data[1]=0x05;
                                                                                                                data[2]=0x00;
                                                                                                                len=3;
                                                                                                                break;
default:
                                                                                                                data[0] = 0x00;//&#198;&#228;&#203;ü2&#187;&#214;§3&#214;μ&#196;1|&#196;ü£&#172;1|&#196;ü&#206;&#187;&#214;±1£&#172;
                                                                                                                data[1] = 0x04;
                                                                                                                data[2] = 0x01;//éè&#214;&#195;òì3£&#194;e&#206;a1
                                                                                                                len = 3;
                                                                                                                break;
                                                        }[/mw_shl_code]


在原子哥的串口实验里面我尝试修改发送数据为数组,检测到上位机发送01050501-010502后发送08020907,结果开机接受数据正常,在检测到上位机有数据发送过来,数据正确时,会返回对应的数据,但是只有一次。然后就无反应了。但是我一旦去除else之后的空闲时间发送函数。就接受正常了。我把DATA的数组清空,USART_RX_STA也置零了,但是还是那样,一填加空闲发送,接受到数据并回复后就无反应了,不知道那里错了,请指教。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。