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