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

这篇具有很好参考价值的文章主要介绍了CubeMX配置ETH+LWIP+FreeRTOS+AC6编译新手详细教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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


前言

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

一、工程通用配置

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

1、RCC时钟配置

cubemx lwip,单片机,stm32,c语言,物联网

cubemx lwip,单片机,stm32,c语言,物联网

2、SYS选项配置

因为FreeRTOS需要使用systick作为时基的时钟源,故这里时基来源推荐选择除systick定时器外的其他定时器做为时基来源,如TIM2(根据项目需求选择)
cubemx lwip,单片机,stm32,c语言,物联网

3、初始化USART1并使能中断

这里初始化一个串口是为了方便后续调试打印相关的信息使用
cubemx lwip,单片机,stm32,c语言,物联网
cubemx lwip,单片机,stm32,c语言,物联网

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

cubemx lwip,单片机,stm32,c语言,物联网
cubemx lwip,单片机,stm32,c语言,物联网

二、ETH配置

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

1.硬件连接

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

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

cubemx lwip,单片机,stm32,c语言,物联网

3、Parameter Settings 选项卡配置

cubemx lwip,单片机,stm32,c语言,物联网
注意:PHY地址由LAN8720A的PHYAD0管脚的硬件连接决定,PHYAD0管脚拉高则这里PHY Address设置为1,PHYAD0管脚拉高浮空或拉低则这里PHY Address设置为0

4、Advanced Parameters选项卡配置

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

5、勾选中断

cubemx lwip,单片机,stm32,c语言,物联网

三、FreeRTOS配置

1、开启FreeRTOS

进入FREERTOS选项,选择CMSIS_V1,根据需求修改以下栈空间,其他先保持默认即可。
cubemx lwip,单片机,stm32,c语言,物联网

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

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

四、LWIP配置

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

cubemx lwip,单片机,stm32,c语言,物联网

2、配置"Key Options"选项卡

这里所有参数代表什么意思有兴趣的可以自己查询一下,网络协议太复杂了,本人也说不好,以免误导在这里就不赘述了
cubemx lwip,单片机,stm32,c语言,物联网
cubemx lwip,单片机,stm32,c语言,物联网

3、配置"Checksum"选项卡

cubemx lwip,单片机,stm32,c语言,物联网

五、生成工程下载并ping通

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

生成工程并使用MDK打开工程,在usart.c文件中添加串口的重定向
cubemx lwip,单片机,stm32,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硬件复位代码

cubemx lwip,单片机,stm32,c语言,物联网

		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选项

这一步很重要,千万不要落下!!!
cubemx lwip,单片机,stm32,c语言,物联网

好啦,到这里如果不需要AC6编译的极快速度,就已经可以编译并下载工程到开发板并ping通了
cubemx lwip,单片机,stm32,c语言,物联网

六、AC6编译设置

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

cubemx lwip,单片机,stm32,c语言,物联网

cubemx lwip,单片机,stm32,c语言,物联网

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

cubemx lwip,单片机,stm32,c语言,物联网
这两个文件没有的可以自行去FREERTOS官网下载源码,或者去野火或者正点原子的学习资料中都能找到FREERTOS源码文件

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

cubemx lwip,单片机,stm32,c语言,物联网
注意:这里一个比较坑的点就是,每次用cubemx重新生成工程之后,都要重复上述两步的操作,十分麻烦

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

cubemx lwip,单片机,stm32,c语言,物联网
cubemx lwip,单片机,stm32,c语言,物联网文章来源地址https://www.toymoban.com/news/detail-660386.html

到了这里,关于CubeMX配置ETH+LWIP+FreeRTOS+AC6编译新手详细教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Keil】CubeMX配置的FreeRTOS利用V6编译出错

    当使用CubeMX生成带有FreeRTOS的工程时,由于Use default compiler version 5编译器编译时间过于漫长,我们选择使用编译速度更快的Use default compiler version 6,但是更改之后再次编译会出现很多错误。  在Target一栏的ARM Compiler:选择 Use default compiler version 6; 并修改c/cpp编译方式。 CubeMX生

    2024年02月13日
    浏览(26)
  • STM32H723+Lwip+ETH+CUBE 完整配置(排了巨多坑!)

    因为H723ZET6是ST目前最新的芯片,对于这个芯片的LWIP配置,官方库极其不友好,而且贼多BUG,踩了好久的坑,历经诸多苦难,终于能够正常PING通和进行TCP/UDP通讯了。而且在国内基本上找不到H723ZET6的LWIP配置教程,所以必须记录一下。 开发环境: (一)常规配置,RCC和SYS RC

    2024年02月01日
    浏览(45)
  • MDK AC5和AC6是什么?在KEIL5中添加和选择ARMCC版本

    看视频有UP主提到“AC5”“AC6”这样的词,一开始有些不理解,原来他说的是ARMCC版本。 keil自带的是ARMCC5,由于ARMCC5已经停止维护了,很多开发者会选择ARMCC6。 在维护公司“成年往事”项目可能就会遇到新KEIL+旧版本编译器的需求。 到ARM官网下载所需版本的编译器 安装编译

    2024年02月04日
    浏览(71)
  • 【LWIP】(补充)STM32H743(M7内核)CubeMX配置LWIP并ping通

    之前我写了一个用CubeMX配置LWIP以太网通讯的博客: 【LWIP】stm32用CubeMX配置LwIP+Ping+TCPclient+TCPserver发送信息到PC(操作部分) 当时用的是F207、F407加上LAN8720、DP83848做了测试,效果都是很好的。但是当我第一次在STM32H743的时候突然傻眼了,H743用CubeMX配置以太网方法与其他内核的

    2024年02月11日
    浏览(33)
  • 【LWIP】stm32用CubeMX(6.4版)配置LwIP+Ping+TCPclient+TCPserver发送信息到PC(操作部分)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 这是我写的第一篇博客,欢迎大家给点鼓励和提出建议! 本人由于理想和爱好,辞去土木工作,于不到一个月前入职某科技公司开始从事嵌入式,专业能力和刚毕业的大学生一样都是很薄弱的。然后被

    2024年02月03日
    浏览(27)
  • 【物联网学习笔记】CubeMx+STM32F407ZGT6+LWIP最最最基础配置

    使用正点原子探索者开发板 板载芯片:STM32F407ZGT6 PHY芯片:LAN8720 LWIP版本:2.1.2 本次目标:先ping通开发板再说! 修订: · 2024.4.23经评论区反馈又重新下载6.10版本CubeMX,发现确实没有Advanced Parameters,目前使用6.6.1存在,如有需要可以改成这个版本。 更改引脚 在ethernetif.c中找

    2024年04月27日
    浏览(70)
  • STM32cubemx对FreeRTOS的适配(工程模板配置)

    本篇文章将带大家使用STM32cubemx对FreeRTOS进行工程模板的配置。 1.开始工程的创建: 2.芯片型号选择: 3.修改时钟为TIM8: 在FreeRTOS中SYSTICK需要为FreeRTOS提供心跳,故这里选择TIM8替换SYNTICK。 4.配置RCC: 5.配置FreeRTOS: 6.开启串口方便调试和观察: 7.工程路径及编译器选择等:

    2024年02月07日
    浏览(49)
  • 【stm32f4 C++与C混合开发】建立keil5的ARM Compiler 6(AC6)标准库开发工程

    一:请先确保keil5的版本为5.30版本以上,笔者这里是5.36版本: 二:F4标准库的pack包本版是2.9.0以上,笔者这里是2.15版本: 上述资源可在https://zhuanlan.zhihu.com/p/262507061找到 提示:本工程创建用例基于正点原子的F407标准库例程 工程如下图所示: 把工程拷贝一份新工程到纯英文

    2024年02月15日
    浏览(116)
  • 基于STM32CubeMx配置FreeRtos以及USB虚拟串口步骤详解

       Debug:推荐选择 Serial Wire (方便使用STLink打断点在线调试) 中间两项默认Disable就好 TimeBase Source:若需要配置FreeRtos则不能选择SysTick,随机选择一个TIM定时器即可,这里我选择TIM1定时器。 (解释:裸机的时钟源默认是SysTick,但是开启FreeRtos后,FreeRtos会占用SysTick,用于任

    2024年02月05日
    浏览(69)
  • STM32F4-ETH通信(lwip)——学习笔记

    一、关键知识点: 1、国际标准组织将整个以太网通信结构制定了 OSI 模型,总共分层七个层,分别 为应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层,每个层功能不同,通信 中各司其职,整个模型包括硬件和软件定义。OSI 模型是理想分层,一般的网络系

    2024年02月03日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包