CubeMX配置ETH+LWIP+FreeRTOS+AC6编译新手详细教程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

最近在做的项目需要用到TCP通信,在使用cubemx配置lwip这一块也踩了不少坑,折腾了不少的时间才ping通并通信上了,故写下这篇新手教程,希望对各位嵌入式的同学们有所帮助!!
我是用的cubemx版本 6.4.0 本文中的硬件平台 野火挑战者 v2 开发板 MCU stm32f429IGTx
注意:cubemx6.5 及以上版本配置上差异巨大,使用6.5以上版本不适用本文

一、工程通用配置

因为是新手教程,故从工程配置说起。

1、RCC时钟配置

在这里插入图片描述

在这里插入图片描述

2、SYS选项配置

因为FreeRTOS需要使用systick作为时基的时钟源,故这里时基来源推荐选择除systick定时器外的其他定时器做为时基来源,如TIM2(根据项目需求选择)
在这里插入图片描述

3、初始化USART1并使能中断

这里初始化一个串口是为了方便后续调试打印相关的信息使用
在这里插入图片描述
在这里插入图片描述

4、工程名以及保存路径等配置

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

二、ETH配置

PHY为LAN8720A,硬件连接采用RMLL接口

1.硬件连接

这里值展示PHY与单片机ETH外设的连接部分,野火的板子上将PHY的复位引脚接到单片机的复位引脚了,使用软件复位了,推荐还是接到单片机的通用IO口,在初始化时硬件复位,在这里踩了坑,后面介绍配置上的区别
在这里插入图片描述

2、使能RMLL接口并根据原理图实际连接配置GPIO

在这里插入图片描述

3、Parameter Settings 选项卡配置

在这里插入图片描述
注意:PHY地址由LAN8720A的PHYAD0管脚的硬件连接决定,PHYAD0管脚拉高则这里PHY Address设置为1,PHYAD0管脚拉高浮空或拉低则这里PHY Address设置为0

4、Advanced Parameters选项卡配置

在这里插入图片描述
注意:图中红色线框1的内容为设置PHY的名称,本开发平台使用的为LAN8720,如果是LAN8742的话,直接勾选LAN8742选项即可。红色线框2部分的延迟配置在软件自动复位和采用硬件配置有所不同,在正常使用通用GPIO复位时这个地方保持默认配置即可,如果同本文中采用的野火挑战者开发板的将PHY服务脚接到单片机复位脚上了之后,这个地方的延迟需要修改同图中所示,其他的延时值本人也没有试过。
红色线框3部分的PHY相关寄存器配置一般保持默认即可。红色线框4部分按图中设置即可

5、勾选中断

在这里插入图片描述

三、FreeRTOS配置

1、开启FreeRTOS

进入FREERTOS选项,选择CMSIS_V1,根据需求修改以下栈空间,其他先保持默认即可。
在这里插入图片描述

2、修改默认生成的线程栈空间大小

在上一步开启FreeRTOS后,“Tasks and Queues"选项中会自动生成一个默认线程"defaultTask”,双击该线程在弹出的参数框中修改以下该线程分配的栈空间,因为后面开启lwip后,lwip的初始化会自动添加到该线程中,栈空间太小有可能不会堆栈溢出导致程序不能正常执行,这里也可以根据个人习惯修改一下线程名以及线程入口函数名字,我这里就没有做修改了。另外我新增了一个128bit栈空间的新线程,用来做指示灯闪烁的,这个地方可以跳过。
在这里插入图片描述

四、LWIP配置

1、进入LWIP选项卡,勾选Enable并配置"General Settings"选项卡

在这里插入图片描述

2、配置"Key Options"选项卡

这里所有参数代表什么意思有兴趣的可以自己查询一下,网络协议太复杂了,本人也说不好,以免误导在这里就不赘述了
在这里插入图片描述
在这里插入图片描述

3、配置"Checksum"选项卡

在这里插入图片描述

五、生成工程下载并ping通

1、cubemx生成工程并完成串口的重定向

生成工程并使用MDK打开工程,在usart.c文件中添加串口的重定向
在这里插入图片描述

`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);
}`

2、打开ethernetif.c文件 HAL_ETH_MspInit函数中添加ETH硬件复位代码

在这里插入图片描述

		HAL_GPIO_WritePin(GPIOI, GPIO_PIN_1, GPIO_PIN_SET);
		GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
		GPIO_InitStruct.Pull  = GPIO_PULLUP;
		GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
		GPIO_InitStruct.Pin = GPIO_PIN_1;
		HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);
		HAL_GPIO_WritePin(GPIOI, GPIO_PIN_1, GPIO_PIN_RESET);
		HAL_Delay(50);
		HAL_GPIO_WritePin(GPIOI, GPIO_PIN_1, GPIO_PIN_SET);
		HAL_Delay(5);

这个地方的PHY硬件复位管脚需要根据自己的硬件实际连接修改管脚,几遍如野火挑战者开发板一样将硬件复位连接在了单片机复位脚上了,也推荐一个虚拟的管脚到这里。

3、点击魔术棒,Target 选项卡中勾选Use MicroLIB选项

这一步很重要,千万不要落下!!!
在这里插入图片描述

好啦,到这里如果不需要AC6编译的极快速度,就已经可以编译并下载工程到开发板并ping通了
在这里插入图片描述

六、AC6编译设置

1、点击魔术棒,进行如下配置

在这里插入图片描述

在这里插入图片描述

1、将下载好的freertos源文件中的 port.c 、portmacro.h文件复制到cubemx生成的工程文件夹中的Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM4F 目录下替换掉原有 port.c 、portmacro.h 文件

在这里插入图片描述
这两个文件没有的可以自行去FREERTOS官网下载源码,或者去野火或者正点原子的学习资料中都能找到FREERTOS源码文件

2、打开 cc.h 文件,注释掉如下两行代码

在这里插入图片描述
注意:这里一个比较坑的点就是,每次用cubemx重新生成工程之后,都要重复上述两步的操作,十分麻烦

3、打开lwip.h文件,添加代码 #define __CC_ARM,到这里编译工程就能享受飞一般的编译速度并且不会报错啦

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

  • 13
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
canfestival freertos是两个开源项目的结合。而这两个项目分别是CANopen网络协议栈和FreeRTOS实时操作系统。 首先,CANopen是一个针对CAN(Controller Area Network)总线的通信协议。它被广泛应用于工业自动化、机器人技术和汽车电子等领域。CANopen协议栈提供了一套开发工具和函数库,用于实现CANopen通信协议。它支持CAN总线上的节点之间的数据通信、网络管理和设备配置等功能。canfestival是一款开源的CANopen协议栈实现,它提供了面向对象的API接口,并且支持多种平台和硬件架构。 其次,FreeRTOS是一个开源的实时操作系统(RTOS),用于在嵌入式系统中管理任务并实现实时响应。它具有小巧、易于移植和高度可靠的特点。FreeRTOS提供了任务管理、时间管理、内存管理和通信机制等功能。它可以作为操作系统内核嵌入到嵌入式硬件中,用于管理任务的调度和资源的分配。 因此,canfestival freertos项目结合了CANopen协议栈和FreeRTOS实时操作系统,提供了一个功能强大的嵌入式系统解决方案。它可以使CANopen网络协议栈和实时操作系统紧密集成,实现嵌入式系统的实时通信和任务调度。通过将CANopen协议栈与FreeRTOS结合使用,可以在嵌入式系统中轻松实现CANopen通信功能,并实现任务的管理和控制,提高系统的稳定性和可靠性。 总而言之,canfestival freertos项目的结合为嵌入式系统提供了一种强大的解决方案,可以实现实时通信和任务管理。它是一个开源项目,可以免费使用,并得到开发者社区的广泛支持和贡献。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值