博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
stm32多块开发板can总线互联卡死问题
阅读量:5219 次
发布时间:2019-06-14

本文共 1088 字,大约阅读时间需要 3 分钟。

       单块板子在接入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模式下进行分析。

转载于:https://www.cnblogs.com/siahekai/p/11000807.html

你可能感兴趣的文章
hdu3549 Flow Problem(裸最大流)
查看>>
【C语言入门教程】5.4 递归
查看>>
【荐】利用NAT、Host-Only双虚拟网卡,实现Virtual Box中CentOS5.x联网
查看>>
【WebGL入门】画一个旋转的cube
查看>>
IIS6下PHP配置(转载)
查看>>
datepicker冲突
查看>>
交大校友會高階經理人才培訓班 2009/11/19 演講主題:蒙恬科技- 智慧型人機介面整合專家_蔡義泰,蒙恬科技董事長...
查看>>
搭建kafka cluster
查看>>
《Java Concurrency》读书笔记,Java并发编程实践基础
查看>>
Linux运维常用的命令详解
查看>>
Python3版本中的filter函数,map函数和reduce函数
查看>>
eclipse的格式化规则(即format.xml文件).
查看>>
MySQL----workbench
查看>>
冲刺阶段—个人工作总结03
查看>>
Splunk 基本使用
查看>>
JQuery中的DOM操作
查看>>
linux入门教程(九) 文本编辑工具vim
查看>>
Python札记 -- 文件压缩
查看>>
如何通过SSH工具(SecureCRT、XShell)连接Vmware虚拟机中的Linux(CentOS7)
查看>>
struts常用常量
查看>>