硬汉嵌入式论坛

 找回密码
 立即注册
查看: 683|回复: 3
收起左侧

[USB] usb读写问题

[复制链接]

4

主题

6

回帖

18

积分

新手上路

积分
18
发表于 2024-5-27 13:55:11 | 显示全部楼层 |阅读模式
想问问大佬们就是我的电路板在U盘插上去的时候会写文件进去,之后就不写了,我想实现把U盘插上去一直写,或者隔一段时间再写

我的usb状态代码是这样的,我应该怎么改才能让他一直写啊

void UsbTest(void)
{
        switch(Appli_state)
        {
                case APPLICATION_READY:
                                MSC_Application();
                                Appli_state = APPLICATION_DISCONNECT;
                                break;
               
                case APPLICATION_DISCONNECT:
                                f_mount(NULL, (const TCHAR*)"",0);
                                break;
               
                default:
                                break;
        }
}

这个 UsbTest()调用在main函数里面的while循环,MSC_Application函数是这样写的





static void MSC_Application(void) {
        FRESULT res;
       
        uint32_t byteswritten;  //file write/read counts
        char TimeStr[20];
        char dateStr[20];
       
        RTC_TimeTypeDef time;
        RTC_DateTypeDef date;       
       
  // 获取当前时间
        HAL_RTC_GetTime(&hrtc, &time, RTC_FORMAT_BIN);
        HAL_RTC_GetDate(&hrtc, &date, RTC_FORMAT_BIN);
       
        sprintf(TimeStr,"%02d-%02d-%02d-%02d-%02d-%02d",
                                                date.Year,
            date.Month,
            date.Date,
                                                time.Hours,
                                                time.Minutes,
                                                time.Seconds);       
        res = f_mount(&USBHFatFS,(const TCHAR*)USBHPath,1);//挂载U盘
       
        if(res != FR_OK)
                {//挂载失败
                        Error_Handler();
                        printf("U盘挂载失败!!!\r\n");
                }
                else
                {
                       
                                strcpy(filename, TimeStr);       
                                strcat(filename, ".csv"); // 以时间为名的文件创建
                                res=f_open(&USBHFile,filename,FA_CREATE_ALWAYS | FA_WRITE);//创建文件
                       
                if(res != FR_OK)
                        {
                                Error_Handler();
                                printf("创建文件失败!!!\r\n");
                        }       
                        else
                        {
                               
                                res= f_lseek(&USBHFile,f_size(&USBHFile));   
                               
                                res = f_write(&USBHFile,"日期,当前时间,堆电压,堆电流\n", sizeof("日期,当前时间,堆电压,堆电流\n"), &byteswritten);
                       
                        if(res != FR_OK)
                                {
                                        Error_Handler();
                                        printf(" write file error : %d\r\n",res);                   
                                }
                               
                                res =f_close(&USBHFile);

//                                f_mount(NULL, USBHPath, 0);///* 卸载文件系统*/

                }       
        }                       
}

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115490
QQ
发表于 2024-5-28 07:36:20 | 显示全部楼层
识别出来,考虑仅挂载一次

res = f_mount(&USBHFatFS,(const TCHAR*)USBHPath,1);//挂载U盘

不要一直重复的挂载和卸载,看看是不是好用些。
回复

使用道具 举报

4

主题

6

回帖

18

积分

新手上路

积分
18
 楼主| 发表于 2024-5-28 14:26:33 | 显示全部楼层
eric2013 发表于 2024-5-28 07:36
识别出来,考虑仅挂载一次

res = f_mount(&USBHFatFS,(const TCHAR*)USBHPath,1);//挂载U盘

我这样试了只挂载一次,但是还是不能一直写,还是只能在插入那一刻把数据写入U盘
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115490
QQ
发表于 2024-5-29 08:56:23 | 显示全部楼层
XuMouey199 发表于 2024-5-28 14:26
我这样试了只挂载一次,但是还是不能一直写,还是只能在插入那一刻把数据写入U盘

有个USBH Proc函数要一直调用,你的大循环里面是不是没有调用。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-4-29 09:21 , Processed in 0.239211 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表