stm32cubeMX配置LWIP

MCU:stm32f769NIHx

PHY:LAN8742A

LWIP_VERSION:2.0.3

1.配置RCC,串口(printf debug log)

  (1)开启RCC,配置时钟系统

    图1.1

(2)时钟树配置如下图所示

图1.2

  (3)串口1配置基本参数

图1.3

/* 小技巧 */

在工程里我们平时会用到printf打印debug信息,如果产品发布的时候,这些打印信息就要注释掉,为了方便管理,我们会对prinf再次封装并用宏去控制开启和关闭debug_log



/* printf重定向 不用标准库 减少代码量 */
#if 1
#pragma import(__use_no_semihosting)

int _ttywrch(int ch) 
{
  ch=ch;
  return ch;
}

struct __FILE 
{ 
  int handle; 
};

FILE __stdout; 

void _sys_exit(int x) 
{ 
  x = x; 
} 
//重定义fputc函数 
int fputc(int ch, FILE *f)
{ 
  while((USART1->ISR&0X40)==0);//循环发送,直到发送完毕 
  USART1->TDR = (u8) ch; 
  return ch;
}
#endif

 /* 宏控制 debug log */

#ifdef MY_DEBUG 
#define debug(format, ...) printf(format, ##__VA_ARGS__)
#else
#define DEBUG(format,...) 
#endif
/* 小技巧 */ 在工程里我们平时会用到printf打印debug信息,如果产品发布的时候,这些打印信息就要注释掉,为了方便管理,我们会对prinf再次封装并用宏去控制开启和关闭debug_log /* printf重定向 不用标准库 减少代码量 */ #if 1 #pragma import(__use_no_semihosting) int _ttywrch(int ch) {   ch=ch;   return ch; } struct __FILE {   int handle; }; FILE __stdout; void _sys_exit(int x) {   x = x; } //重定义fputc函数 int fputc(int ch, FILE *f) {   while((USART1->ISR&0X40)==0);//循环发送,直到发送完毕   USART1->TDR = (u8) ch;   return ch; } #endif /* 宏控制 debug log */ #ifdef MY_DEBUG #define debug(format, ...) printf(format, ##__VA_ARGS__) #else #define DEBUG(format,...) #endif

2.ETH配置参数

·

图1.4

(1)PHY前16个寄存器是通用的标准的,所以都一样。第31个寄存器是比较重要,可以读取这个寄存器获取通讯速度和是否处在自协商模式

图1.5

通讯(2)模式为RMII:关于RMII和MII的区别,详情请看https://blog..net/fun_tion/article/details/70270632

图1.6

(3)LWIP参数配置,应为没有路由器,直接用网线和电脑相连,所以只能使用敬爱IP不能使用DHCP ,ICMP功能需要打开,因为这个功能是用来ping消息的。UDP和TCP也关掉了,目前还没有用到,,其他参数默认,在主函数循环中循环调用MX_LWIP_Process();包括轮训接收信息和一些LWIP协议栈需要定时调用的函数

图1.7

MCU:stm32f769NIHx PHY:LAN8742A LWIP_VERSION:2.0.3 1.配置RCC,串口(printf debug log)   (1)开启RCC,配置时钟系统     图1.1 (2)时钟树配置如下图所示 图1.2   (3)串口1配置基本参数 图1.3 /* 小技巧 */ 在工程里我们平时会用到printf打印debug信息,如果产品发布的时候,这些打印信息就要注释掉,为了方便管理,我们会对prinf再次封装并用宏去控制开启和关闭debug_log /* printf重定向 不用标准库 减少代码量 */ #if 1 #pragma import(__use_no_semihosting) int _ttywrch(int ch) {   ch=ch;   return ch; } struct __FILE {   int handle; }; FILE __stdout; void _sys_exit(int x) {   x = x; } //重定义fputc函数 int fputc(int ch, FILE *f) {   while((USART1->ISR&0X40)==0);//循环发送,直到发送完毕   USART1->TDR = (u8) ch;   return ch; } #endif /* 宏控制 debug log */ #ifdef MY_DEBUG #define debug(format, ...) printf(format, ##__VA_ARGS__) #else #define DEBUG(format,...) #endif 2.ETH配置参数 · 图1.4 (1)PHY前16个寄存器是通用的标准的,所以都一样。第31个寄存器是比较重要,可以读取这个寄存器获取通讯速度和是否处在自协商模式 图1.5 通讯(2)模式为RMII:关于RMII和MII的区别,详情请看https://blog..net/fun_tion/article/details/70270632 图1.6 (3)LWIP参数配置,应为没有路由器,直接用网线和电脑相连,所以只能使用敬爱IP不能使用DHCP ,ICMP功能需要打开,因为这个功能是用来ping消息的。UDP和TCP也关掉了,目前还没有用到,,其他参数默认,在主函数循环中循环调用MX_LWIP_Process();包括轮训接收信息和一些LWIP协议栈需要定时调用的函数 图1.7
经验分享 程序员 微信小程序 职场和发展