硬汉嵌入式论坛

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

[emWin] CubeMX+FreeRTOS+FatFs+STemwin无法挂载SD卡,但是注释掉STemwin就可以挂载SD卡了

[复制链接]

4

主题

10

回帖

22

积分

新手上路

积分
22
发表于 2022-2-16 20:11:31 | 显示全部楼层 |阅读模式
最近毕业设计做的项目里用到Stemwin,Fatfs,Freertos等组件,除了STemwin,其他的我都是直接用CubeMX生成的,但是现在遇到很奇怪的问题。
如图1,如果不用STemwin,就是把下面的GUI有关的函数注释掉,f_mount()函数可以正常挂载SD卡,读写文件也正常。但是如图2,加入STemwin之后就无法挂载SD卡,f_mount函数卡30秒左右就返回“FR_DISK_ERR”,意思是“A hard error occurred in the low level disk I/O layer”,调试了1天了仍然没有解决。如图3,经过调试发现,f_mount()里卡在了osMessageQueueGet();这个函数里了..........,至今没有解决,我尝试在单独的任务函数里挂载SD卡,或者在main函数里挂载,仍然不行,加大函数栈也不行,没有解决问题,但是只要把STemwin注释掉,就可以正常挂载SD卡了。STemwin已经移植成功,但是STemwin和FatFs没有啥函数关联啊,里面没有用到Fatfs函数啊。。。。为什么会这样呢?有没有人遇到过这个问题?该怎么解决呢?
image.png image.png image.png

image.png
image.png
image.png

STM32F407VET6_Three_Phase_Inverter.rar

19.15 MB, 下载次数: 7

源码

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107137
QQ
发表于 2022-2-17 09:46:00 | 显示全部楼层
这个函数不初始化4线方式是否正常。

__weak uint8_t BSP_SD_Init(void)
{
  uint8_t sd_state = MSD_OK;
  /* Check if the SD card is plugged in the slot */
  if (BSP_SD_IsDetected() != SD_PRESENT)
  {
    return MSD_ERROR;
  }
  /* HAL SD initialization */
  sd_state = HAL_SD_Init(&hsd);
  /* Configure SD Bus width (4 bits mode selected) */
  if (sd_state == MSD_OK)
  {
    /* Enable wide operation */
    if (HAL_SD_ConfigWideBusOperation(&hsd, SDIO_BUS_WIDE_4B) != HAL_OK)
    {
      sd_state = MSD_ERROR;
    }
  }

  return sd_state;
}
回复

使用道具 举报

4

主题

10

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2022-2-17 23:48:55 | 显示全部楼层
如图,我把4线方式注释掉了,但是问题依旧
image.png
回复

使用道具 举报

4

主题

10

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2022-2-17 23:54:57 | 显示全部楼层
eric2013 发表于 2022-2-17 09:46
这个函数不初始化4线方式是否正常。

__weak uint8_t BSP_SD_Init(void)

注释掉了,问题依旧啊 image.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107137
QQ
发表于 2022-2-18 00:54:35 | 显示全部楼层
无聊的码农 发表于 2022-2-17 23:54
注释掉了,问题依旧啊

修改底层试试,fatfs的底层驱动文件使用裸机方式的那种,不使用OS方式的。
回复

使用道具 举报

4

主题

10

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2022-2-18 22:52:58 | 显示全部楼层
eric2013 发表于 2022-2-18 00:54
修改底层试试,fatfs的底层驱动文件使用裸机方式的那种,不使用OS方式的。

感谢硬汉,问题已经解决了,最终放弃了Cubemx自动生成的FATFS组件,我自己手动移植了Fatfs组件,现在可以正常挂在SD卡和读写文件了,也不会受到Stemwin影响了。但是至于为什么原来的不行我还是没搞明白。。。可能是Cubemx的bug,大家一定要避坑啊!
image.png image.png image.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107137
QQ
发表于 2022-2-19 08:37:00 | 显示全部楼层
无聊的码农 发表于 2022-2-18 22:52
感谢硬汉,问题已经解决了,最终放弃了Cubemx自动生成的FATFS组件,我自己手动移植了Fatfs组件,现在可以 ...

嗯,估计是生成的时候哪里有点问题。
回复

使用道具 举报

2

主题

26

回帖

32

积分

新手上路

积分
32
发表于 2022-4-27 13:16:33 | 显示全部楼层
我用cubemx生成的FATFS,在V7板子上按第3版emwin教程,把中文字库放在QSPI里就挂载不了SD卡。不用QSPI,把字库、图片什么的都放在SD卡里就行。也没找到原因。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 02:37 , Processed in 0.178823 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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