打印
[应用相关]

CubeMX+STM32+SD+DMA+FATFS文件写入错误的解决

[复制链接]
641|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
AC, CubeMX, DM, ST, mx, sd
环境:

CubeMX(5.2.1)

HAL库(1.15.0)

STM32F765IIK(主频180MHz,关闭Cache)

SDMMC2+DMA

FATFS(R0.12c)


测试程序:
void sdcard_test_task(void *p) {
    static FATFS fs;
    FIL fil;
    uint32_t bw;
    const char *w = "1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234\r\n"
                    "1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234\r\n"
                    "1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234\r\n"
                    "1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234\r\n"
                    "1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234\r\n"
                    "1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234\r\n"
                    "1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234\r\n"
                    "1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234\r\n"
                    "1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234_1234\r\n";

    if (f_mount(&fs, "0:", 1)) {
        __nop();
        return;
    }

    while (1) {
        if (f_open(&fil, "ggg.txt", FA_OPEN_ALWAYS | FA_WRITE) == FR_OK) {
            f_lseek(&fil, f_size(&fil));
            f_write(&fil, w, strlen(w), &bw);
            f_close(&fil);
        } else {
            __nop();
        }

        HAL_Delay(100);
    }
}




使用特权

评论回复
沙发
很过分好的suj|  楼主 | 2022-2-27 23:11 | 只看该作者
问题:
程序运行一段时间后f_open一直返回FR_LOCKED错误

使用特权

评论回复
板凳
很过分好的suj|  楼主 | 2022-2-27 23:12 | 只看该作者
解决:
重新打开CubeMX,把FATFS的这栏选成Enable即可

使用特权

评论回复
地板
很过分好的suj|  楼主 | 2022-2-27 23:29 | 只看该作者
其他:
这个版本的CubeMX和HAL库使用SD卡必须打开DMA
产生TXUNDERR错误:

使用特权

评论回复
5
很过分好的suj|  楼主 | 2022-2-27 23:31 | 只看该作者

使用特权

评论回复
6
很过分好的suj|  楼主 | 2022-2-27 23:33 | 只看该作者
解决办法是打开I,DCache

别忘了栈可能要调大
我在STM32F429I-DISCOVERY这个板子上也试过用CubeMX(5.4.0)生成的代码(HAL库V1.24.1)调试SD卡,也遇到了类似的问题。具体是SD卡可以写但不能读,读出错的原因是SDIO_FLAG_RXOVERR,解决办法是把HAL_SD_ConfigWideBusOperation(&hsd, SDIO_BUS_WIDE_4B)中的SDIO_BUS_WIDE_4B改成SDIO_BUS_WIDE_1B

使用特权

评论回复
7
nomomy| | 2022-11-17 22:28 | 只看该作者
没有移植fatfs吗?              

使用特权

评论回复
8
ingramward| | 2022-11-24 15:10 | 只看该作者
底层I/O有问题。      

使用特权

评论回复
9
周半梅| | 2024-11-4 09:19 | 只看该作者

高频变压器磁芯利用率高(与单端电路相比)、电源电压利用率高(与后面要叙述的半桥电路相比)、输出功率大、两管基极均为低电平,驱动电路简单。

使用特权

评论回复
10
Pulitzer| | 2024-11-4 10:22 | 只看该作者

静态测试是通过使用直流电压表和负载电流计来分别测试电源的输出电压和输出电流

使用特权

评论回复
11
童雨竹| | 2024-11-4 12:18 | 只看该作者

甚至会造成模块电源的损坏

使用特权

评论回复
12
Wordsworth| | 2024-11-4 13:21 | 只看该作者

为了抑制共模干扰

使用特权

评论回复
13
Clyde011| | 2024-11-4 14:24 | 只看该作者

因此以更高的速度使用重型铣削钻头。

使用特权

评论回复
14
公羊子丹| | 2024-11-4 15:17 | 只看该作者

小型电子设备

使用特权

评论回复
15
万图| | 2024-11-4 16:20 | 只看该作者

共模电感有时候又叫共模扼流圈

使用特权

评论回复
16
Uriah| | 2024-11-4 17:23 | 只看该作者

电镀半孔可用于标准和高级PCB设计。

使用特权

评论回复
17
帛灿灿| | 2024-11-4 19:19 | 只看该作者

共模电感对交流电流起着阻碍的作用

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

62

帖子

0

粉丝