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 内存问题导致程序运行不正常,比如串口接发、网络接发,程序崩溃等

"sgmediation.zip" 是个包含 UCLA(加利福尼亚大学洛杉矶分校)开发的 sgmediation 插件的压缩包。该插件专为统计分析软件 Stata 设计,用于进行中介效应分析。在社会科学、心理学、市场营销等领域,中介效应分析是种关键的统计方法,它帮助研究人员探究变量之间的因果关系,尤其是中间变量如何影响因变量与自变量之间的关系。Stata 是款广泛使用的统计分析软件,具备众多命令和用户编写的程序来拓展其功能,sgmediation 插件便是其中之。它能让用户在 Stata 中轻松开展中介效应分析,无需编写复杂代码。 下载并解压 "sgmediation.zip" 后,需将解压得到的 "sgmediation" 文件移至 Stata 的 ado 目录结构中。ado(ado 目录并非“adolescent data organization”缩写,而是 Stata 的自定义命令存放目录)目录是 Stata 存放自定义命令的地方,应将文件放置于 "ado\base\s" 子目录下。这样,Stata 启动时会自动加载该目录下的所有 ado 文件,使 "sgmediation" 命令在 Stata 命令行中可用。 使用 sgmediation 插件的步骤如下:1. 安装插件:将解压后的 "sgmediation" 文件放入 Stata 的 ado 目录。如果 Stata 安装路径是 C:\Program Files\Stata\ado\base,则需将文件复制到 C:\Program Files\Stata\ado\base\s。2. 启动 Stata:打开 Stata,确保软件已更新至最新版本,以便识别新添加的 ado 文件。3. 加载插件:启动 Stata 后,在命令行输入 ado update sgmediation,以确保插件已加载并更新至最新版本。4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值