启明欣欣STM32开发板 --- 运行LWIP (无RTOS)

2023-05-16

最近体验了一下CubeMX,发现真的是非常好用,里面使用了ST自家的HAL库,这应该是ST的策略,为了绑定客户…

本文讲述使用CubeMX生成LWIP的Keil工程并在启明欣欣板子上运行,不使用RTOS,同时会提到其中的一些坑和解决办法。

文章目录

    • 一 环境搭建
    • 二 使用CubeMX进行配置
      • 1. 配置SYS
      • 2. 配置RCC
      • 3. 设置ETH
      • 4. 设置LWIP
        • a. 设置Platform
        • b. 设置General Settings
      • 5. 设置时钟
      • 6. 配置工程
      • 7. 生成工程
    • 三 使用Keil工程
    • 四 小结


一 环境搭建

去ST官网下载CUBEMX,这个软件使用java运行环境,运行的时候很耗内存,我这里显示需要1个G的内存…

本人环境如下:

  • OS: Win10
  • CubeMX: 6.7.0
  • Keil: 5.35.0
  • CM4芯片:STM32F407ZGT6, 内存192KB,flash是1MB,频率最高168M Hz
  • 网卡芯片:DP83848
  • 下载器:ST-Link V2

二 使用CubeMX进行配置

打开CubeMX,在New Project下选择“从芯片开始”,点击“ACCESS TO MCU SELECTOR”,
在这里插入图片描述
中间会自动下载一些包,下载完成后会弹出新界面,然后在左上的搜索框里输入STM32F407ZGT6,
在这里插入图片描述
此时在中间的地方显示出芯片选项,
在这里插入图片描述

这点单击第一个,
在这里插入图片描述
然后点击右上角的Start Project来开始工程
在这里插入图片描述

1. 配置SYS

在工程界面里,首先修改SYS,位于System Core下,如下图,
在这里插入图片描述
Debug选择Serial Wire,因为调试器用的ST-LINK;Timebase Source选择TIM1,无rtos的时候也可以选择systick,其它定时器也可以

2. 配置RCC

点击RCC,在右侧的HSE里选择外部晶振,板子上的外部晶振是8M Hz
在这里插入图片描述

3. 设置ETH

在Connectivity下选择ETH,然后右侧Mode里选择RMII,因为板子就是按照RMII和网卡芯片进行连接的,
在这里插入图片描述
在Configuration栏里,点击Parameter Settings,里面的Rx Mode选择Polling Mode,默认配置也是这样
在这里插入图片描述
接着点击Advanced Parameters,选择DP83848_PHY_ADDRESS,因为网卡芯片是DP83848,
在这里插入图片描述
最后点击GPIO Settings,默认的IO选择中有三个是和板子不一样的,
在这里插入图片描述
板子上电路图如下,
在这里插入图片描述
可以看出ETH_TX_EN应该改为PG11,ETH_TXD0改为PG13,ETH_TXD1改为PG14

在最右侧的Pinout View里单机PG11,然后选择ETH_TX_EN
在这里插入图片描述
同理修改PG13和PG14,
在这里插入图片描述
选择完毕后可以直接把默认的配置覆盖掉。

改之后变成如下,
在这里插入图片描述

4. 设置LWIP

在Middleware里选择LWIP,
在这里插入图片描述
然后在右侧勾选Enabled,
在这里插入图片描述

a. 设置Platform

在Configuration栏里,点击Platform Settings,然后2个选择框里都选择DP83848,
在这里插入图片描述

b. 设置General Settings

点击General Settings,然后修改设置如下,
在这里插入图片描述
也就是关闭DHCP,因为本文使用网线直连,不使用路由器,如果使用路由器那么可以使用DHCP。关闭DHCP后,就需要手动设置其IP地址,修改为192.168.1.240

电脑这边,可以使用网线直接接在电脑的网口,然后修改电脑网卡的ip地址。本人感觉这样比较麻烦,而且有的电脑已经没有网口了,于是本人买了一个usb转网口的转换器,然后把转换器接到电脑上,最后设置转换器的的IP地址就可以了,
在这里插入图片描述
修改后地址如下,于是本机IP是192.168.1.68
在这里插入图片描述

5. 设置时钟

板子上的CM4芯片最高频率是168M Hz,点击Clock Configuration,左侧输入评率输入8,即外部晶振的频率,
在这里插入图片描述
HCLK里输入168,然后回车让软件自动配置,这样时钟就配置好了。

6. 配置工程

点击Project Manager,点击左侧的Project,然后修改如下,
在这里插入图片描述
堆栈大小都设置为16KB

点击Code Generator,根据需要进行选择,本人选择如下,这样会让工程变的独立,但是工程大小会变大
在这里插入图片描述

7. 生成工程

最后点击右上角的GENERATE CODE生成Keil 工程
在这里插入图片描述


三 使用Keil工程

生成的工程如下,打开MDK-ARM目录,
在这里插入图片描述
如下,然后打开工程,
在这里插入图片描述
打开后点击配置按钮进行配置,如下是Target栏,勾选Use MicroLIB,因为LWIP源码里会使用printf,如果不想使用MicroLIB,就需要自己添加文件让程序支持printf,这个网上可以搜一下。
在这里插入图片描述
然后点击Output,取消勾选Browse Information,这个可以大幅提高编译时间,只是在keil里无法查看函数定义,不过本人是使用VSCode来查看代码,就不需要这个Browse Information了。
在这里插入图片描述
最后打开main.c,在里面的while循环里添加MX_LWIP_Process(),如下,
在这里插入图片描述
这行代码是使用polling mode来处理网络报文。

最后编译并把程序下载到CM4里。

先用网线把板子和电脑连接在一起(根据介绍,网线要提前接上),下载完毕后按一下复位键,等待~3s后,使用ping进行测试,
在这里插入图片描述
成功!

小问题:在测试中发现这个板子有个问题,如果是断电重启,ping就会失效,但是上电后按一下复位键,ping就可以成功。电路图上显示,网卡芯片的复位脚和CM4的复位脚是连接在一起的,不知道是不是这个原因造成的。


四 小结

本文讲述如何使用CubeMX生成运行LWIP的Keil工程,并测试OK,顺道讲述了一些坑和对应办法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

启明欣欣STM32开发板 --- 运行LWIP (无RTOS) 的相关文章

  • TCP/IP (一) accept建立连接

    七层网络协议 三次握手 四次分手 xff0c 这些大家都比较熟知 xff0c 这里主要是带着一些问题来思考整个TCP IP流程 1 三次握手的具体流程是怎么样的 xff1f 2 socket编程中int listen int fd int
  • http 的认证模式

    周海汉 2006 7 11 ablozhou 64 gmail com SIP类似Http协议 其认证模式也一样 Http协议 xff08 RFC 2616 xff09 规定可以采用Base模式和摘要模式 xff08 Digest sche
  • Java Agent

    在 Java 字节码 一文中有提到 xff0c 使用 Java Agent 操控字节码 xff0c 本文将讨论 Java Agent xff0c 这是普通 Java 开发人员的真正的黑魔法 Java Agent 能够通过执行字节码的直接修改
  • 通过gitlab远程统计git代码量

    git的代码量大多数都是根据命令行统计 xff0c 或者根据第三方插件统计 但是都不满足我的需求 xff0c 因为我们代码都由gitlab管理 xff0c 于是想到了通过gitlab暴露出来的接口获取数据 第一步 xff0c 生成私钥 登录
  • Qt第二十二章:将控件放到另一个控件的后面或前面

    话不多说 xff1a 看图
  • 缓存行填充与@sun.misc.Contended注解

    1 缓存模型 CPU和主内存之间有好几层缓存 xff0c 因为与cpu的速度相比 xff0c 访问主内存的速度是非常慢的 如果频繁对同一个数据做运算 xff0c 每次都从内存中加载 xff0c 运算完之后再写回到主内存中 xff0c 将会严
  • ThreadLocal那点事

    目录 1 ThreadLocal原理 2 ThreadLocal内存泄漏 3 ThreadLocal最佳实践 4 FastThreadLocal原理 5 FastThreadLocal最佳实践 6 ThreadLocal与FastThrea
  • 关于雪花算法的设计与思考

    2017年的时候项目组在开发一款大区游戏 xff0c 由于之前demo阶段的玩家id都是单服生成的 xff0c 只能保证单进程中的唯一 xff0c 而无法保证在分布式服务器端的唯一性 随着项目的开发进展 xff0c 需要设计能保证在分布式的
  • java反射之Method的invoke方法实现

    在框架中经常会会用到method invoke 方法 xff0c 用来执行某个的对象的目标方法 以前写代码用到反射时 xff0c 总是获取先获取Method xff0c 然后传入对应的Class实例对象执行方法 然而前段时间研究invoke
  • A*寻路算法之解决路径多拐点问题

    1 问题描述 最近公司正在开发的游戏涉及到了寻路算法 xff0c 然后我从网上找了一份A 算法代码 xff0c 整理了一下写了一个A 算法基础实现 然而 xff0c 在真正实用时A 寻路时 xff0c 却发现了几个问题 xff1a 基础实现
  • 代理模式与委托模式的异同点

    在 设计模式之禅 xff08 第二版 xff09 中 xff0c 作者说 代理模式也叫做委托模式 xff0c 显然是认为代理模式和委托模式是毫无差别的 然而在实际开发中 xff0c 我们通常可以很明确的知道一个模式究竟是代理模式还是委托模式
  • TCP/IP编程之select函数详解

    前述 xff1a linux下的I O复用模型目前很多都已经不用select函数了 xff0c 而是用epoll xff0c 但是为什么还需要了解select编程呢 xff0c 其实是从两个方面考虑的 xff1a 一是为了通过select去
  • 堆栈的详细解释

    一 在c中分为这几个存储区 1 栈 由编译器自动分配释放 2 堆 一般由程序员分配释放 xff0c 若程序员不释放 xff0c 程序结束时可能由OS回收 3 全局区 xff08 静态区 xff09 xff0c 全局变量和静态变量的存储是放在
  • Gmapping、hector、Cartographer三种激光SLAM算法简单对比

    文章目录 一 Gmapping是基于粒子滤波的算法 二 Hector SLAM三 Cartographer 一 Gmapping是基于粒子滤波的算法 缺点 xff1a 严重依赖里程计 xff0c 无法适应无人机及地面不平坦的区域 xff0c
  • TCP连接建立过程

    TCP连接建立过程 浏览器访问网站 xff0c 通过域名解析找到ip地址后会与服务器端建立连接 其中TCP xff08 Transmission Control Protocol xff0c 传输控制协议 xff09 是一种面向连接的 可靠
  • 海康威视错误代码文档大全【完整版】

    简介 本文收录了海康各大设备错误码 xff0c 按ctrl 43 f查询 xff1b 包含网络通讯库错误码 阵列错误码 安全激活相关错误码 智能设备错误码 RTSP通讯库错误码 软解码库错误码 转封装库错误码 语音对讲库错误码 Qos流控库
  • lighttpd http响应报文(Response)增加安全头Referrer-Policy和X-Permitted-Cross-Domain-Policies方法

    X Permitted Cross Domain Policies和Referrer Policy说明 X Permitted Cross Domain Policies X Permitted Cross Domain Policies
  • ROS使用ARUCO识别二维码获取位置信息做定位使用

    使用ARUCO识别二维码获取位置信息 1 安装软件 cd catkin ws src git clone b kinetic devel https github com pal robotics aruco ros cd catkin m
  • Keil 编译时无法找到头文件解决

    Keil 编译时无法找到头文件解决方法 1 背景 Keil 编译的时候无法找到头文件 xff0c 搜了下相关问题及解决方法 xff0c 有介绍说是因为文件夹中有数字 xff0c 无法搜到头文件 xff0c 进行了更改 xff0c 还是找不到
  • 学习open62541 --- [71] Alarm and Condition

    本文讲述Alarm and Condition的用法 xff0c 主要以源码里提供的例子为基础进行讲解和演示 xff0c 即tutorial server alarms conditions c xff0c 该例子写的有点乱 xff0c 本

随机推荐

  • 学习open62541 ---[68] 使用Wireshark观察通信消息

    Wireshark是强大的网络协议分析工具 xff0c 而open62541也是基于socket的 xff0c 所以也可以用其来观察OPCUA通信消息 一 安装Wireshark 去https www wireshark org 去下载并安
  • UART、IIC、SPI、CAN通信的区别与应用

    文章目录 1 通信的基本知识1 1 数据通信的种类1 1 1 串行通信1 1 2 并行通信1 1 3 总结 1 2 数据通信的传输方向1 2 1 单工1 2 2 半双工1 2 3 全双工1 2 4 总结 1 3 数据通信的方式1 3 1 同
  • 学习open62541 --- [69] Client监测多个变量值

    有读者问Client如何监测多个变量值 xff0c 这篇文章给了提示 xff0c 但是没给例子 xff0c 本文给出详细例子 xff0c 使用的open62541版本是1 3 3 xff0c 运行环境debian10 5 一 准备Serve
  • 学习CANopen --- [6] 自定义对象字典

    在前面几篇文章中 xff0c 我们运行例子时都需要一个eds文件 xff0c 比较麻烦 xff0c 本文讲述如何在代码中自定义对象字典 xff0c 只添加自己需要的OD项 如果是作为master来使用 xff0c 还是比较方便的 自定义对象
  • 学习CANopen --- [7] 使用块(Block)下载

    对于一次传输超过4字节的情形 xff0c SDO可以使用Segment传输或者Block传输 xff0c Segment传输在第6篇文章中已经介绍 xff0c 本文讲解Block传输中的下载情况 一 与Segment传输的比较 相比于Seg
  • 学习open62541 --- [70] 深入理解变量监测

    本文深入探讨一下变量监测的用法和原理 一 累积传输 先前写的关于变量监测的文章 xff0c 都是设置一个采样时间 xff0c 然后有变化了就通知一下 xff0c 有时我们希望变化累积一段时间再一起传给client xff0c 这时如何设置呢
  • 学习CANopen --- [8] 多主机同时运行时的问题

    本文记录一下实际使用CANopen时开启多个主机遇到的问题 一 问题描述 本人在嵌入式设备上用Python CANopen库写一个SDO xff0c 由于数据比较多 xff0c 就使用了Segment download xff0c 大概需要
  • 学习CANopen --- [9] CAN总线的状态检查

    本文讲述如何判断CAN总线是否存在以及是否bus off xff0c 以vcan0进行讲解 xff0c vcan0是虚拟的CAN接口 xff0c 可以把它看做一个软件CAN适配器 xff08 区别于硬件CAN适配器 xff0c 如PeakC
  • 学习CANopen --- [10] 汽车外接OBD模块原理

    在某宝上搜索汽车OBD xff0c 可以发现很多卖OBD模块的 xff0c 通过接入OBD模块可以增加车子本身没有的功能 xff0c 如锁车升窗 xff0c 行车自动落锁和后视镜折叠等 xff0c 那么其实现原理是什么呢 xff1f 使用时
  • 学习open62541 --- [72] client删除subscription时的warning

    本文记录一个问题的理解过程 xff0c 试验条件 xff1a 使用open62541运行server使用asyncua运行clientclient会向server添加subscription xff0c 然后在断开连接前删除subscrip
  • 启明欣欣STM32开发板闪烁LED实验

    最近在咸鱼上买了一块启明欣欣的STM32板子 xff0c 准备在上面测试open62541和CANopen xff0c 到货后如下图 xff0c 找商家要了资料 xff0c 然后运行一个LED灯的实验来简单测试下板子 xff0c 本文记录一
  • Python fpdf2生成表格

    fpdf2库可以用来生成pdf文档 xff0c 该库是从fpdf库fork来的 xff0c 老库自2018年就不再更新维护了 xff0c fpdf2对用户更友好 xff0c api也更方便使用 一 fpdf2介绍 其网址是https pyf
  • Android动态分析工具-Inspeckage

    1 Inspeckage简介 Inspeckage是一个用来动态分析安卓app的xposed模块 Inspeckage对动态分析很多常用的功能进行了汇总并且内建一个webserver 整个分析操作可以在友好的界面环境中进行 2 下载地址 I
  • 行为树 --- [7] BehaviorTree.CPP 4.x版本的编译及使用

    根据BehaviorTree CPP的官方介绍 xff0c 3 x版本已经不再维护了 xff0c 建议使用4 x版本 xff0c 4 x版本和3 x版本的区别可以看这里 https www behaviortree dev migratio
  • OPC UA性能评估

    本文是对这篇论文的总结 xff0c 该文章从性能和资源使用方面比较了工业4 0的4个主要协议 xff1a OPC UA xff0c DDS xff0c ROS和MQTT 这4个协议都是基于以太网 xff08 Ethernet based x
  • 学习open62541 --- [73] 数据源造成无法监测变量的问题解决

    本人最近遇到一个问题 xff1a 给一个变量添加数据源后 xff0c 使用监测项去监测变量变化 xff0c 如果采样时间为0 xff0c 会发现无法监测到变量的变化 本文讲述这种情况的发生原因以及解决办法 一 Server例子 首先准备se
  • 启明欣欣STM32开发板移植FreeRTOS

    承接这篇文章 xff0c 本篇讲述如何把FreeRTOS移植到启明欣欣STM32开发板里 xff0c 比较简单 xff0c 网上也有各种教程 xff0c 本文也是参考其它文章 xff0c 这里再记录一下 一 搭建基础工程 启明欣欣STM32
  • 学习open62541 --- [74] 软链接的妙用

    一 原理 在同一台电脑里 xff0c 可能会有多个工程同时用到open62541 xff0c 比较简单的办法是每个工程都拷贝一份open62541源码 xff0c 但是这样会造成空间浪费 xff0c 而且open62541的源码包本身也不小
  • 学习open62541 --- [75] 生成namespace文件的简便方法

    在之前的文章中 xff0c 生成namespace文件是使用open62541提供的nodeset compiler py xff0c 根据nodeset compiler rst xff08 位于open62541 doc xff09 里
  • 启明欣欣STM32开发板 --- 运行LWIP (无RTOS)

    最近体验了一下CubeMX xff0c 发现真的是非常好用 xff0c 里面使用了ST自家的HAL库 xff0c 这应该是ST的策略 xff0c 为了绑定客户 本文讲述使用CubeMX生成LWIP的Keil工程并在启明欣欣板子上运行 xff