CubeMX创建裸机工程:STM32F407ZGT6 MII接口驱动 DP83848
*之前的一篇文章说了如何使用CubeMX创建一个stm32f407 + DP83848 + MII + lwip +FreeRTOS的工程,链接:https://blog.youkuaiyun.com/leideleide/article/details/106524136
依赖于这个平台,这里我们使用cubeMX来搭建一个没有操作系统FreeRTOS的裸机工程*
硬件环境:
- MCU单片机型号:STM32F407ZGT6
- PHY 芯片型号 :DP83848
- MCU和PHY芯片接口:MII
- 操作系统:无
- TCP/IP网络协议栈:lwIP
- 配置工具:cubeMX
- 编译工具:Keil5
- 烧录器:J-Link
- 烧录模式:SWD
原理图:
原理图部分使用STM32F4XX编程手册的推荐电路,同时PHY 芯片DP83848使用外部25M晶振作为时钟源
CubeMX配置注意事项
1.CubeMX选择MII模式以后,请一一核对CubeMX管脚是否和原理图一一对应
2.注意PHY 芯片DP83848的PHY 芯片复位管脚、使能管脚和PHY地址
CubeMX的配置
- MCU时钟配置,选择外部晶振25M,主频配置为168M
- Eth选择MII模式,因为没有操作系统,所以RX模式是轮询模式
- LWIP配置使用静态IP, 配置对应的IP地址,然后就可以生成keil工程
- cubeMX产生keil工程main函数中需要我们完成以下工作
1> 完成DP83848的使能和RST工作
2> 完成网络数据的轮询接收
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
HAL_GPIO_WritePin(DP83848_EN_GPIO_Port, DP83848_EN_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(DP83848_RST_GPIO_Port, DP83848_RST_Pin, GPIO_PIN_RESET);
short_delay();
HAL_GPIO_WritePin(DP83848_RST_GPIO_Port, DP83848_RST_Pin, GPIO_PIN_SET);
MX_LWIP_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
MX_LWIP_Process();
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
测试与验证
1.将电脑IP和板子的IP地址配置在一个网段,然后在电脑端ping 192.168.1.109
至此cubeMX 配置完成
小结
- 根据原理图确定STM32F4XX和PHY芯片的连接方式MII
- MII接口确定以后,需要根据原理图在cubeMX配置引脚
- DP83848的PHY 使能,复位,PHY地址都要根据原理图配置
- PHY芯片的时钟要保证稳定
- 裸机程序,需要在主函数中添加MX_LWIP_Process();
获取工程和源码,请+QQ: 1025054559