STM32 + DP83848 UDP 实验

实现ping

cubemx 版本 6.5.0
stm32芯片:stm32f407vgt6
DP83848 采用RMII模式
cubemx 按照例程配置

1号坑

由于买的板子,DP83848 的时钟频率需要stm32输出,因此需要将stm32时钟限制在150M。对于项目而言,需要支持4.8M的uart,150M时钟不能满足。目前来说,主要是测通stm32的UDP,这个坑后面再填。

2号坑

cubemx生成项目,烧录,发现板子不能跑。
单步调试,发现程序在MX_LWIP_Init() -> lwip_init() -> mem_init() -> mem->next =MEM_SIZE_ALIGNED,时发生崩溃
查看MEM_SIZE_ALIGNED,发现mem.c 的377 行左右有定义

#ifndef LWIP_RAM_HEAP_POINTER
/** the heap. we need one struct mem at the end and some room for alignment */
LWIP_DECLARE_MEMORY_ALIGNED(ram_heap, MEM_SIZE_ALIGNED + (2U * SIZEOF_STRUCT_MEM));
#define LWIP_RAM_HEAP_POINTER ram_heap
#endif /* LWIP_RAM_HEAP_POINTER */

找到LWIP_RAM_HEAP_POINTER在lwipopts.h中有定义

/*----- Default Value for H7 devices: 0x30044000 -----*/
//#define LWIP_RAM_HEAP_POINTER 0x30044000
/*----- Value supported for H7 devices: 1 -----*/
//#define LWIP_SUPPORT_CUSTOM_PBUF 1

此处应该时H7和F4的芯片地址不一样导致的,注释掉发现程序可以正常运行

3号坑

不能ping通现象1

程序可以跑通,但是不能ping通,在路由器上可以看到设备的ip和mac,但是不能ping通,尝试很多方法仍然不行,偶然看到一篇博客:
博客链接: STM32CUBEMX 6.5 LWIP 内存失败PING失败
根据st官方论坛的说法,在lwipopts.h结尾加上

/* USER CODE BEGIN 1 */
#define CHECKSUM_GEN_ICMP 0
#define CHECKSUM_CHECK_ICMP 0
#undef LWIP_SUPPORT_CUSTOM_PBUF
#undef LWIP_RAM_HEAP_POINTER
/* USER CODE END 1 */

问题链接:F4 + FreeRTOS + LwIP. Bad default LWIP_RAM_HEAP_POINTER after updating to v1.9.0.
可以正常ping通。

其他不能ping通的原因

  1. cubemx 生成ETH 引脚有时会出现问题
  2. cubemx LWIP - key options 配置RAM heap pointer 有问题(同上屏蔽H7设置)
    在这里插入图片描述
    对于F407芯片,可以将0x30044000改成0x2000E378,参考: STM32CubeIDE1.9.0\STM32CubeMX 6.5 F429IGT6加LAN8720A,配置ETH+LWIP

4号坑

UDP 通讯 在使用udp_sendto的时候,需要给struct pbuf中的配置项赋值,默认为0时可能会引起发送不正常。

udp_send_pf->type_internal = 65;
udp_send_pf->flags = 2;
udp_send_pf->ref = 1;
udp_send_pf->if_idx = 1;

5号坑

STM32 内存问题导致程序运行不正常,比如串口接发、网络接发,程序崩溃等

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值