本帖最后由 dsjsjf 于 2019-3-1 11:15 编辑
本次活动测评开发板ST NUCLEO-H743ZI由ST意法半导体提供,感谢意法半导体对EEWorld测评的支持!
STM32H7
NUCLEO_H743ZI
【 ST NUCLEO-H743ZI测评】(1)初识ST NUCLEO-H743ZI
几经周折,终于搞定了以太网。因为有STM32CUBEMX,本以为花个2个小时就能搞定的,却花了几天时间。
先说一下以前玩NUCLEO-F767ZI板以太网的吧,好作个比较,ETH配置只要把PHY Address设为0,DHCP Disabled,手动填入IP地址等,生成工程;while(1)中加入MX_LWIP_Process();就可以ping 通了。
而NUCLEO-H743ZI的配置就相对多了。下面来详细配置一下:
一、在上次工程的基础上,首先配置CORTEX-M7
二、配置ETH,使能全局中断,注意那句Warning,一会要用到
三、使能FreeRTos,保持默认配置
四、使能LWIP,Platform中选择LAN8742,General中禁用DHCP,IP地址根据自己电脑的配置
五、重新生成代码,并打开,将RAM的起始地址修改为刚才那句警告中的
六、编译运行,ping一下,可以ping通了
七,加入tcp回传测试,添加以下代码
- #include "stats.h"
- #include "lwip/api.h"
- #include "lwip/tcp.h"
- void tcp_echoserver_init(void);
- static err_t tcp_echoserver_accept(void *arg, struct tcp_pcb *newpcb,err_t err);
- static err_t tcp_echoserver_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p,err_t
- err);
- static struct tcp_pcb *tcp_echoserver_pcb;
- void tcp_echoserver_init(void)
- {
- err_t err;
- tcp_echoserver_pcb = tcp_new();
- if(tcp_echoserver_pcb !=NULL)
- {
- err = tcp_bind(tcp_echoserver_pcb,IP_ADDR_ANY,7);
- if(err == ERR_OK)
- {
- tcp_echoserver_pcb = tcp_listen(tcp_echoserver_pcb);
- tcp_accept(tcp_echoserver_pcb,tcp_echoserver_accept);
- }
- else
- {
- memp_free(MEMP_TCP_PCB, tcp_echoserver_pcb);
- }
- }
- }
- static err_t tcp_echoserver_accept(void *arg, struct tcp_pcb *newpcb,err_t err)
- {
- /* initialize lwip tcp_recv callback function for newpcb */
- tcp_recv(newpcb, tcp_echoserver_recv);
- return ERR_OK;
- }
- static err_t tcp_echoserver_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p,err_t
- err)
- {
- tcp_write(tpcb,p->payload,p->len,1);
- pbuf_free(p);
- return ERR_OK;
- }
复制代码
八、在任务中添加 tcp_echoserver_init();
- void StartDefaultTask(void const * argument)
- {
- /* init code for LWIP */
- MX_LWIP_Init();
- /* USER CODE BEGIN 5 */
- tcp_echoserver_init();
- /* Infinite loop */
- for(;;)
- {
-
- osDelay(1);
- }
- /* USER CODE END 5 */
- }
复制代码
九、再次编译运行,打开网络调试助手,测试OK
测试结束,但学习还未结束,知其然也要知其所以然。
此内容由EEWORLD论坛网友dsjsjf原创,如需转载或用于商业用途需征得作者同意并注明出处