316_S32K144 EVB 标准CAN配置

完整的S32K144的学习汇总如下:

https://github.com/GreyZhang/g_s32k144

    继续S32K144的学习,这一次来做一下CAN通信功能的一个小结。说起来,这算是一个迟到的小结,因为这个SBC uja11691耗费了我一点时间,中间的过程不是很顺利。

    最初的配置,还是按照能够找到的Demo开始,然后增加到我自己的工程中。但是一直不成功,于是切换了方式,直接测试Demo,发现几个Demo其实是不能够成功实现与外部设备收发的。于是,研究了一下说明书以及文档,确认了几个修改点。

  1. 供电方式需要修改,如果要使用CAN通信应该使用12V的供电而不是USB的供电模式。
  2. SBC应该按照自己的需求去做一下配置修改。
  3. 我找到的几个Demo,SBC的依赖驱动SPI是有一点问题的,因为片选配置错误。
  4. 如果结合FreeRTOS进行调试,软件的初始化处理需要注意,如果OS没有启动直接初始化会触发一些中断,最终直接进入异常。但是,在我们的实际调试中,可能看到的是进入了看门狗中断。
  5. SBC其实是有一个看门狗的,这个看门狗需要进行得当的处理。

做到上面几点,其实基本上问题就不大了。我自己的测试使用500K的波特率,CAN监控采用了Kvaser的CAN卡。测试,写了一个周期性的发送。相关的初始化代码以及测试代码如下:

316_S32K144 EVB 标准CAN配置_第1张图片

    以上是通过SPI对SBC进行初始化以及CAN模块初始化的过程,中间还配置了两个中断优先级,防止OS出现问题。

316_S32K144 EVB 标准CAN配置_第2张图片

    发送函数是按照官方的例子改的,但是我增加了一个abort(上面是没有开启的),这样可以处理掉一些错误导致的阻塞。

316_S32K144 EVB 标准CAN配置_第3张图片

    这就是那个简单的测试,我在100ms的任务中进行了调用。

316_S32K144 EVB 标准CAN配置_第4张图片

    这是监控到的发送出来的报文,从时间戳看得出其实这个发送的稳定性以及OS的调度还是比较准确的。

    好的,这一次的学习总结暂且到此。CAN模块算是做了一个开始了,接下来还有更多有意思的东西可以做了。

完整的S32K144的学习汇总如下:

https://github.com/GreyZhang/g_s32k144

你可能感兴趣的:(S32K,嵌入式)