完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
硬件说明:正点原子探索者stm32f407,板载SPI-FLASH W25Q128
系统说明:RT-Thread 3.1.2(以上的其他版本也可以) 在rt-thread-v3.1.2rt-threadbspstm32stm32f407-atk-explorer下,打开env配置工具, 第一步:进入Hardware Driver Config--->Onboard Peripheral Drivers开启SPI FLASH 第二步:进入Hardware Driver Config--->on-chip Peripheral Drivers开启SPI BUS 第三步:进入RT-Thread Components--->Device virtual file system开启elm-chan fatfs 第四步:配置elm-chan fatfs 第五步:保存退出,使用pkgs --update更新代码 然后使用scons --target=mdk5生成Keil mdk5工程文件 编译成功后,打开工程,编译代码,应该是正常编译,没有错误的。 然后我们修改下main.c文件 加入挂载文件系统的代码: void spiflash_test(void){ rt_device_t dev; dev = rt_device_find("W25Q128"); RT_ASSERT(dev != RT_NULL); if (dev != RT_NULL) { /* Filesystem Initialization */#if defined(RT_USING_DFS) && defined(RT_USING_DFS_ELMFAT) /* mount sd card fat partition 1 as root directory */ //需要格式化完后才可以 if (dfs_mount("W25Q128", "/", "elm", 0, 0) == 0) { rt_kprintf("File System initialized!n"); } else { rt_kprintf("File System initialzation failed!n"); }#endif /* RT_USING_DFS && RT_USING_DFS_ELMFAT */ }} 然后在main函数中调用即可 int main(void){ int count = 1; /* set LED0 pin mode to output */ rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT); spiflash_test();//测试文件系统代码 while (count++) { rt_pin_write(LED0_PIN, PIN_HIGH); rt_thread_mdelay(500); rt_pin_write(LED0_PIN, PIN_LOW); rt_thread_mdelay(500); } return RT_EOK;} 编译后,烧录程序到开发板中。 串口工具应该会有以下提示: 需要注意的是,我这里之前已经格式化过SPI-FLASH了,所以这里就直接挂载成功了。如果是第一次烧写,这里应该是挂载失败的。 挂载失败的话,我们需要重新格式化一次FLASH。 在串口终端输入命令:mkfs -t elm W25Q128 然后输入reboot重启系统即可正常挂载 挂载好文件系统后,我们就可以使用文件系统相关的一些命令了。 RT_Thread的Finsh中支持以下跟文件系统相关的命令,这些命令对于熟悉Linux童鞋来说最简单不过了。 [tr]FinSH 命令描述[/tr]
关于在程序中应用文件系统相关操作: 1.读写文件示例,在该示例代码中,首先会使用 open() 函数创建一个文件 text.txt,并使用 write() 函数在文件中写入字符串 “RT-Thread Programmer!n”,然后关闭文件。再次使用 open() 函数打开 text.txt 文件,读出其中的内容并打印出来,最后关闭该文件。在main.c中增加函数 static void readwrite_sample(void){ int fd, size; char s[] = "RT-Thread Programmer!", buffer[80]; rt_kprintf("Write string %s to test.txt.n", s); /* 以创建和读写模式打开 /text.txt 文件,如果该文件不存在则创建该文件 */ fd = open("/text.txt", O_WRONLY | O_CREAT); if (fd>= 0) { write(fd, s, sizeof(s)); close(fd); rt_kprintf("Write done.n"); } /* 以只读模式打开 /text.txt 文件 */ fd = open("/text.txt", O_RDONLY); if (fd>= 0) { size = read(fd, buffer, sizeof(buffer)); close(fd); rt_kprintf("Read from file test.txt : %s n", buffer); if (size < 0) return ; } }/* 导出到 msh 命令列表中 */MSH_CMD_EXPORT(readwrite_sample, readwrite sample); 重新编译代码,烧写程序到开发板,然后串口工具输入以下命令: 2.更改文件名示例:程序会创建一个操作文件的函数 rename_sample() 并导出到 msh 命令列表。该函数会调用 rename() 函数, 将名为 text.txt 的文件改名为 text1.txt。在main.c中增加测试代码 static void rename_sample(void){ rt_kprintf("%s => %s", "/text.txt", "/text1.txt"); if (rename("/text.txt", "/text1.txt") < 0) rt_kprintf("[error!]n"); else rt_kprintf("[ok!]n");}/* 导出到 msh 命令列表中 */MSH_CMD_EXPORT(rename_sample, rename sample); 重新编译代码,烧写程序到开发板,然后串口工具输入以下命令: 3. 获取文件状态示例,程序会创建一个操作文件的函数 stat_sample() 并导出到 msh 命令列表。该函数会调用 stat() 函数获取 text1.txt 文件的文件大小信息。在main.c中增加示例代码如下所示: static void stat_sample(void){ int ret; struct stat buf; ret = stat("/text1.txt", &buf); if(ret == 0) rt_kprintf("text1.txt file size = %dn", buf.st_size); else rt_kprintf("text1.txt file not fonudn");}/* 导出到 msh 命令列表中 */MSH_CMD_EXPORT(stat_sample, show text.txt stat sample); 重新编译代码,烧写程序到开发板,然后串口工具输入以下命令: |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1602 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1536 浏览 1 评论
967 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
680 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1579 浏览 2 评论
1860浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
640浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
513浏览 3评论
527浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
500浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 11:38 , Processed in 0.645493 second(s), Total 49, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号