RT-Thread使用----OTA功能(1)----使能FAL

本文档详细介绍了如何在STM32F407ZG开发板上配置SPI接口、RCC时钟,并使用FAL框架设置SPI flash和分区信息。通过修改CubeMX、rtthread Studio、fal_cfg.h和main.c等文件,实现了SPI flash的挂载和初始化,确保了固件下载和验证的正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、新建基于F407ZG工程

开发板使用的是正点原子STM32F407ZG探索者。新建工程工打开CubeMx进行SPI接口、RCC时钟、USART1配置如下:

         生成代码,关闭Cubemx。必须关闭Cubemx,rtthread studio才会更新工程

2、配置使能rtt的SPI flash和FAL功能

  3、修改FLA分区信息

        编译报错,增加fal_cfg.h头文件路径。

        我们使用的是W25Q128芯片,芯片大小为65536*256bit即16M,对fal_flash_sfud_port.c文件进行更改。

struct fal_flash_dev nor_flash0 =
{
    .name       = FAL_USING_NOR_FLASH_DEV_NAME,
    .addr       = 0,
    .len        = 16 * 1024 * 1024,         //w25q128 大小为65536*256 = 16777216byte = 16M   128Mbit
    .blk_size   = 4096,
    .ops        = {init, read, write, erase},
    .write_gran = 1
};

        我们没有使能片上的flash,需要对分区表进行调整,修改fal_cfg.h文件如下。

/*
 * Copyright (c) 2006-2018, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2018-05-17     armink       the first version
 */

#ifndef _FAL_CFG_H_
#define _FAL_CFG_H_

#include <rtconfig.h>
#include <board.h>

#define NOR_FLASH_DEV_NAME             "W25Q128"

/* ===================== Flash device Configuration ========================= */
extern struct fal_flash_dev nor_flash0;

/* flash device table */
#define FAL_FLASH_DEV_TABLE                                          \
{                                                                    \
    &nor_flash0,                                                     \
}
/* ====================== Partition Configuration ========================== */
#ifdef FAL_PART_HAS_TABLE_CFG
/* partition table */
#define FAL_PART_TABLE                                                               \
{                                                                                    \
    {FAL_PART_MAGIC_WORD, "download",   NOR_FLASH_DEV_NAME,          0,  896*1024,   0}, \
    {FAL_PART_MAGIC_WORD, "factory",    NOR_FLASH_DEV_NAME,   896*1024,  896*1024,   0}, \
    {FAL_PART_MAGIC_WORD, "filesystem", NOR_FLASH_DEV_NAME,  2*896*1024, 14592*1024, 0}, \
}
#endif /* FAL_PART_HAS_TABLE_CFG */

#endif /* _FAL_CFG_H_ */

修改main.c文件,进行fal初始化

#include <rtthread.h>
#include "fal.h"

int main(void)
{
    fal_init();
    rt_kprintf("Hello RT-Thread!\r\n");
    while (1)
    {
        rt_thread_mdelay(1000);
    }
    return RT_EOK;
}

3、SPI接口使能及挂载

        修改board.h文件,使能SPI1接口

        增加drv_spiflash.c文件,用于SPI flash的挂载。

#include "board.h"
#include <rtthread.h>
#include <rtdevice.h>
#include "drv_spi.h"
#include "drv_config.h"
#include <string.h>
#include "spi_flash_sfud.h"

static int rt_hw_spi_flash_init(void)
{
    __HAL_RCC_GPIOF_CLK_ENABLE();
    rt_hw_spi_device_attach("spi1", "spi10", GPIOB, GPIO_PIN_14);

    if (RT_NULL == rt_sfud_flash_probe("W25Q128", "spi10"))
    {
        return -RT_ERROR;
    };
    return RT_EOK;
}
/* 导出到自动初始化 */
INIT_COMPONENT_EXPORT(rt_hw_spi_flash_init);

4、下载验证

 

        

### RT-Thread Studio 下载程序卡住解决方案 当遇到RT-Thread Studio下载程序时出现卡住的情况,可以尝试以下几个方面来排查并解决问题。 #### 检查环境配置 确保开发环境中所有必要的组件都已正确安装和配置。特别是`env.exe`文件的位置应位于指定路径 `D:\RT-ThreadStudio\platform\env_released\env` 中[^2]。任何缺失或错误的设置可能导致工具链无法正常工作,进而影响程序下载过程。 #### 验证硬件连接 使用可靠的开发板如探索者开发板验证物理连接是否稳固可靠[^3]。不稳定的电源供应或者松动的数据线接口都会引起传输中断等问题。此外,通过运行简单的测试案例(例如U盘读写操作),进一步排除目标设备本身存在的潜在缺陷。 #### 清理与优化项目代码 对于嵌入式系统的应用来说,资源管理至关重要。即使采用了双核架构并通过适当手段减少了存储空间需求,仍需定期审查源码结构,移除无用部分以及冗余调试语句,从而减轻编译后的二进制体积负担[^1]。这有助于提高烧录效率,并减少因内存溢出引发的各种异常状况。 #### 更新IDE版本 考虑到社区持续改进所带来的性能提升和技术支持完善度增加等因素,建议保持RT-Thread Studio处于最新状态。访问官方网站获取最新的发行版,并按照指引完成升级流程。有时开发者发布的补丁包能够有效修复之前版本中存在的特定场景下的兼容性难题。 #### 查阅官方文档和支持论坛 如果上述措施未能彻底根治该现象,则可参考更多来自权威渠道的信息来源寻求帮助。比如查阅RT-Thread官方手册中的疑难解答章节,或是向活跃的技术交流平台上求助——像RT-Thread俱乐部就有专门针对此类问题讨论的文章可供借鉴学习[^4]。 ```bash # 假设需要重新启动 IDE 来加载新配置 $ ./rtthread-studio & ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值