项目场景:
纯新手
EtherCAT从站开发 STM32F446+LAN9252+FreeRTOS,CiA402
问题描述
有参考例程是F405的,移植到F446,无法进入OP状态,主站报错误码0x0001、0x0002等等
原因分析:
例程里EtherCAT部分基本可以不动,代码太多了全看完也很费时间,只需要改一点配置就行,报错的主要原因:
1、SPI以及外部中断的配置及对应引脚配置不对;
2、时钟配置不对;
3、堆栈大小不够。
解决方案:
我发现原因的方法比较笨,是试出来的,实在没办法了可以一试:
直接用例程的程序烧写到F446里,只改了我的引脚配置,结果是可以进入OP状态;
接下来改stm32的.c文件,换成最新版,发现_rcc.c不能改,说明我之前的程序里时钟配置可能不对,单独把这个文件改回来;
然后尝试把device里的器件换成F446,可以进入OP状态;
在C/C++里把预定义改为F446xx的,可以进入OP状态;
更改启动文件,报错误码0x0002-no memory,说明启动文件有问题,对比发现堆栈大小设置差别很大,把F446的启动文件堆栈改大,可以进入OP状态;
回到我原本报错的程序,把堆栈改了就全好了!!!
回到原话题,报错之后主要检查三个地方:
1、仔细检查SPI以及外部中断的配置及对应引脚配置,看有没有没改全的地方;
2、时钟配置,找不到问题所在就找一个例程看看里面怎么配置的,复制过来,我用了HAL库所以直接用STMCubeX配置好了,不容易出错;
3、在启动文件里把堆栈大小改大,我之前的EtherCAT普通IO通信是可以的,换成CiA402就小了。
#题外话
第一次发,打了两遍,前面不知道咋回事系统给我删了,很细的东西不想打了,这些我记录一下,也希望对大家有帮助。下次可以交流一下XML文件和用EtherCAT做电机驱动程序。