OpenEdv-开源电子网

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

stm32f4串口只能接受一次

[复制链接]

8

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2018-4-8
在线时间
26 小时
发表于 2018-9-19 15:07:57 | 显示全部楼层 |阅读模式
10金钱
[mw_shl_code=c,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("\r\n\r\n");//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\r\n");
//              printf("&#213;yμ&#227;&#212;-×ó@ALIENTEK\r\n\r\n\r\n");
//          }
                        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]

在原子哥的串口实验里面我尝试扩展串口实验。
我的结果应该是是开机后串号在没有接收到数据的情况下一直在向上发出08020907,在接收到数据后进行比对,数据相符向上传输数据000500.
然后我修改发送数据为数组,检测到上位机发送01050501-010502后发送08020907,结果开机接收数据正常,在检测到上位机有数据发送过来,数据正确时,会返回对应的数据,但是只有一次。然后就无反应了。但是我一旦去除else之后的空闲时间发送函数。就接受正常了。我把DATA的数组清空,USART_RX_STA也置零了,但是还是那样,一填加空闲发送,接受到数据并回复后就无反应了,不知道那里错了,请指教。

最佳答案

查看完整内容[请看2#楼]

问题已解决。变量定义的问题。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2018-4-8
在线时间
26 小时
 楼主| 发表于 2018-9-19 15:07:58 | 显示全部楼层
问题已解决。变量定义的问题。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-9-20 02:22:07 | 显示全部楼层
仿真找问题,好解决
回复

使用道具 举报

8

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2018-4-8
在线时间
26 小时
 楼主| 发表于 2018-9-20 09:54:11 | 显示全部楼层
正点原子 发表于 2018-9-20 02:22
仿真找问题,好解决

仿真过了,还是无法找到。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 03:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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