完整的S32K144的学习汇总如下:
https://github.com/GreyZhang/g_s32k144
继续S32K144的学习,这一次来做一下CAN通信功能的一个小结。说起来,这算是一个迟到的小结,因为这个SBC uja11691耗费了我一点时间,中间的过程不是很顺利。
最初的配置,还是按照能够找到的Demo开始,然后增加到我自己的工程中。但是一直不成功,于是切换了方式,直接测试Demo,发现几个Demo其实是不能够成功实现与外部设备收发的。于是,研究了一下说明书以及文档,确认了几个修改点。
- 供电方式需要修改,如果要使用CAN通信应该使用12V的供电而不是USB的供电模式。
- SBC应该按照自己的需求去做一下配置修改。
- 我找到的几个Demo,SBC的依赖驱动SPI是有一点问题的,因为片选配置错误。
- 如果结合FreeRTOS进行调试,软件的初始化处理需要注意,如果OS没有启动直接初始化会触发一些中断,最终直接进入异常。但是,在我们的实际调试中,可能看到的是进入了看门狗中断。
- SBC其实是有一个看门狗的,这个看门狗需要进行得当的处理。
做到上面几点,其实基本上问题就不大了。我自己的测试使用500K的波特率,CAN监控采用了Kvaser的CAN卡。测试,写了一个周期性的发送。相关的初始化代码以及测试代码如下:
以上是通过SPI对SBC进行初始化以及CAN模块初始化的过程,中间还配置了两个中断优先级,防止OS出现问题。
发送函数是按照官方的例子改的,但是我增加了一个abort(上面是没有开启的),这样可以处理掉一些错误导致的阻塞。
这就是那个简单的测试,我在100ms的任务中进行了调用。
这是监控到的发送出来的报文,从时间戳看得出其实这个发送的稳定性以及OS的调度还是比较准确的。
好的,这一次的学习总结暂且到此。CAN模块算是做了一个开始了,接下来还有更多有意思的东西可以做了。
完整的S32K144的学习汇总如下: