Wireshare抓包工具调试
1
使用STM32CubeMX生成带系统的Lwip工程。生成后,怎么都Ping不通。 |
2\你检查一下 PHY的配置,需要配置成和你的板子一样的寄存器参数...
通常情况下,Cube已经整的很人性化,不会有大问题,检查硬件网线、还有单步调试,看看是不是哪儿崩溃了
个人建议,先不用 OS,裸机跑或者使用其他方式以确定硬件完全没问题,再开始调软件
freertos 的堆栈设置小了,将freertos的堆栈设置大一些就可以了
3调试细节问题:
1. //记得在void MX_GPIO_Init(void)中使能RMII所用到的IO的端口时钟,
//因为在ethernetif.c中的void HAL_ETH_MspInit(ETH_HandleTypeDef* ethHandle)函数里只开了以太网时钟__HAL_RCC_ETH_CLK_ENABLE();
2. //用STM32CubeMX直接生成的RMII接口的IO口和实际的有部分不一致
https://blog.csdn.net/kmsmg/article/details/78271221
四、用STM32CubeMX V4.22.1 生成了一个包含 EHT ,Lwip 的项目,调试一直不正常,经仔细检查存在以下问题:
1.硬件采用了LAN8720A ,但是STM32CubeMX 生成的是 LAN8742A的代码,必须根据硬件连接更改地址。
解决办法: 在 ..\Src\ethernetif.c 修改如下:
heth.Instance = ETH;
heth.Init.AutoNegotiation = ETH_AUTONEGOTIATION_ENABLE;
// heth.Init.PhyAddress = LAN8742A_PHY_ADDRESS;
heth.Init.PhyAddress = LAN8720A_PHY_ADDRESS; // modify by kmsmg, LAN8720A_PHY_ADDRESS=0, LAN8742A_PHY_ADDRESS=1
2.初始化时必须对 LAN8720A 进行硬件复位。
解决办法:
分配一个 GPIO 连接 LAN8720A的复位端, 在 ..\Src\ethernetif.c 修改如下:
heth.Init.ChecksumMode = ETH_CHECKSUM_BY_HARDWARE;
heth.Init.MediaInterface = ETH_MEDIA_INTERFACE_RMII;
/* USER CODE BEGIN MACADDRESS */
/* USER CODE END MACADDRESS */
LAN8720_RESET(); // modify by kmsmg
hal_eth_init_status = HAL_ETH_Init(&heth);
............
//-----------------------------------------------
void LAN8720_RESET(void)
{
HAL_GPIO_WritePin(GPIOD, GP_EHT_REST_Pin, GPIO_PIN_RESET);
HAL_Delay(55);
HAL_GPIO_WritePin(GPIOD, GP_EHT_REST_Pin, GPIO_PIN_SET);
}
---------------------
作者:kmsmg
来源:CSDN
原文:https://blog.csdn.net/kmsmg/article/details/78271221
版权声明:本文为博主原创文章,转载请附上博文链接!
六、
七、好
http://www.cnblogs.com/54zorb/p/9608066.html
- ip地址在lwip那设置,一灯常亮表示100M,另一灯3-8秒闪烁一次是你的局域网内3-8秒有一个广播数据包,有数据收发就会闪烁,即使你的程序不正确,PHY在检测到数据包时也会闪烁指示灯。先搞定ip再ping,没有ip你ping谁呢?CubeMX生成的工程默认是DHCP的,如果是DHCP,你要登录路由器来查看你的设备IP。
http://www.stmcu.org.cn/module/forum/thread-610516-1-1.html
OK
https://blog.csdn.net/qingwufeiyang12346/article/details/84892397
https://blog.csdn.net/qingwufeiyang12346/article/details/85107007