1. 硬件选型与基础环境搭建
工业物联网边缘设备的开发,硬件选型是第一步。STM32F407作为一款经典的Cortex-M4内核MCU,兼具性能与性价比,特别适合工业场景。我实测下来,它的168MHz主频和192KB RAM完全能胜任Modbus TCP协议栈的处理需求。搭配LAN8720A这颗超低功耗的10/100M以太网PHY芯片,整套方案成本可以控制在百元以内,比商用网关便宜至少3倍。
具体硬件连接上,LAN8720A通过RMII接口与STM32F407通信。这里有个坑要注意:芯片的nINT/REFCLKO引脚必须通过1.5K电阻上拉到3.3V,否则可能无法正常输出时钟信号。我在三个不同批次的板子上都遇到过这个问题,表现为LWIP初始化失败。电路设计时建议预留这个电阻位置,实测用0805封装的就能稳定工作。
开发环境推荐用STM32CubeMX+IAR/Keil的组合。CubeMX配置ETH外设时,要特别注意以下几点:
- PHY地址选择:LAN8720A的PHYAD0引脚接地时地址是0,接3.3V时是1
- RMII时钟配置:必须开启50MHz的外部时钟输入
- DMA设置:建议启用ETH收发DMA,能降低CPU负载约40%
c复制// CubeMX生成的ETH初始化代码片段
void HAL_ETH_MspInit(ETH_HandleTypeDef* heth)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(heth->Instance==ETH)
{
__HAL_RCC_ETH_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOG_CLK_ENABLE();
// RMII引脚配置
GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed
