STM32H743使用CubeMX配置Lwip、Freertos

本文详细描述了基于STM32H743IIT6开发板的嵌入式开发过程,包括时钟配置、MPU设置、调试串口和网络接口的配置,重点介绍了LwIP网络库的使用以及如何通过printf和scanf重定向到串口。文章还分享了如何在Freertos环境下测试网络性能,并针对LAN8720的差异进行了调整。适合嵌入式开发者深入理解STM32开发和LwIP应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、开发环境

硬件:野火挑战者开发板STM32H743IIT6
软件版本: CubeMX 6.7.0 STM32CubeH7 Firmware Package V1.11.0 / 04-Nov-2022

原理图:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

2、配置时钟

在这里插入图片描述
时钟树参数仅供参考
时钟参数

3、配置MPU

MPU配置需要查相关资料,一知半解
在这里插入图片描述

4、配置调试串口

修改GPIO与硬件原理图对应,串口参数默认
在这里插入图片描述

5、配置网口

参数配置与硬件对应
在这里插入图片描述
此处网络收发地址非常重要!!!
在这里插入图片描述
使能中断
在这里插入图片描述

6、配置Lwip

在这里插入图片描述
在这里插入图片描述

7、生成keil工程

在这里插入图片描述
在这里插入图片描述
串口printf函数相关配置
在这里插入图片描述

/void Usart_SendString(uint8_t *str)
{
	unsigned int k=0;
  do 
  {
      HAL_UART_Transmit( &huart1,(uint8_t *)(str + k) ,1,1000);
      k++;
  } while(*(str + k)!='\0');
  
}
///重定向c库函数printf到串口DEBUG_USART,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{
	/* 发送一个字节数据到串口DEBUG_USART */
	HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 1000);	
	
	return (ch);
}

///重定向c库函数scanf到串口DEBUG_USART,重写向后可使用scanf、getchar等函数
int fgetc(FILE *f)
{
		
	int ch;
	HAL_UART_Receive(&huart1, (uint8_t *)&ch, 1, 1000);	
	return (ch);
}

添加打印、网络处理函数
在这里插入图片描述

编译程序,测试网络、串口功能
在这里插入图片描述

8、添加Freertos

在这里插入图片描述
!!!!!下面这一步非常重要,卡了很长时间才找到原因!!!!!
在这里插入图片描述

生成keil工程,屏蔽之前的调试程序
在这里插入图片描述
添加如下代码:
在这里插入图片描述

测试网络:
在这里插入图片描述

9、测试网络传输性能

单板上使用的LAN8720,而CubeMX配置的是LAN8742,两者稍有差异,按照下图配置为100M速率,否则速率为10M
在这里插入图片描述

参考:https://www.freesion.com/article/29491218149/
[野火]《LwIP应用开发实战指南—基于野火 STM32 全系列(M4-M7)开发板》
在这里插入图片描述

10、总结

在开发过程中,由于很多细节不清楚,走了很多弯路,临时查了很多资料,没有完全吸收,有很多地方还不是很明白,需要继续学习。最后,欢迎大家留言讨论以及提出指导意见。

### STM32H743 使用 CubeMX 配置 FreeRTOSLWIP 与 LAN8720 网卡集成 对于希望在 STM32H743 上实现基于 FreeRTOS 的网络应用并连接到 LAN8720 网卡的需求,可以遵循如下方法来完成配置和开发环境搭建。 #### 利用CubeMX初始化项目设置 通过STM32CubeMX工具创建新工程时,选择目标板子型号为STM32H743ZI。之后,在中间件选项里勾选FreeRTOS以及LwIP协议栈支持[^2]。这一步骤确保了后续编程过程中可以直接调用这两个库的功能函数而无需手动移植它们。 #### 中断优先级调整 由于LAN8720是以太网控制器,其正常工作依赖于及时处理接收的数据包中断请求。因此建议适当降低其他外设(比如定时器)的抢占优先级以便给以太网接口留出足够的响应时间。具体操作是在RCC时钟树页面找到对应NVIC项进行修改即可[^3]。 #### Ethernet PHY参数设定 针对LAN8720A这款PHY芯片,在硬件抽象层(HAL)驱动程序中需指定正确的介质访问控制(MAC)地址格式及传输速率等属性值。这些配置通常位于`stm32hxx_hal_conf.h`文件内部定义宏变量处或者直接利用CubeMX图形界面完成相应选项的选择[^1]。 #### 示例代码片段展示MQTT over TLS通信流程 下面给出一段简单的Python伪代码用于演示如何构建一个安全可靠的物联网设备端应用程序框架: ```python import network from umqtt.simple import MQTTClient import ssl def connect_wifi(): wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect('SSID', 'PASSWORD') def mqtt_publish(topic, message): client = MQTTClient("umqtt_client", "broker.example.com") context = ssl.create_default_context() s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) secure_soc = context.wrap_socket(s, server_hostname="broker.example.com") client.set_transport(secure_soc) client.connect() client.publish(topic,message,retain=True,qos=1) if __name__ == '__main__': connect_wifi() while True: try: mqtt_publish('/test/topic','Hello World!') except Exception as e: print(e) ``` 请注意上述代码仅为概念验证性质,并不适合直接应用于实际产品环境中;真实场景下还需要考虑更多细节因素如错误重试机制、资源管理策略等方面优化改进。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值