S32K116调试记录(2)CAN接口调试

1. 配置CAN 管脚

S32K116调试记录(2)CAN接口调试

 

2. 修改时钟为外部时钟

      样机使用48Mhz外部晶振,之前这里选的是内部时钟导致CAN一直不通

对应原理图如下:

S32K116调试记录(2)CAN接口调试

修改如下:

S32K116调试记录(2)CAN接口调试

 

3. 使用SDK中的CAN示例代码,发现CAN发送一直异常

现象: 单步CAN发送一帧数据,使用CANPro接收会一直接收同一帧数据,停不下来,

         而且发现CAN没有进入到发送完成中断里面去

出现CAN发送异常的SDKs版本如下:

S32K116调试记录(2)CAN接口调试

原因: 

       工程中使用的SDKs版本不一样导致的,示例代码中对应的是S32K116的开发板而我们用的是116的样机板,

       所以SDKs的版  本选择有一定不一样

解决办法如下:

      1.重新创建工程

      2.选择SDKs时选择最新的版本 2.9.2版本,如下

S32K116调试记录(2)CAN接口调试

 

4. SDKs版本选择以及示例代码选择建议

     以后推荐就用SDKv2.92版本的 (其他版本指不定出啥问题)

S32K116调试记录(2)CAN接口调试

5. CAN 发送和接收 中断模式和阻塞模式调试区别

6. CAN过滤器使用方法

 

a .使用MB的方式

    (1) 每个MB buffer对应一个can id, 目前使用的此方法,测试正常。

    (2) 注意必须CAN RX api必须使用中断模式(多次触发中断正常),不能使用阻塞模式(测试只能触发一次后续触发不了)

     (3)***CAN_Receive接口每个都RX_MAILBOX都必须要对应***

S32K116调试记录(2)CAN接口调试

 

    (4)另外: 接收中断处理完后,必须再重起所以RX_MAILBOX buffer的CAN_Receive

S32K116调试记录(2)CAN接口调试

 

b.使用fifo的方式

      使用FIFO的方式,设置滤波和接收buffer.

      但是使用此方法一直会有各种数据接受异常,所以未调通,一直使用上面方面