CubeMX 配置LWIP 使用中断的方法(2023.10.11)

文章讲述了在CubeMX中配置以太网时遇到的问题,尤其是ETH中断模式的消失。作者建议通过修改LWIP内核代码,将数据包读取移至中断服务函数以降低丢包率,并提供了具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CubeMX有个很麻烦的问题,就是在配置的时候按以前的方案。或者像网上一般人介绍的那样,在ETH配置的时候选择中断模式, 甚至,在CubeMX的配置界面中,已经找不到 ETH_RX_MODE这个选项了, 更麻烦的是生成的代码中,连heth.Init.TxMode也永久性的彻底消失了。。。

一下子就把使用以太网中断接收模式的门槛提到了很高。

   而使用轮询方式,如果项目要求不高还行, 如果要求高,,,会有很麻烦的丢包率,特别是当你的项目程序很复杂的时候,,,这个丢包率足以让上位机那边的人天天找你麻烦,。。。

当然, 如果中断设置不当,也会有很多问题。比如频繁进入TCP中断,导致其他部分什么也干不了。因此,必须将中断的优先级设置为最低级, cubeMX能给的就只有 3.3了,,,

/***************************************配置中断*************************************************/

 那么要解决这个吓人的网络通讯丢包,那就必须使用中断模式了。目前只能通过改LWIP的内核代码来实现。

配置方法如下(假设你已经完全掌握了CUBEMX的ETH轮询配置方法)

1.还按cubeMX默认的polling模式配置好,并生成代码。 接着打开工程,来修改LWIP的内核代码。

首先修改ethernetif.c文件中的void ethernet_link_check_state(struct netif *netif)函数, 和HAL库的套路基本相通, 想用中断, 直接把启动函数后面加IT即可, 这样在启动的时候就开启了中断。

2.在lwip.c文件中,修改void MX_LWIP_Process(void)函数

将读取数据包的这个函数,注释掉。  当然也不能叫注释掉, 因为还需要它来读取以太网的数据包,只是要把它移动到中断服务函数中去。

3.修改中断服务函数,在中断服务函数中添加处理过程。 

/*******************************************结束*****************************************************/

进行抓包测试, 20ms一次,疯狂轰炸, 没有数据丢包情况, 哈哈哈

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值