基于STM32F107裸机移植LWIP(STM32CUBE配置)

MCU:STM32F107
PHY:KSZ8081
LWIP_VERSION:2.0.3
1.配置RCC,串口,定时器
1.1 开启RCC,使用内部8M晶振,配置系统时钟
基于STM32F107裸机移植LWIP(STM32CUBE配置)
文章图片


基于STM32F107裸机移植LWIP(STM32CUBE配置)
文章图片

1.2 打开调试串口1,打开接收中断,开启DMA发送
基于STM32F107裸机移植LWIP(STM32CUBE配置)
文章图片

基于STM32F107裸机移植LWIP(STM32CUBE配置)
文章图片

基于STM32F107裸机移植LWIP(STM32CUBE配置)
文章图片

1.3 打开定时器中断
基于STM32F107裸机移植LWIP(STM32CUBE配置)
文章图片

2.ETH配置参数
基于STM32F107裸机移植LWIP(STM32CUBE配置)
文章图片

PHY地址怎么确定?看PHY硬件手册和硬件原理图
基于STM32F107裸机移植LWIP(STM32CUBE配置)
文章图片


基于STM32F107裸机移植LWIP(STM32CUBE配置)
文章图片

基于STM32F107裸机移植LWIP(STM32CUBE配置)
文章图片


基于STM32F107裸机移植LWIP(STM32CUBE配置)
文章图片

2.1 PHY前16个寄存器是通用的标准的,不需要修改。修改下PHY控制状态寄存器的偏移,以及哪个BIT位代表速度哪个BIT位代表全双工、半双工。我们可以看下PHY的丛植状态寄存器
基于STM32F107裸机移植LWIP(STM32CUBE配置)
文章图片


基于STM32F107裸机移植LWIP(STM32CUBE配置)
文章图片

2.2开启连接和状态回调函数,这样可以实现网线插上和拔下的时候触发事件,能够拔下网线的时候缓存数据,插上网线的时候重新申请IP地址并连接服务器。
在ethernetif.c文件里面
void ethernetif_notify_conn_changed(struct netif *netif)
{
/* NOTE : This is function could be implemented in user file
when the callback is needed,
*/
DebugUARTPrintf("conn_changed");
if(netif_is_link_up(netif) && !netif_is_up(netif))
{
netif_set_up(netif);
extern err_t dhcp_start(struct netif *netif);
dhcp_start(netif);
}
}
需要把ethernetif_set_link(netif_default)放到void MX_LWIP_Process(void),并把void MX_LWIP_Process(void)放到主函数里面轮循。

【基于STM32F107裸机移植LWIP(STM32CUBE配置)】基本上到这里就可以PING通了。可以再加上业务层,可以到ST的官方上下载,官方网站上有关于做TCP/UDP客户端以及服务器等等。

    推荐阅读