历史上的今天

今天是:2024年09月19日(星期四)

正在发生

2018年09月19日 | stm32cubemx+freertos+fatfs+sd调试心得

发布者:oplndctkl出 来源: eefocus关键字:stm32cubemx  freertos  fatfs  调试 手机看文章 扫描二维码
随时随地手机看文章

      stm32cubemx是当下比较流行的开发工具,可以大大提升我们的移植效率,从而提升开发的效率,但是在某些方面还是有些小坑需要我们注意。以下是用Cube,来进行sd卡读写实验的一些心得。

       在这里cube的画面配置环节就不描述了,直接描述所碰问题:文件系统无法挂载或文件无法读写,而且调式的时候光标移到读取时会跑飞等一些列问题。其实针对于这一问题主要是处理SD的信息接受与发送的中断调用有问题,我们可以进入SD的中断函数中进行分析,该函数在stm32f4xx_it.c文件中,如下图所示:


然后我们再进入HAL_SD_IRQHandler(&hsd)函数中,会发现当SD卡发送和接收信息调用的函数如下图所示:


根据这一段程序我们可以很清楚地发现用于SD读的函数为HAL_SD_RxCpltCallback(hsd),写的函数为HAL_SD_TxCpltCallback(hsd)。再看看HAL_SD_RxCpltCallback(hsd)和HAL_SD_TxCpltCallback(hsd)分别对应的定义为__weak void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd)

__weak void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd)

即发生读写中断的时候什么,无任何操作。而在自动生成的项目中关于sd卡的读写中断函数在sd_diskio.c文件中,如下图所示:



那么原因就一目了然了,当sd卡发生读写中断的时候,程序根本就没有在void BSP_SD_WriteCpltCallback(void)和

void BSP_SD_ReadCpltCallback(void)这两个函数中进行sd卡的读写中断处理,即中断根本就没有用,所以无法挂载,无法读写的问题就会出现。解决方法如下:添加以下代码如下图所示:


到了此处不要高兴太早哦,还有坑,此时sd卡已经可以挂载文件系统了,但是文件依然无法读写,调式时发现依然存在读写错误。那么可能大家会怀疑还是中断处理有问题,当时我也是这么想的,可是当我做完不带freertos的sd卡实验后,我就不这么想了,在不带操作系统,所有的fatfs的API函数可以很好的执行。证明了错误不在中断上,而是我们的操作系统没有运用好,主要原因如图所下:


就是这么一句不起眼程序,可能导致你项目中的各种奇怪问题,这一句话是Cube软件自动生成的,大家可能觉得这个没什么问题,其实我忽略了一点问题,就是文件系统比较复杂,所以在线程中调用的时候需要较大的栈空间,所以我将128改为1024之后所有的问题就都解决了。经过以上两步,你就可以在你创建的线程中愉快地用FATFS文件系统对sd卡进行操作了。


关键字:stm32cubemx  freertos  fatfs  调试 引用地址:stm32cubemx+freertos+fatfs+sd调试心得

上一篇:STM32的 USB传输(双缓冲)
下一篇:使用Cubemx移植FatFs到stm32

推荐阅读

品质生活不能有一丝苟且。我们离不开的产品,和快速的工业发展,让赖以生存的这个地球空气越来越恶劣。有研究表明,现代的室内空气的程度,远高于室外空气的污染,所以呵护家庭从洁净空气开始。为此,全新“RBOT”问世了,它就是全球首个空气净化机器人。简单的说,这就是个移动的空气净化器,当然它会更加的智能。 据悉,AIRBOT是由分体式结构组成,上...
据外媒Phone Arena消息称,LG的新款平板电脑G Pad 5目前已经上架了美国,外观尚没公开。售价285美元,搭载骁龙821处理器。这台外媒堪称为令人失望的安卓平板电脑,据XDA的开发人员透露,这款在2019年上市的平板电脑竟然搭载了几年前的期间芯片骁龙821,存储方面则是4+32GB的组合。据悉LG G Pad 5配备了一块10.1英寸的屏幕,采用后置指纹识别方案,支...
一段时间以来,华为、中兴通讯在印度的业务发展引发市场担忧。不过据Business Standard报道,印度电子信息技术部部长Sanjay Dhotre表示,政府不打算将这两家中国公司排除在5G网络基础设施合同之外。当地时间周三,Sanjay Dhotre在议会对议员们的有关质询做出了上述的书面答复。同时,这也消除了当地电信供应商的担忧和疑虑。据悉,早些时候,印度就受到...

史海拾趣

问答坊 | AI 解惑

显示温度的杯子

这个杯子侧面的电池标志其实是一个显示杯内冷热的刻度,它可以根据杯子里面水的温度,自动改变颜色,这样就不用担心被热水烫到舌头了…

查看全部问答∨

调查大家常用的IDE

请问现在的公司用C来做嵌入式开发,一般用什么IDE的?(IDE就是指"写代码/编译/调试"的工具),谢谢…

查看全部问答∨

外部串口造成ActiveSync软件无法连接的问题

  平台2440 5.0BSP   是这样的,我把外部串口B加载后,会造成ActiveSync软件无法连接,PC右下角会提示“无法识别设备”   我把该串口的注册表去掉,马上又可以连接了,这个确实是这个串口引起的。   我 ...…

查看全部问答∨

招聘程序员

招聘程序员: 具体要求见: www.chinadacs.cn …

查看全部问答∨

基于智能手机与PC机的智能家居系统设计

本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 管是手机还是家电产品都逐渐融入网络中,信息家电是将现代网络通信技术融入到传统的家用电器,使之成为具有信息访问、获取、存储、处理、联网等功能的消费类电子产品。信息家电的出现改变了传 ...…

查看全部问答∨

USBHID照着圈圈的做的,可以只能IN不能OUT

我用的是圈圈做的USB HID的配置,可是在我的程序上只能在端点1发送数据,端点2确收不到数据,感觉中断也没有。不知道是什么原因,请版主主和圈圈帮我看看是咋回事。const u8 CustomHID_DeviceDescriptor[CUSTOMHID_SIZ_DEVICE_ ...…

查看全部问答∨

STM32F2系列 MDK軟體模擬問題

各位大俠好新手上路,有點小問題請各位解惑我使用ST stm32f2xx_stdperiph_lib           MDK 4.23測試GPIO的範例但是我使用debug simulator的功能,先是出現錯誤訊息*** error 65: access violation at 0x0000000 ...…

查看全部问答∨

各位大侠,stm32代码下载进去了,必须复位几次串口才能往外发送数据,接收正常

各位大侠,stm32代码下载进去了,必须复位几次串口才能往外发送数据,接收正常?这是什么情况…

查看全部问答∨

在光电流应用中补偿电流反馈放大器

电流反馈放大器(CFA)历来都不是跨阻放大器(TIA)的首选,因为它们具有较高的反相输入电流和反相输入电流噪声,可能比同等级电压反馈放大器(VFA)至少高出一个数量级。另外,许多系统设计师对CFA并不熟悉,因为不大愿意使用它们。然而,事实上,CFA使 ...…

查看全部问答∨

函数 参数 void

写了一个函数,由于没有参数,所以括号里就写的void,但编译却出错,这是怎么回事呀 …

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved