|
你好:使用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 如果需要代码,我会将相关代码作为附件发送 |
说说我今天使用CUBEMX2的感受
L9663驱动开发
终于找到了STM32C542RC开发板的官方实例
使用我自己写的 IAP 跳转到 FLASH 应用程序时,串口上出现无关字节
STM32F103 USB虚拟串口,采用的官方库非HAL库文件,过一段时间会断开链接
Error[Lp015]: section placement failure内容占用溢出
KEILMDK每次都要手动选Reset and Run吗 不然下载到板子上得重启电源才行 求解答
STM32F7由USB FS读写QSPI flash
STM8L050J3使用SWIM下载方式,无法下载,总是报错
用SDRAM刷ltdc有白线会出现是啥情况
微信公众号
手机版
1. 在发送数据前,对比CAN 配置寄存器是否正确,包括时钟部分。
2. 看看数据是否正确的传递改发送邮箱,因为邮箱后是硬件自动发送的。
看看CAN的正常执行是否有被改变。
听上去像是栈的size没有重新设置。
楼主配置一下,看看是不是stack溢出了
你不妨调整下堆栈大小,再就是看看CAN使用到的内存数据是否可能被以太网内存动态分配时跟CAN所用内存冲突了。这个恐怕真要看看代码了。
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?这看起来不应该啊。
感谢大家,特别是butterflyspring,我检查了寄存器,发现可能是LWIP改变了寄存器。现在我把
MX_CAN_Init();放在LWIP_INIT();之后,看起来,一切都正常了。但是,问题的根源并没有得到解决。