首先感谢几位大神的源代码和优秀的文章:
1、阿衰0110
文章和代码:S32K的flexcan组件使用(RxFIFO+中断)
S32K的flexcan组件使用(RxFIFO+中断)_阿衰0110的博客-CSDN博客
2、weifengdq
文章和代码:S32K148----SDK笔记----CAN收发
S32K148----SDK笔记----CAN收发_weifengdq的博客-CSDN博客_s32k148
3、揪住小尾巴
【s32k】s32k14x系列(1)——开发环境搭建_揪住小尾巴的博客-CSDN博客_s32k14
4、起个名字辣么麻烦S32K144之与S32K1xx系列MCU工程移植_起个名字辣么麻烦的博客-CSDN博客
5、魏小C的苦逼日常
J-Link解锁S32K_魏小C的苦逼日常的博客-CSDN博客
6、星叔
JLINK_JTAG S32K 烧录 调试配置
使用JTAG的工具Jflash刷写S32DS生成的HEX文件_星叔的博客-CSDN博客
7、就是我啊12138
S32K144从入门到入土(2)时钟选择及其配置方法
原文链接:https://blog.csdn.net/qq_51350904/article/details/132556243
8、*balance
原文链接:https://blog.csdn.net/balance_c/article/details/122700426
S32k144SDK版本——电源管理模块
感谢上述大神的文章和源代码。
功能:利用单片机的can0和can1两路can,实现不同波特率的2路can的网关功能,can0接收到的所有数据发送到can1,can1接收到的所有数据发送到can0
单片机:s32k148,144pin
环境:s32ds,SDK3.0版本
安装包:S32DS_ARM_Win32_v2.2
烧写器:Jlink V9
总线监测工具:canoe
硬件:破解已有pcb板,can接口芯片用的是TJA1042
具体实现:
1、硬件:需要一张s32k148的单片机电路板,自己画的也行,破解别人的也行,搞清JTAG的TMS、TCLK、TDO、TDI、Rest的排列顺序,因为有些板子的JTAG的接口的PIN脚号和在网上买的Jlink的pin脚号是不一致的,需要手动飞线,将Jlink烧写器的pin脚和手头现有的pcb板子的pin脚对应上,Jlink上面的5v-supply引脚给单片机148供电,只需要将TMS、TCLK、TDO、TDI、GND、5v-supply这6根线连接好就ok了,RESET引脚不用。pcb板子的两路can接到canoe上面,用于监测2路can报文有没有丢帧、负载率等信息。TJA1042的STB引脚,用PTE32的GPIO输出一个低电平,用于让can接口芯片,一直工作在nomal工作状态,不让can休眠。
2、软件:安装S32DS_ARM_Win32_v2.2开发环境,用到PE插件,PE是很强大的,能帮助我们写不少的代码,不再像以前那样从寄存器写起,门槛低,非常友好。安装Jlink驱动程序,会用到Jlink和Jflash两个软件,利用Jlink解锁s32k148,因为我的pcb上的单片机被锁保护了,需要unlock Kinetis进行解锁。之后再修改148的pin脚定义,源代码默认的是176pin,我手头的单片机是144pin。最后配置环境生产HEX文件,用于烧录。之所以用到hex文件,是因为debug一直调不通,总是错误,但是能编辑,就是环境里面的那个小锤子是好用的,索性不用debug功能,直接Jflash烧写hex文件到单片机。烧写到单片机之后,为了方便,烧写后不需要断开Jlink和单片机的连接跳线,只需要将单片机的Rest引脚接GND一下,单片机自己复位,程序就能正常运行,否则在烧录之后,程序是不会自动执行的,给人造成一种程序不好用的假象。在烧录程序之前,需要Jlink V9仿真器接到JTAG的6根线,连接USB到电脑后打开Jlink软件,输入connect,S32K148,JTAG(Default),speed选200,收到一系列反馈信息后,连接成功。再打开Jflash软件,同样设置speed的速度=200,太快的话,会连接不成功。
注意:只需要安装S32DS_ARM_Win32_v2.2这一个软件就够了,不需要安装补丁、升级包、插件之类的,也不需要升级,就能满足大部分的使用需求,否则会出现格式错误的提示框,很烦,而且PE出问题用不了。第二点就是s32ds的在线激活有问题,总是失败,后来采用离线激活就ok了,曲折啊。离线激活首先下载一个request,然后把这个request上传到nxp官网上面,在上面下载一个active的文件到电脑中,然后把这个active文件加载到离线激活的安装步骤里面,就能够正常安装了,由于之前出现过格式错误的提示框,我出于谨慎考虑,安装路径没改,一路下一步,环境终于安装成功。
3、调试:修改大神的源代码,基本能够实现网关的功能,但是丢帧,严重丢帧。250k那路can用canoe的IG发4条10ms的扩展帧,同样500k那路也用canoe的IG发4条10ms的扩展帧,理论上,负载率应该是23%和46%。 500k那路的负载率是23%,250k那路竟然是39%,应该是46%,差了5个点,可见丢帧是非常严重的。我通过时间片轮询的机制调用mailbox8到15这8个发送mailbox,解决了丢帧的问题。源代码只用到maibox8和mailbox9用作报文发送,利用率低,无法满足23%负载率要求,我将2个mailbox扩充到8个mailbox,提高4倍的发送报文的性能,使得发送不会拥堵,造成丢帧的情况。
注意:为了提高can模块的收发性能,利用电源管理模块,强制让单片机工作在HSRUN模式,sys时钟设置为112M,提高了网关的吞吐量,减少丢帧的概率。
4、需要源码的请到我的资源去下载。
链接:https://pan.baidu.com/s/1GclifgXMT8HDHJXcqOHAUw
提取码:1234
https://download.csdn.net/download/yypencyclopedia3/85760774
flexcan_test_s32k148_144PIN【用作网关实现250k转500k波特率】-单片机文档类资源-CSDN下载