備注:RT_Thread 版本為V4.0.2, 使用芯片型號為STM32F407VGT6,基于官方例程中stm32f407_st_discovery例程實作,
目錄
- 第一部分(片內FLASH)
- 一、Kconfig配置
- 二、menuconfig配置
- 三、CubMX引腳配置
- 四、工程內部配置
- 第二部分(片外FLASH W2Q128)
- 一、menuconfig配置
- 二、CubeMx配置
- 三、工程內部配置
第一部分(片內FLASH)
一、Kconfig配置
因為FAL需要Flash支持,所以要添加如下代碼,到board下的kconfig中
menuconfig BSP_USING_ON_CHIP_FLASH
bool "Enable on-chip FLASH"
default n

二、menuconfig配置
在ENV中進入menuconfig配置界面

1、進入 → Hardware Drivers Config → On-chip Peripheral Drivers選中Enable on-chip FLASH

2、進入RT-Thread online packages → system packages選中 fal: Flash Abstraction Layer implement. Manage flash device and partition. —>

3、進入 fal: Flash Abstraction Layer implement. Manage flash device and partition.中配置版本為最新版本

4、保存配置后退出并生成新工程(我設定ENV工具退出后自動生成模式,如未設定ENV工具則手動生成工程即可,ENV工具使用配置鏈接.)

三、CubMX引腳配置
在打開工程之前還有一步需要配置,即配置相關引腳,官方工程默認的串口USART1使用的是PB6,PB7根據自己電路板更改為適合自己使用的引腳,更改方法為進入stm32f407-st-discovery\board\CubeMX_Config,打開CubeMX配置,更改PA9,PA10(我的板子)為串口引腳,然后點擊GENERATE CODE等待完成即可,注意:Cube生成的工程并不是我們要用的工程,我們只呼叫其生成的底層庫,
官方默認配置:

更改后:

四、工程內部配置
1、打開project工程,并對target進行配置根據自己所用晶振進行修改:

選中圖中選項可以F12跳到定義:

添加porting檔案夾到工程,其包含fal_cfg.h,為fal組態檔其在stm32f407-st-discovery\packages\fal-v0.5.0\samples檔案夾下:

2、對fal_cfg.h檔案進行適配修改
在fal_cfg.h中定義內部FLASH結束地址:

修改 FAL_FLASH_DEV_TABLE 只保留片內flash引數:

3、對drv_flash_f4.c進行適配修改
注釋掉drv_flash_f4.c中關于具體頁讀寫相關函式(若想要細分之后根據自己FLASH具體情況進行添加):

4、添加官方例程,并進行適配性修改
官方例程所在位置:

添加例程到程式中:

洗掉多于程式(只保留圖中程式),對其進行修改:

5、最后添加fal_init()進行初始化,并編譯工程,下載到芯片
初始化fal_init():

下載后提示磁區資訊:

第二部分(片外FLASH W2Q128)
在上面基礎上進行的增加修改,
一、menuconfig配置
1、進入→ RT-Thread Components → Device Drivers配置SPI總線使能

2、進入 online packages → system packages → fal: Flash Abstraction Layer implement. Manage flash device and partition.使能SFUD設備并更改設備名

3、進入→ Hardware Drivers Config → On-chip Peripheral Drivers使能SPI總線

4、進入Hardware Drivers Config → On-chip Peripheral Drivers → Enable SPI BUS使能SPI1總線

5、保存配置后退出并生成新工程
二、CubeMx配置
1、更改PB3/PB4/PB5為SPI1的SCK/MISO/MOSI引腳(根據自己板子更改合適引腳)

2、設定PB3/PB4/PB5引腳輸出速度為非常高(這是一個坑,官方默認是低則會導致初始化外部flash失敗)并重新生成工程

三、工程內部配置
1、按第一部分四中第1步對工程target進行初步配置
2、修改fal_cfg.h(在第一部分基礎上進行的修改)

3、添加官方例程并進行適配性修改
官方例程所在位置:

添加到工程中:

添加程式將設備掛載到SPI總線上,并將其添加到自動初始化串列:

// 注冊 spi 設備
static int rt_hw_spi_flash_init(void)
{
int err;
__HAL_RCC_GPIOB_CLK_ENABLE();
rt_hw_spi_device_attach("spi1", "spi10", GPIOB, GPIO_PIN_0);
if (RT_NULL == rt_sfud_flash_probe(FAL_USING_NOR_FLASH_DEV_NAME, "spi10"))
{
return -RT_ERROR;
};
return RT_EOK;
}
INIT_COMPONENT_EXPORT(rt_hw_spi_flash_init);
上述函式中rt_hw_spi_device_attach實作了spi10設備的注冊,即將spi10掛載到spi1總線上,同時我們可以通過對spi10這個名字訪問W25Q16設備,
rt_sfud_flash_probe是必須的,通過讀取sfud資訊,知道了它是一個spi flash設備,它的容量,擦寫大小等,并將W25Q16設備的決議為塊設備(Block Device),
4、最后編譯工程并下載到芯片

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/194354.html
標籤:其他
上一篇:緊急避坑!stm32cube+freertos+fatfs掛載正常, read等其他操作都回傳錯誤3 not ready
