硬汉嵌入式论坛

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

[有问必答] freertos+fatfs+hostusb整不到一块

[复制链接]

2

主题

13

回帖

19

积分

新手上路

积分
19
发表于 2026-1-17 15:50:56 | 显示全部楼层 |阅读模式
谁有freertos+fatfs+hostusb的工程给分享一下。如果有可以用标准库做的更好。谢谢
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
121123
QQ
发表于 2026-1-17 17:33:07 | 显示全部楼层
供参考,有现成的例子

FreeRTOS操作系统教程发布,支持F103,F407和F429,配套145个例子,1200页教程(2023-01-30)
https://forum.anfulai.cn/forum.php?mod=viewthread&tid=17658
回复

使用道具 举报

2

主题

13

回帖

19

积分

新手上路

积分
19
 楼主| 发表于 2026-1-19 08:43:34 | 显示全部楼层
谢谢,看嵌入式论坛还是这边风景独好,一片兴兴向荣的新仙气象
回复

使用道具 举报

12

主题

64

回帖

100

积分

初级会员

积分
100
发表于 2026-1-19 09:44:13 | 显示全部楼层
本帖最后由 quanshimutou 于 2026-1-19 09:45 编辑

你可以看看这个
STM32CubeMX在freertos操作系统下驱动U盘_freertos usb host-CSDN博客
就是说,在CubeMX生成的FreeRTOS+USB的工程中,freertos默认任务初始化USB_HOST,创建一个USB的任务和消息队列,USB的任务等待消息队列,然后执行USB背景函数,你需要给这个消息队列发送消息,USB检测U盘状态就能运行。
[C] 纯文本查看 复制代码
void StartDefaultTask(void *argument){ // 默认任务
    MX_USB_HOST_Init();// 调用一次
    ......
}
void MX_USB_HOST_Init(void){
  /* Init host Library, add supported class and start the library. */
  USBH_Init(&hUsbHostFS, USBH_UserProcess, HOST_FS)// 初始化
  ......
  USBH_RegisterClass(&hUsbHostFS, USBH_MSC_CLASS) // 注册
  ......
  USBH_Start(&hUsbHostFS) // 启动
  ......
}
// 里面的USBH_Init()函数会创建一个信号队列,创建一个任务
USBH_Init(&hUsbHostFS, USBH_UserProcess, HOST_FS){
// 创建一个信号队列,创建一个任务
#if (USBH_USE_OS == 1U)
  /* Create USB Host Queue */
  phost->os_event = osMessageQueueNew(MSGQUEUE_OBJECTS, sizeof(uint32_t), NULL);

  /* Create USB Host Task */
  USBH_Thread_Atrr.name = "USBH_Queue";
  USBH_Thread_Atrr.stack_size = USBH_PROCESS_STACK_SIZE;
  USBH_Thread_Atrr.priority = USBH_PROCESS_PRIO;
  phost->thread = osThreadNew(USBH_Process_OS, phost, &USBH_Thread_Atrr);
  // 任务的函数是 USBH_Process_OS
#endif /* (USBH_USE_OS == 1U) */
}
// 任务函数
static void USBH_Process_OS(void *argument) {
  osStatus_t status;
  for (;;) { // 等消息,然后执行USB背景任务
    status = osMessageQueueGet(((USBH_HandleTypeDef *)argument)->os_event,
                               &((USBH_HandleTypeDef *)argument)->os_msg, NULL, osWaitForever);
    if (status == osOK) {
      USBH_Process((USBH_HandleTypeDef *)argument); // USB背景任务
    }
  }
}

所以,freertos建立的任务,不断的发送消息给这个任务,启动执行"USBH_Process"后台处理函数。
[C] 纯文本查看 复制代码
extern USBH_HandleTypeDef hUsbHostFS;
uint32_t msg = 0;
osMessageQueuePut(hUsbHostFS.os_event, &msg, 1, 10);



回复

使用道具 举报

2

主题

13

回帖

19

积分

新手上路

积分
19
 楼主| 发表于 2026-1-19 16:28:22 | 显示全部楼层
不知道怎么回事,不能操作u盘,好奇怪。我只是把keyinit以下的屏的硬件初始化都删了,试了不删它们也是这样。
捕获.PNG
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
121123
QQ
发表于 2026-1-20 00:54:49 | 显示全部楼层
wdmvw 发表于 2026-1-19 16:28
不知道怎么回事,不能操作u盘,好奇怪。我只是把keyinit以下的屏的硬件初始化都删了,试了不删它们也是这样 ...

USB枚举正常不
回复

使用道具 举报

2

主题

13

回帖

19

积分

新手上路

积分
19
 楼主| 发表于 2026-1-20 09:35:12 | 显示全部楼层
谢谢汉哥答复。我查看你的初始化代码,发现跟我哪块可以usb的板子很不同,好在都是std库的代码,觉得修改一下初始化代码就应该会成功,可是修改后依然不行。。。。
捕获.PNG
回复

使用道具 举报

3

主题

26

回帖

35

积分

新手上路

积分
35
发表于 2026-1-20 10:20:53 | 显示全部楼层
为什么  我从网上下的工程,下载到我的  板子上,下载完  SWD就不好使了?
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
121123
QQ
发表于 2026-1-20 11:09:04 | 显示全部楼层
sfd123 发表于 2026-1-20 10:20
为什么  我从网上下的工程,下载到我的  板子上,下载完  SWD就不好使了?

是不是下载例子时钟和你板子的主频时钟不一致,也就是HSE_VALUE和你板子实际晶振大小不一致,如果不一致会有这个问题,在MDK Option设置under reset,hw pin下载
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
121123
QQ
发表于 2026-1-20 11:10:41 | 显示全部楼层
wdmvw 发表于 2026-1-20 09:35
谢谢汉哥答复。我查看你的初始化代码,发现跟我哪块可以usb的板子很不同,好在都是std库的代码,觉得修改一 ...

我们这个例子是用的USB HS,你仅仅配置修改引脚不行。你的这个应该是USB FS。

F4系列有两个USB外设。
回复

使用道具 举报

2

主题

13

回帖

19

积分

新手上路

积分
19
 楼主| 发表于 2026-1-20 19:53:21 | 显示全部楼层
汗哥,程序不好遛。我先裸机玩起,按键和灯,初始化滴答定时器就进hardfault
捕获.PNG
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
121123
QQ
发表于 2026-1-21 10:23:45 | 显示全部楼层
wdmvw 发表于 2026-1-20 19:53
汗哥,程序不好遛。我先裸机玩起,按键和灯,初始化滴答定时器就进hardfault

把bsp.c文件里面bsp key scan函数注释掉试试,你的板子没有对应按键,要先注释掉
回复

使用道具 举报

2

主题

13

回帖

19

积分

新手上路

积分
19
 楼主| 发表于 2026-1-21 14:40:23 | 显示全部楼层
汉哥或者quanshimutou大神。汉哥的程序好是好,按键好,os+usb也是好东西,简单一点,能否直接给发一个工程模板,驱动u盘读写文件。用的是pa11,pa12 ,只要使用到otg_usb_fs就行了。谢谢
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
121123
QQ
发表于 2026-1-22 01:03:38 | 显示全部楼层
wdmvw 发表于 2026-1-21 14:40
汉哥或者quanshimutou大神。汉哥的程序好是好,按键好,os+usb也是好东西,简单一点,能否直接给发一个工程 ...

我们的板子,这两两个引脚被用于USB Device了,还有一组USB HS是做USB Host了。

不过早期有个PA11和PA12外挂U盘的例子,此贴

【原创开源应用第5期】基于RL-USB+RL-FlashFS的外挂U盘解决方案
https://forum.anfulai.cn/forum.p ... 9202&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

2

主题

13

回帖

19

积分

新手上路

积分
19
 楼主| 发表于 2026-1-22 13:50:10 | 显示全部楼层
汉哥:我把freertos+usb+stemwin+fatfs的例程里初始化只留串口。用了pb14,这个脚被连到了w25Q128的片选。用了pb15。效果就是这样子。插上能枚举成功,但是发1不反应。发任何命令都不反应。拔掉u盘,显示底层硬件错误。难道是w25Q片选造成的?
捕获.PNG
回复

使用道具 举报

2

主题

13

回帖

19

积分

新手上路

积分
19
 楼主| 发表于 2026-1-22 14:01:43 | 显示全部楼层
                vTaskDelay(1000);       
//                MainTask();屏蔽它

    while(1)
    {
//                ucKeyCode = bsp_GetKey();
               
//                if (ucKeyCode != KEY_NONE)
//                {
//                        switch (ucKeyCode)
//                        {
//                                /* K1¼ü°´Ï ´òÓ¡ÈÎÎñÖ´ÐÐÇé¿ö */
//                                case KEY_DOWN_K1:                         
//                                        App_Printf("=================================================\r\n");
//                                        App_Printf("ÈÎÎñÃû      ÈÎÎñ״̬ ÓÅÏȼ¶   Ê£ÓàÕ» ÈÎÎñÐòºÅ\r\n");
//                                        vTaskList((char *)&pcWriteBuffer);
//                                        App_Printf("%s\r\n", pcWriteBuffer);
//                               
//                                        App_Printf("\r\nÈÎÎñÃû       ÔËÐмÆÊý         Ê¹ÓÃÂÊ\r\n");
//                                        vTaskGetRunTimeStats((char *)&pcWriteBuffer);
//                                        App_Printf("%s\r\n", pcWriteBuffer);
//                                        printf("µ±Ç°¶¯Ì¬ÄÚ´æÊ£Óà´óС = %d×Ö½Ú\r\n", xPortGetFreeHeapSize());
//                                        break;
//                               
//                                /* ÆäËûµÄ¼üÖµ²»´¦Àí */
//                                default:                     
//                                        break;
//                        }
//                }
               
                vTaskDelay(20);也都屏蔽,加这一句


//                                bsp_LedToggle(2);
//                                bsp_LedToggle(3);屏蔽

                /* 1msÒ»´Î´¥ÃþɨÃ裬µç×è´¥ÃþÆÁ */
//                if(g_tTP.Enable == 1)
//                {
//                        TOUCH_Scan();
//                       
//                        /* °´¼üɨÃè */
//                        ucCount++;
//                        if(ucCount == 10)
//                        {
//                                ucCount = 0;
//                                bsp_KeyScan();
//                        }
//                    vTaskDelay(1);                       
//                }
               
                /* 10msÒ»´Î´¥ÃþɨÃ裬µçÈÝ´¥ÃþÆÁGT811 */
//                if(g_GT811.Enable == 1)
//                {
//                        bsp_KeyScan();
//                        ucCount1++;
//                        if(ucCount1 == 2)
//                        {
//                                ucCount1 = 0;
//                                GT811_OnePiontScan();
//                        }
//                    vTaskDelay(10);       
//                }
               
                /* 10msÒ»´Î´¥ÃþɨÃ裬µçÈÝ´¥ÃþÆÁFT5X06 */
//                if(g_tFT5X06.Enable == 1)
//                {
//                        bsp_KeyScan();
//                        FT5X06_OnePiontScan();
//                    vTaskDelay(10);       
//                }也都屏蔽
vTaskDelay(1000);加了这一句       

回复

使用道具 举报

2

主题

13

回帖

19

积分

新手上路

积分
19
 楼主| 发表于 2026-1-22 19:33:50 | 显示全部楼层
拿最小系统核心板f405测试,结果一样。除了pb14 pb15还有啥需要配置呢?我觉的都对上了,怎么还不行呢
回复

使用道具 举报

3

主题

26

回帖

35

积分

新手上路

积分
35
发表于 2026-1-23 09:00:36 | 显示全部楼层
eric2013 发表于 2026-1-20 11:09
是不是下载例子时钟和你板子的主频时钟不一致,也就是HSE_VALUE和你板子实际晶振大小不一致,如果不一致 ...

确实没注意这个问题,非常感谢  指点!
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
121123
QQ
发表于 2026-1-23 10:15:25 | 显示全部楼层
wdmvw 发表于 2026-1-22 13:50
汉哥:我把freertos+usb+stemwin+fatfs的例程里初始化只留串口。用了pb14,这个脚被连到了w25Q128的片选。用 ...

这个枚举没有成功,成功的话应该是这样的

123.png


回复

使用道具 举报

2

主题

13

回帖

19

积分

新手上路

积分
19
 楼主| 发表于 2026-1-23 15:46:19 | 显示全部楼层
可以了,谢谢
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
121123
QQ
发表于 2026-1-24 09:59:37 | 显示全部楼层

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-24 10:57 , Processed in 0.099703 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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