zoukankan      html  css  js  c++  java
  • stm32多块开发板can总线互联卡死问题

           单块板子在接入can总线时没有任何问题,但是多块板子同时接入can时,基本只有一块是可以用的,其他板子会卡死,起初认定是总线连接的问题,试过总线上接入120ohm电阻一只或两只,都没有效果,通过keil使用jlink进入调试模式发现程序卡死在startup_stm32f10x_md.s的下面位置,经老师指点此处应为stm32的中断服务程序的入口位置,推测是can总线中断没处理好,老师问有没有处理接收中断,我说没有写can接收的中断服务。

            273                B       .

            274

            275                ENDP

            然后,将下面程序中的ENABLE更改为DISABLE则,程序可以运行了。

             /*CAN FIFO0 message pending interrupt enable */

             CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE); //使能FIFO0消息挂号中断

            因此在多块can总线开发板互联时,要么编写can接收中断的服务程序,要么不要使能接收中断,即不使能FIFO0消息挂号中断,否则要加入类似如下的中断服务程序

    /* USB中断和CAN接收中断服务程序,USB跟CAN公用I/O,这里只用到CAN的中断。 */
    void USB_LP_CAN1_RX0_IRQHandler(void)
    {
      
      CanRxMsg RxMessage;
    
      RxMessage.StdId=0x00;
      RxMessage.ExtId=0x00;
      RxMessage.IDE=0;
      RxMessage.DLC=0;
      RxMessage.FMI=0;
      RxMessage.Data[0]=0x00;
      RxMessage.Data[1]=0x00;    
    
      CAN_Receive(CAN1,CAN_FIFO0, &RxMessage); //接收FIFO0中的数据  
      if((RxMessage.StdId==slaveID)&&(RxMessage.Data[0]==0x55))   
      {FABIAO=0xff;}
      
      
    }


            总结:

            个人觉得自己有点偏执,开始一直认为单个通信正常,连在一起不正常是总线对外硬件配置的问题,没有想到是程序配置问题,但是最终也大致提出了可能是can总线配置问题,但由于stm32 can总线没有仔细学习,导致也没有推测出问题。

            其二没有好好利用jlink,仅仅将其当作下载器使用,还是没有好好思考。没有多进入debug模式下进行分析。


  • 相关阅读:
    使用Flex Bison 和LLVM编写自己的编译器[zz]
    应用开发框架讨论应用配置wxFileConfig
    交流电220V是从何而来的
    电压、电流、电阻的概念
    电路返回端,接地,大地,等势体,静电场,回路,电能
    泛型实现List(List<T>)排序
    javascript注册功能
    层(div或table)的左右滚动
    javascript正则表达式检验
    JavaScript通用类库(ZT)
  • 原文地址:https://www.cnblogs.com/siahekai/p/11000807.html
Copyright © 2011-2022 走看看