你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F103 + ENC28J60 + LWIP + HAL CAN驱动 内存冲突问题?

[复制链接]
栖梦 提问时间:2023-9-7 01:59 / 已解决

你好:使用STM32F103R8T6+ENC28J60+LWIP作网络通讯,现在遇到一个问题:使用CUDE建立的MDK工程,在调试网络部分之前,CAN收发正常。在移植完LWIP 2.1.3之后,网络正常DHCP、TCP、UDP都没有问题,但是,CAN发送却失败了(用测试仪不能接收到数据)。

通过排查,发现当注释掉LWIP初始化代码的mem_init()函数之后,CAN发送就正常了,但是,LWIP肯定就无法正常工作。

有没有可能HAL的CAN通讯,与LWIP有内存方面的冲突?

MDK版本5.38,CUDEMX是最新版本。我试过把STM32F107+LWIP,通过CUDE生成的代码中的LWIP和middle ware 部分移植过去,CAN依然无法正常工作(当然,移植可能有些疏漏,网络部分也没有正常工作)。

希望得到您的帮助,谢谢。

HighCloud

2023-9-7

如果需要代码,我会将相关代码作为附件发送

收藏 评论5 发布时间:2023-9-7 01:59

举报

5个回答
butterflyspring 最优答案 回答时间:2023-9-7 11:10:41
CAN 通讯的代码相对来说不多,可以尝试从这里调试找问题:
1. 在发送数据前,对比CAN 配置寄存器是否正确,包括时钟部分。
2. 看看数据是否正确的传递改发送邮箱,因为邮箱后是硬件自动发送的。

看看CAN的正常执行是否有被改变。
lemonboard 回答时间:2023-9-7 08:37:22

听上去像是栈的size没有重新设置。

楼主配置一下,看看是不是stack溢出了

xmshao 回答时间:2023-9-7 10:30:53
赞同你的分析!
你不妨调整下堆栈大小,再就是看看CAN使用到的内存数据是否可能被以太网内存动态分配时跟CAN所用内存冲突了。这个恐怕真要看看代码了。
栖梦 回答时间:2023-9-7 13:32:58

CAN_MCR before init LWIP: 0x00010084 CAN_MSR before init LWIP: 0x00000C08

CAN_MCR after init LWIP: 0x00010084 CAN_MSR after init LWIP: 0x00000008

CAN_MCR before send with LWIP: 0x00010084 CAN_MSR before send with LWIP: 0x00000008

难道LWIP改变了CAN_MSR?这看起来不应该啊。

栖梦 回答时间:2023-9-7 13:41:31

感谢大家,特别是butterflyspring,我检查了寄存器,发现可能是LWIP改变了寄存器。现在我把

MX_CAN_Init();放在LWIP_INIT();之后,看起来,一切都正常了。但是,问题的根源并没有得到解决。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版