记一次EtherCAT IO扩充

因业务需要,现需要将EtherCAT的IO点位扩充至128入128出。设计过程中碰到以下问题,一一解决掉了:

SSC生成的XML文件,EEPROM烧录后,提示:AdsError:1818, query interface failed.

具体报错截图如下:

问题原因:使用SSC时,import的LAN9252-SDK,此后生成的XML文件经测试会导致这一问题,无论SSC5.11还是5.12,无论IO怎么规划,生成的XML烧录进eeprom都会报这个错误。

解决办法:使用SSC生成XML时,不要import LAN9252的SDK,直接使用最原始的模板建立SSC功能,如下图所示:

用SSC生成协议栈代码时,再用LAN9252的SDK。

DC模式下进不了OP

问题原因:这个比较低级,定时中断,和三个外部中断配置有误,CubeMX配置时要小心。

解决办法:中断向量这么配置:

static void MX_NVIC_Init(void) {
    /* EXTI2_IRQn interrupt configuration */
    HAL_NVIC_SetPriority(EXTI2_IRQn, 1, 2);
    //HAL_NVIC_EnableIRQ(EXTI2_IRQn);
    /* EXTI1_IRQn interrupt configuration */
    HAL_NVIC_SetPriority(EXTI1_IRQn, 1, 1);
    //HAL_NVIC_EnableIRQ(EXTI1_IRQn);
    /* EXTI0_IRQn interrupt configuration */
    HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
    //HAL_NVIC_EnableIRQ(EXTI0_IRQn);
    /* TIM8_UP_TIM13_IRQn interrupt configuration */
    HAL_NVIC_SetPriority(TIM8_UP_TIM13_IRQn, 1, 0);
    HAL_NVIC_EnableIRQ(TIM8_UP_TIM13_IRQn);
}

这样一个定时器中断和三个外部中断上电后不会一下子启动,协议栈会启动这些中断,注意不要把定时器中断的使能关掉,定时器中断的还有另一个函数用来控制启动和停止:HAL_TIM_Base_Start_IT(&htim8);,这个在协议栈的宏中配置好。

丁丁生于 1987.07.01 ,30岁,英文ID:newflydd
  • 现居住地 江苏 ● 泰州 ● 姜堰
  • 创建了 Jblog 开源博客系统
  • 坚持十余年的 独立博客 作者
  • 大学本科毕业后就职于 中国电信江苏泰州分公司,前两年从事Oracle数据库DBA工作,两年后公司精简技术人员,被安排到农村担任支局长(其本质是搞销售),于2016年因志向不合从国企辞职,在小城镇找了一份程序员的工作。
  • 在 Git OSChina 上积极参与开源社区
  •