OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 3454|回复: 4

FREERTOS STM32Cube_FW_F4_V1.3.0使用DP83848做TCPIP,server,没接中断引脚,请问如何判断网络插拔(注意是带操作系统的)

[复制链接]

  离线 

1

主题

3

帖子

0

精华

新手上路

Rank: 1

积分
27
金钱
27
注册时间
2014-12-16
在线时间
0 小时
发表于 2014-12-16 19:25:17 | 显示全部楼层 |阅读模式
5金钱
我调试的例程是:
STM32Cube_FW_F4_V1.3.0\Projects\STM324x9I_EVAL\Applications\LwIP\
LwIP_UDPTCP_Echo_Server_Netconn_RTOS例子,
采用DP83848,RMII模式
现在是只有初始化时能够进入这个线程,并执行状态的读取
/**
  * @brief  This function sets the netif link status.
  * @param  netif: the network interface
  * @retval None
  */
void ethernetif_set_link(void const *argument)
{
  uint32_t regvalue = 0;
  struct link_str *link_arg = (struct link_str *)argument;
  
  for(;;)
  {
    if (osSemaphoreWait( link_arg->semaphore, 100)== osOK)
    {
      /* Read PHY_MISR*/
      HAL_ETH_ReadPHYRegister(&EthHandle, PHY_MISR, &regvalue);
      
      /* Check whether the link interrupt has occurred or not */
      if((regvalue & PHY_LINK_INTERRUPT) != (uint16_t)RESET)
      {
        /* Read PHY_SR*/
        HAL_ETH_ReadPHYRegister(&EthHandle, PHY_SR, &regvalue);
        
        /* Check whether the link is up or down*/
        if((regvalue & PHY_LINK_STATUS)!= (uint16_t)RESET)
        {
          netif_set_link_up(link_arg->netif);
        }
        else
        {
          netif_set_link_down(link_arg->netif);
        }
      }
    }
  }
}
这几句应该是当网线插拔时进行网络状态设置的,但我把他们取出,并定时进行查询时,感觉没有执行,每次读出的都是0x00000,且容易出现hardfault
  /* Read PHY_SR*/
        HAL_ETH_ReadPHYRegister(&EthHandle, PHY_SR, &regvalue);
        
        /* Check whether the link is up or down*/
        if((regvalue & PHY_LINK_STATUS)!= (uint16_t)RESET)
        {
          netif_set_link_up(link_arg->netif);
        }
        else
        {
          netif_set_link_down(link_arg->netif);
        }
现在是程序进行TCPIP网络通信是没问题的。
请各位达人,给说一下如何检测网线的热插拔,检测到网线拔掉时一般要做什么操作,插上时又要做什么操作,谢谢

回复

使用道具 举报

  离线 

482

主题

8万

帖子

30

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
117328
金钱
117328
注册时间
2010-12-1
在线时间
902 小时
发表于 2014-12-16 22:48:26 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
微信公众平台:正点原子   点击扫码添加
回复

使用道具 举报

  离线 

1

主题

3

帖子

0

精华

新手上路

Rank: 1

积分
27
金钱
27
注册时间
2014-12-16
在线时间
0 小时
 楼主| 发表于 2014-12-17 17:13:49 | 显示全部楼层
回复【2楼】正点原子:
--------------------------------
lwip ping 32字节包4个小时,变慢了,
老大,别光顶啊,给建议,查哪?stm32监测内存从哪看?
回复

使用道具 举报

  离线 

7

主题

174

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1500
金钱
1500
注册时间
2013-12-16
在线时间
183 小时
发表于 2016-5-13 17:07:43 | 显示全部楼层
void ETH_LINK_HANDLE(void)
{
        if(ETH_ReadPHYRegister(DP83848_PHY_ADDRESS, PHY_BSR) & PHY_Linked_Status)
                ETH_Link_status=1;//连接恢复
        else
                ETH_Link_status=0;//连接断开
}
回复

使用道具 举报

  离线 

7

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2017-3-2
在线时间
36 小时
发表于 2017-10-17 23:34:34 | 显示全部楼层
心跳包机制
回复

使用道具 举报

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

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2017-11-23 04:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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