最近体验了一下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(使用前将#替换为@)