STM32
直播中

尚文清

7年用户 1610经验值
私信 关注
[问答]

请问F4标准库如何实现USB MSC和FATFS SDIO功能?

  如题,本人在STM32F407ZGT6跑通了正点原子的USB SD卡模拟U盘功能,和移植了官方例程跑通了FATFS在SD卡上建立文件系统管理的功能。
请问现在如何将二者结合到一起。使之实现如下功能,单片机通过SPI、I2C等外设采集数据并定时写入到SD卡当中,然后当单片机接收到某一指令后,停止写入。并通过USB链接电脑读取创建写入的文件。使之达成无需弹出SD并使用读卡器读取的功能。

回帖(1)

477289

2024-3-14 16:39:24
要实现将USB MSC和FATFS SDIO功能结合,可以按照以下步骤进行:

1. 首先,确保USB MSC功能和FATFS SDIO功能分别在单片机上正常工作。
2. 在代码中添加一个标志位,用于表示是否停止写入SD卡的状态。
3. 在数据采集的代码中,添加判断标志位的逻辑,如果标志位为停止写入状态,则跳过写入SD卡的部分,否则继续写入SD卡。
4. 在获取停止写入指令的代码中,当接收到指令后,将标志位设置为停止写入状态。
5. 在USB MSC的处理逻辑中,使用FATFS库读取SD卡上的文件,使得电脑能够连接USB并读取创建的文件。

以下是一个简单的示例代码:

```c
// 定义标志位
volatile int stop_writing = 0;

// 数据采集函数
void data_collection()
{
    while(1)
    {
        // 采集数据并进行处理
        
        // 写入SD卡
        if(!stop_writing)
        {
            // 写入SD卡的代码
            ...
        }
    }
}

// 停止写入指令处理函数
void stop_writing_command_handler()
{
    // 处理停止写入指令的代码
    ...
   
    // 设置标志位为停止写入状态
    stop_writing = 1;
}

// USB MSC处理函数
void usb_msc_handler()
{
    // 处理USB MSC的代码
    ...
   
    // 使用FATFS库读取SD卡上的文件
    ...
}
```

需要根据具体的代码环境和硬件配置做相应的调整和优化。同时,注意在不同的中断服务例程中对标志位的访问进行合适的保护,避免可能的竞态条件。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分