前言
硬件的配置由前面的工程递增,会根据目的修改部分控制代码
由于本人较懒,记录主要是过程,原理性的东西网上一大把,我就不赘述了,由于懒,主要由图片和代码加少量文字组成
源码地址https://gitcode.com/qq_36517072/stm32,第x章为cx文件夹
一、STM32CUBE配置网络
1.1根据原理图配置ETH
由原理图可知对应的IO
配置CUBE ETH,在FREERTOS下使用中断接收
观察到默认引脚与原理图有三个引脚有区别,分别修改三个引脚
1.2根据原理图配置PHY的复位
由原理图可知对应的复位IO为PD3
在CUBE内配置IO,并命名为ETH_RESET
1.3配置LWIP
使能LWIP,配置IP
配置PHY驱动类型
ctrl+s保存generate code
二、代码和测试
main
函数里添加PHY的复位代码
/* USER CODE BEGIN 2 */
HAL_GPIO_WritePin(ETH_RESET_GPIO_Port, ETH_RESET_Pin, GPIO_PIN_RESET);
HAL_Delay(10);
HAL_GPIO_WritePin(ETH_RESET_GPIO_Port, ETH_RESET_Pin, GPIO_PIN_SET);
HAL_Delay(10);
/* USER CODE END 2 */
连接好烧录器编译并烧录
连接网线使用主机ping单片机可以ping通
总结
主要介绍了STM32CUBE下freertos的配置
问题解决
由于之前STM32做的少,调LWIP发现和以前工程一样的代码,会卡死在MX_LWIP_Init
函数内,查阅资料发现问题可能是编译时的优化等级,在将优化等级改为O2后,初始化可以通过,但LED不转换,说明已经卡死;改为O1后,可以PING通几秒,然后又卡死;改为O0后才没问题,以往没对编译器优化研究过,但现在的MCU性能普遍很强,懒得去深究了。
参考
https://www.cnblogs.com/yu1741588584/p/18299835