STM32F407以太网联网联网问题 Netif_Config(); 位置不同,联网的结果不同,放在程序前面能联网但收发不了数据,放在后面能收发数据但是联网很慢

下面是主函数,Netif_Config();中的位置能够快速联网,PC作为服务器,F407作为客户端,但是无法接收返回的数据,过一会后网络断开。如果把Netif_Config()放在主函数的最后一句,收发数据正常,但是联网过程很慢,需要较长时间。

int main(void)
{  
    HAL_Init();
    SystemClock_Config();                 //系统时钟初始化
    Netif_Config();
    MX_TIM3_Init();                       //产生1ms中断延时,为了定时,当作定时器使用
    HAL_TIM_Base_Start_IT(&htim3);        //以中断方式打开定时器3
    MX_GPIO_Init();       //用到的GPIO口的初始化,含红外开关传感器1-2,抱紧程度3-4
    KEY_GPIO_Init();                      //5个专门按键的初始化
//    MX_IWDG_Init(IWDG_PRESCALER_128,1250); //在4s钟内喂狗,不会复位。超过4秒钟没有喂狗,则复位。
//    __HAL_IWDG_START(&hiwdg);             //为了防止RF200的读卡器卡死,若卡死,则自动重启系统。
    
  //MX_TIM4_Init();                       //使用定时器4产生脉冲驱动转向电机2(左后),王兰对电机进行编号
  //MX_TIM6_Init();
  MX_TIM8_Init(); //2S57--4路转向。定时器8,是一个定时器产生4路脉冲,去控制4路步进电机。高级控制定时器初始化并配置PWM输出功能,转向电机的驱动器2S57定时器的初始化
  //MX_TIM10_Init();                     //使用定时器10产生脉冲驱动转向电机1(左前),王兰对电机进行编号
  //MX_TIM11_Init();                     //使用定时器11产生脉冲驱动转向电机3(右前),王兰对电机进行编号 
  //MX_TIM13_Init();                                        //使用定时器13产生脉冲驱动转向电机4(右后),王兰对电机进行编号
    
  MX_USART1_UART_Init();               //与轮毂电机进行UART或者485通信+printf打印输出    
//    MX_USART2_UART_Init();                //与RFID相连    
//    HAL_UART_Receive_IT(&huart2,&USART2_Rxtemp,1); //当接收到Size大小的字节后就产生一次中断进入中断处理    
    MX_USART6_UART_Init();               //采集陀螺仪数据。串口通信
    HAL_UART_Receive_IT(&huart6,&USART6_Rxtemp,1); //接收陀螺仪数据信息    
//    HAL_UART_Transmit(&huart2,MultiInventCMD,10,400);//发送命令控制RFID阅读器MultiInventCMD
    HAL_Delay(500);
    for(int k=0;k<2;k++)
    {
        printf("Send_15_dBm--%d\r\n",HAL_UART_Transmit(&huart2,Send_15_dBm,9,400));
        HAL_Delay(500);
    }    
  
  HAL_TIM_Base_Start(&htimx_STEPMOTOR);/* 确定定时器TIM8--4路2S57,转向电机*/  
    
  HAL_TIM_OC_Start_IT(&htimx_STEPMOTOR,STEPMOTOR_NO1_TIM_CHANNEL_x);/*使能中断。关闭比较输出*/
  HAL_TIM_OC_Start_IT(&htimx_STEPMOTOR,STEPMOTOR_NO2_TIM_CHANNEL_x);
    HAL_TIM_OC_Start_IT(&htimx_STEPMOTOR,STEPMOTOR_NO3_TIM_CHANNEL_x);   
  HAL_TIM_OC_Start_IT(&htimx_STEPMOTOR,STEPMOTOR_NO4_TIM_CHANNEL_x);
  
  TIM_CCxChannelCmd(STEPMOTOR_TIMx,STEPMOTOR_NO1_TIM_CHANNEL_x,TIM_CCx_DISABLE);
  TIM_CCxChannelCmd(STEPMOTOR_TIMx,STEPMOTOR_NO2_TIM_CHANNEL_x,TIM_CCx_DISABLE);
    TIM_CCxChannelCmd(STEPMOTOR_TIMx,STEPMOTOR_NO3_TIM_CHANNEL_x,TIM_CCx_DISABLE);
  TIM_CCxChannelCmd(STEPMOTOR_TIMx,STEPMOTOR_NO4_TIM_CHANNEL_x,TIM_CCx_DISABLE);
 

    
    RS485_USARTx_Init();//Modbus使用RS485初始化 USART3--9600,控制横抱+抬升电机

    MB_WriteHoldingReg_06H(0x02, 0x8000, 0x0A02);//提升电机为02号地址,停止。
    HAL_Delay(100);
    MB_WriteHoldingReg_06H(0x01, 0x8000, 0x0A02);//停止横抱电机
    HAL_Delay(100);    //02 06 80 02 17 01 CF C9
    
  find_zero(); //让机器人寻找原点,转向电机,将轮子方向统一一致,轮子一个一个调整转向
    MX_CAN1_Init();          //电路板上的CAN口,控制L2DB,从而控制轮毂电机,CAN通信方式
    can_filter_init();
    HAL_CAN_Start(&hcan1);   //开启CAN总开关
    HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING);//启动CAN接收中断
    
    HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOE, GPIO_PIN_6, GPIO_PIN_RESET);
    
#if PID_ASSISTANT_EN
  int Temp = pid.target_val;    // 上位机需要整数参数,转换一下
    set_computer_value(SEED_START_CMD, CURVES_CH1, NULL, 0);// 同步上位机的启动按钮状态
  set_computer_value(SEED_TARGET_CMD, CURVES_CH1, &Temp, 1);// 给通道 1 发送目标值
#endif

    MX_AD7190_SPI_Init();      //使用SPI总线接AD7190,连接超声传感器测距,2路测距
    if(AD7190_Init()==0)       //初始化AD7190检测通信状态
  {
    printf("获取不到 AD7190!\n");
    while(1)
    {
      HAL_Delay(1000);
      if(AD7190_Init())
            {
                printf("第2次获取到 AD7190!\n");
        break;
            }
    }
  }
    ad7190_unipolar_conf();      //AD7190四路单端采集配置,屏蔽掉后可以TCP连接,但是延时  

解决方法是:放在下面这个位置,就可以正常联网和收发数据,原因还没有查出来。

    MX_AD7190_SPI_Init();      //使用SPI总线接AD7190,连接超声传感器测距,2路测距

    //HAL_Delay(1000);HAL_Delay(1000);HAL_Delay(1000);HAL_Delay(1000);
    Netif_Config();
    if(AD7190_Init()==0)       //初始化AD7190检测通信状态
  {
    printf("获取不到 AD7190!\n");
    while(1)
    {
      HAL_Delay(1000);
      if(AD7190_Init())
            {
                printf("第2次获取到 AD7190!\n");
        break;
            }
    }
  }
    ad7190_unipolar_conf();      //AD7190四路单端采集配置,屏蔽掉后可以TCP连接,但是延时

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xuanshang_yutou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值