mtraveler 发表于 2020-8-13 16:47:00

cubeMX配置lwip后为社么ETH的RX_MODE 不能选择中断?

cubeMX配置lwip后为社么ETH的RX_MODE 不能选择中断?为什么只能轮询接收,不能中断接收呢,想用中断接收怎么改呢?

grunt 发表于 2020-8-15 02:54:39

正好这几天在学STM32的网口
首先没找到ETH的RX_MODE的中断配置,只有ETH全局中断的配置选项
在无系统情况下STM32CubeMX生成的函数
void MX_LWIP_Process(void)
的注释是
* Up to user to call this function in main.c in while (1) of main(void)
就是这个函数要被放到无限循环处理中
函数MX_LWIP_Process其中第一个子函数是
ethernetif_input(&gnetif);
它的注释是
This function should be called when a packet is ready to be read from the interface.
就是这个函数是ETH的接收函数
你说的中断接收是指把函数ethernetif_input放在中断处理中?

如果是的话,STM32CubeMX配置时使能ETH全局中断
函数ethernet_link_check_state中
修改HAL_ETH_Stop(&heth);为
HAL_ETH_Stop_IT(&heth);
修改HAL_ETH_Start(&heth);为
HAL_ETH_Start_IT(&heth);
函数MX_LWIP_Process中
注释掉ethernetif_input(&gnetif);
编写ETH接收中断回调函数HAL_ETH_RxCpltCallback
void HAL_ETH_RxCpltCallback (ETH_HandleTypeDef * heth) {
        ethernetif_input(&gnetif);
}
这样的话当触发ETH接收中断时才会调用ethernetif_input算不算中断接收呢

role_2099 发表于 2020-8-15 21:35:40

参考下下面这个帖子,我没有测试但是看到zero99分享的是使用lwip的,后面有网友交流提到RX_MODE中断模式,貌似是调好了,楼主可以试试啊

https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=609819&extra=page%3D&page=1



页: [1]
查看完整版本: cubeMX配置lwip后为社么ETH的RX_MODE 不能选择中断?