[STM32L5] 在 STM32L5 上使用 fopen 打开主机 PC 上的文件

[复制链接]
18|8
我在 STM32L5 微控制器上使用 fopen 函数打开一个二进制文件,但它总是返回 NULL 值。代码如下:

char filepath[256];
sprintf(filepath,"%s","C:\\fileBIN.bin");

FILE *file;
file = fopen(filepath,"rb");
if(file == NULL)
{
    printf("Error occurred opening file. \r\n");
}
else
{
    printf("File opened successfully. \r\n");
}

它总是返回 NULL 值,但路径确实存在且是正确的。问题出在哪里?

classroom 发表于 2026-9-21 11:42 | 显示全部楼层
核心问题在于:STM32L5 微控制器本身没有直接访问 PC 文件系统的能力,你的 fopen 是在 MCU 上运行的,而路径 C:\fileBIN.bin 是 PC 上的路径,两者不在同一个系统里。
cr315 发表于 2026-9-21 13:20 | 显示全部楼层
C 语言标准库中的 fopen 函数依赖于底层操作系统的文件系统接口。在 PC 上,操作系统帮你完成了从文件名到磁盘数据的映射;在 STM32 上,没有操作系统和文件系统,fopen 找不到可以调用的底层实现。
flycamelaaa 发表于 2026-9-21 14:10 | 显示全部楼层
有人可能会建议你使用 FatFS 之类的文件系统库。但 FatFS 是给 SD 卡、SPI Flash 这类物理存储介质用的,它管理的是 MCU 自己能直接访问的存储设备,而不是 PC 上的 C 盘。
duo点 发表于 2026-9-21 15:35 | 显示全部楼层
即使你用了半主机模式,像 ST 社区里有人指出的,这种方式的性能开销很大。如果你只是想读取一个 .bin 文件的内容,直接通过 UART 把文件内容发送给 MCU 是更直接的做法。
jcky001 发表于 2026-9-21 16:05 | 显示全部楼层
STM32CubeProgrammer 本身就可以通过 SWD 接口把二进制文件烧录到 MCU 的 Flash 中。如果你的目的是让 MCU 访问文件里的数据,可以考虑先把数据烧录到 MCU 的 Flash 或外部存储器,再用指针读取。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

208

主题

211

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0