RT-Thread STM32F407VET6 HTTP_OTA升级(轩微胜开发板)
参考文章
RT Thread Studio 配置OTA实现远程程序下载(亲测成功,巨详细)
【RT-Thread】使用RT-Thread Studio 配置BootLoader及App实现OTA功能
一、硬件环境介绍
使用的开发板为轩微胜STM32F407VET6工程板,网卡芯片DP83848C,通讯接口RMII;外置Flash芯片W25Q64,通讯接口SPI



二、软件环境介绍
开发环境:RT-Thread Studio
软件版本:RT-Thread版本4.0.3
三、bootloader准备
RT-Thread提供了一个Bootloader生成网址 https://iot.rt-thread.com


四、bootloader下载
打开STM32 ST-LINK Utility,连接ST-LINK,注意下载地址为0x08000000

选择下载刚才所生成的bin文件,并下载;


下载完成后,通过调试串口看到如下打印信息,则表示烧录成功

五、新建RT-Therad工程

六、修改link.lds,将程序链接首地址改为0x08020000

七、打开CubMax,配置好需要使用的外设
这里主要使用的外设有 SPI2 和 ETH(引脚及接线可看文章前面原理图)
①、首先需开启时钟


②、开启SPI2(注意配置使能脚PE3)

③、开启ETH,通讯方式选择RMII

④、生成代码

八、修改board.c文件
①、配置SPI2
打开board.h,取消BSP_USING_SPI2的注释,并按照上方文字说明对相关部分进行修改

将void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)函数复制到board.c

在 stm32f4xx_hal_conf_bak.h 中取消 HAL_SPI_MODULE_ENABLED的注释

②、配置ETH
在board.h中取消 BSP_USING_ETH的注释与 PHY_USING_DP83848C 的注释,并按照上方文字说明对相关部分进行修改

复制 void HAL_ETH_MspInit(ETH_HandleTypeDef* heth) 函数至board.c中

取消 stm32f4xx_hal_conf_bak.h 中,HAL_ETH_MODULE_ENABLED的注释

在board.c中添加 void phy_reset(void) 函数
1 void phy_reset(void) 2 { 3 4 }
到这里board.c文件就修改完成了。
九、安装FAL
①、在RT-Thread Settings中添加FAL软件包

②、将samples/porting目录下的fal_cfg.h文件移动到 inc 目录下

修改fal_cfg.h文件内容如下:
1 #ifndef _FAL_CFG_H_ 2 #define _FAL_CFG_H_ 3 4 #include <rtconfig.h> 5 #include <board.h> 6 7 #define NOR_FLASH_DEV_NAME "W25Q64" 8 9 #define FLASH_SIZE_GRANULARITY_16K (4 * 16 * 1024) 10 #define FLASH_SIZE_GRANULARITY_64K (64 * 1024) 11 #define FLASH_SIZE_GRANULARITY_128K (7 * 128 * 1024) 12 13 #define STM32_FLASH_START_ADRESS_16K STM32_FLASH_START_ADRESS 14 #define STM32_FLASH_START_ADRESS_64K (STM32_FLASH_START_ADRESS_16K + FLASH_SIZE_GRANULARITY_16K) 15 #define STM32_FLASH_START_ADRESS_128K (STM32_FLASH_START_ADRESS_64K + FLASH_SIZE_GRANULARITY_64K) 16 /* ===================== Flash device Configuration ========================= */ 17 extern const struct fal_flash_dev stm32_onchip_flash_16k; 18 extern const struct fal_flash_dev stm32_onchip_flash_64k; 19 extern const struct fal_flash_dev stm32_onchip_flash_128k; 20 /* ===================== Flash device Configuration ========================= */ 21 extern const struct fal_flash_dev stm32f2_onchip_flash; 22 extern struct fal_flash_dev nor_flash0; 23 24 /* flash device table */ 25 #define FAL_FLASH_DEV_TABLE \ 26 { \ 27 &stm32_onchip_flash_16k, \ 28 &stm32_onchip_flash_64k, \ 29 &stm32_onchip_flash_128k, \ 30 &nor_flash0, \ 31 } 32 /* ====================== Partition Configuration ========================== */ 33 #ifdef FAL_PART_HAS_TABLE_CFG 34 /* partition table */ 35 #define FAL_PART_TABLE \ 36 { \ 37 {FAL_PART_MAGIC_WORD, "app" ,"onchip_flash_128k", 0, 768*1024, 0}, \ 38 {FAL_PART_MAGIC_WORD, "config_data","onchip_flash_128k",768*1024, 128*1024, 0}, \ 39 {FAL_PART_MAGIC_WORD, "download", FAL_USING_NOR_FLASH_DEV_NAME,0, 1024*1024, 0}, \ 40 } 41 #endif /* FAL_PART_HAS_TABLE_CFG */ 42 43 #endif /* _FAL_CFG_H_ */
此时可能会有报错 stm32f2_onchip_flash 未定义,需在fal_flash_sfud_port.c文件中添加如下内容:
const struct fal_flash_dev stm32f2_onchip_flash = { .name = "stm32_onchip", .addr = 0x08000000, .len = 1024*1024, .blk_size = 128*1024, .ops = {init, read, write, erase}, .write_gran = 8 };
在main函数中调用fal_init()

程序下载,出现如下调试信息,则说明fal安装成功

十、开启LWIP
在RT-Thread Settings中开启Lwip,并进行相应配置(注意需关闭“通过DHCP分配IP地址”)


此时通过电脑应能 ping通静态IP(注意电脑应设置与开发板在同一网段)

十一、安装 ota_downloader

对配置项进行修改,默认URL中的IP填写笔记本电脑的静态IP

此时编译会产生报错

可在board.h中添加 RT_USING_FAL 的宏消除报错

开启 agile_console ,并设置好相关配置

开启 agile_telent

十二、配置ymodem

至此,相关配置内容已全部完成
十三、程序下载
在资源管理器中找到 rt_ota_packaging_tool.exe


选择Debug目录下的.bin文件进行打包

打包成功后会在Debug目录下生成一个rtthread.rbl文件

十三、准备软件 XShell7 和 MyWebServer
配置好XShell ,并点击连接

如果连接正常的话,会显示如下画面

打开MyWebServer 选择服务目录为刚才rtthread.rbl所在文件目录

IP地址选择为本机IP ,端口号设置为与 ota_downloader配置中URL一致,点击保存按钮后相关配置才会生效;

点击“开始按钮”,开始帧听

在XShell中输入命令 http_ota

通过调试串口也可看到程序下载进度,程序升级完成后,单片机会自动重启

到这里,使用RT-Thread HTTP_OTA升级功能完成
本文来自博客园,作者:伽椰子真可爱,转载请注明原文链接:https://www.cnblogs.com/jiayezi/p/18039376

浙公网安备 33010602011771号