最近使用了STM32F407和AX58100开发了EtherCat从站控制器。和大家分享一下遇到的问题和解决过程,希望对大家有所帮助。
一、移植
1. 按照网上的教程指导,使用SSC_V5i13生成XML和从站源码。学习XML文件中各属性定义。
2. 移植了硬件相关的驱动和与协议相关的业务逻辑,发现生成的从站内存读写函数代码效率太低,就根据AX58100手册的内存操作,重新改写了。
3. 使用倍福上位机TWINCAT3.1将XML中信息烧录到EEPROM
二、上机调试时候发现:
1. PER-OP模式切换到SAFE-OP失败
跟踪调试发现UINT16 APPL_GenerateMapping(UINT16 *pInputSize,UINT16 *pOutputSize)这个函数执行后计算出的字符和理论值不符合。这个函数作用是计算出所有PDO需要的总长度,根据数据字典0x1600和0x1A00的定义,重新改写这个函数。同时很奇怪官方生成的代码怎么会有问题,和V5.12,V5.11生成工具生成的代码对比一下,是有计算表达式的不同。最后才找出根本原因。
2. SM正常但是DC模式不正常
DC模式从SAFE-OP转到OP模式,一直超时报警。搜了很多资料,有的说DC的扫描周期太短,有的说中断响应优先级不合理。搞了几天没有解决。用示波器查看了SYNC的同步信号也无异常。最后没办法,和其他地方搞到的能正常运行代码一个文件一个文件替换。最后发现是AX58100中内存交互函数出了问题。问题出在改写时候使用的STM32的SPI库函数操作。这个没有深究定位到具体问题段,它的调用路径有点长,我也不想改ST库函数。换成案例那样的一个个收发,就正常了。
U8 SPI_WR( U8 data )
{
SPI3->DR = data;
while( !(SPI3->SR&SPI_FLAG_RXNE) );
return SPI3-&g


258

被折叠的 条评论
为什么被折叠?



