S32K148

文章目录

    • 前言

    • 建立工程

    • ProcessorExpert配置

    • 补全代码

    • 调试运行

    • 工程代码

    • 微信公众号

前言

S32K148含字母E或者J的有以太网, 如FS32K148UJ, 使用RMII接口连接PHY芯片, 官方的开发板带的PHY是TJA1101, 车载以太网, 传输使用两根线而不是标准4根线的百兆以太网, 这里我们还是用传统的方式来测试, 外接的是KSZ8041PHY, 代码方面可以说没有差别, 某宝淘的板子, 链接:

引脚的具体连接参考下面的ENET的配置, S32K外接8M晶振, PHY接的是50M的有源晶振, 官方例程用的是FreeRTOS下的LwIP, 多线程自然好, 这里简单点, 直接用RAW API做裸奔的UDP_Echo测试.

建立工程

步骤:

  • File -> New -> S32DS Application Project

  • Processors 选择 S32K148, Project Name 填你自己的工程名

  • Select SDK: SDKs 选择 S32K148_SDK 3.0.0, Debugger选择J-Link, Finish.

ProcessorExpert配置

双击工程名, 点击Components窗口Components目录下的 pin_mux:PinSetting, ENET配置:

Component Library中双击添加tcpip组件:

tcpip General的配置, 没有选FreeRTOS, 自动默认Baremetal:

Data Link的配置, RMII, 100, 勾选ARP Queueing:

IP Network配置, 默认不改, 注意下IP是192.168.0.200, ICMP不能少, 我们ping要用到:

Transport里面, 我们这里只用UDP, 去掉TCP的勾选:

Applications里面, 只勾选UDP_ECHO, 去掉LWIPERF(默认用到TCP, 可以配合 Jperf 之类的软件测网络性能) :

Memory Options默认不改或者Memory heap size改为官方例程的16384:

tcpip组件的配置就到这里, 接下来重点要配置 clodkMan1:clock_manager:

这里相对默认的改动比较多, 可以参考官方的lwip例程的时钟配置.

点击生成代码:

补全代码

main.c中:

/* User includes (#include below this line is not maintained by Processor Expert) */#include 'clockMan1.h'#include 'pin_mux.h'extern void start_example(void);//=================================================== /* For example: for(;;) { } */ CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT, g_clockManCallbacksArr, (uint8_t)CLOCK_MANAGER_CALLBACK_CNT); CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_FORCIBLE); PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr); start_example();

在 SDK/middleware/tcpip/tcpip_stack/demo/test.c 中:

  • start_example(); 直接调用了 mainLoopTask(NULL);

  • mainLoopTask 中初始化网络和app, 就直接进入常见的while网络接口轮询 (void)enet_poll_interface(&netif);

所以test.c不用修改, 所有工作都默认做好了.

SDK/middleware/tcpip/tcpip_stack/apps/udpecho_raw/udp_echo_raw.c就是实现的UDP Echo功能:

  • 初始化中绑定的是端口7: err = udp_bind(udpecho_raw_pcb, IP_ANY_TYPE, 7);

  • 初始化声明的接收回调函数 udp_recv(udpecho_raw_pcb, udpecho_raw_recv, NULL);

  • 接收回调函数 static void udpecho_raw_recv(void *arg, struct udp_pcb *upcb, struct pbuf *p,const ip_addr_t *addr, u16_t port) 中直接把接收到的原封不动的还回去: udp_sendto(upcb, p, addr, port);

需要改UDP相关的app就可以在这个文件或者在udpecho_raw文件夹里面新添文件. 有初始化的就放到test.c的static void apps_init(void) 中去, 这里我们不改动.

调试运行

连接网线到笔记本, 笔记本禁用WiFi, 以太网IPV4配置:

我们先ping一下 192.168.0.200, 可以ping通:

然后使用网络调试助手测试下UDP Echo:

由于udpecho_raw.c里面指定了接收的端口为7, 所以远程主机那里填 192.168.0.200:7 即可, 而回传的IP地址和端口是和接收的一样, 本地主机地址可以是192.168.0.x, 端口也可以随意一些.

工程代码

https://download.csdn.net/download/weifengdq/11926786

微信公众号

欢迎扫描二维码关注本人微信公众号, 及时获取或者发送给我最新消息:

(0)

相关推荐

  • KW41Z 时钟

    其实freescale的mcu不算复杂,它的工具也一直做的很不错.前面的帖子里有说到CodeWarrior提供一个强大的Processor Expert工具.PE工具也延续到后面的IDE产品.虽然KW ...

  • Orbbec深度相机开箱体验

    首先,很高兴通过参加"点云PCL"公众号的活动,得到了一台深度摄像机(如下图). 自己接触3D点云这一领域已经快有一年时间了,从起初PCL环境配置到基本的程序实现,每一步都对当初作 ...

  • Linux系统学习 十一、DHCP服务器—相关文件、配置文件、服务器配置

    2.DHCP服务器相关文件 安装SHCP服务器 yum install dhcp 对应的端口 端口号: ipv4 udp67.udp68(不推荐改端口) ipv6 udp546.udp547(暂时还没 ...