历史上的今天
返回首页

历史上的今天

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

正在发生

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

2018-09-19 来源:eefocus

      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卡进行操作了。


推荐阅读

史海拾趣

FINTEK公司的发展小趣事

随着ASP芯片市场的成功,FINTEK公司意识到单一产品线的局限性。为了保持竞争优势并开拓新市场,公司开始多元化拓展产品线。经过市场调研和技术储备,FINTEK相继推出了数字信号处理器(DSP)、微控制器(MCU)以及射频前端模块(RF FEM)等一系列新产品。这些产品的推出不仅丰富了公司的产品线,也进一步巩固了FINTEK在半导体领域的市场地位。

Diamond SA公司的发展小趣事

在电子行业竞争日益激烈的背景下,Diamond SA公司开始寻求通过并购来实现规模扩张和资源整合。他们精心挑选了一些具有潜力的目标企业,通过谈判和交易成功完成了并购。这些并购不仅为Diamond SA公司带来了更多的技术资源和市场份额,还增强了公司的整体竞争力。

Burr-Brown公司的发展小趣事

2000年,Burr-Brown被著名的美国德州仪器公司(Texas Instruments)收购,成为其高性能模拟器件部门的一部分。这一收购为Burr-Brown提供了更强大的资源和支持,使其能够继续专注于模拟器件(如ADC、DAC等)的生产和创新。在德州仪器的引领下,Burr-Brown持续保持技术领先,为全球电子行业的发展做出了重要贡献。

这五个故事共同展现了Burr-Brown公司从创立到发展壮大的历程,以及其在电子行业中的卓越成就和持续创新的精神。通过不断适应市场变化和技术进步,Burr-Brown成功地在竞争激烈的电子行业中脱颖而出,成为一家备受尊敬的企业。

Amaze Electronics Pte Ltd公司的发展小趣事

随着业务的不断发展,Amaze Electronics意识到国际市场的巨大潜力。于是,公司积极寻求与国际知名电子企业的合作,共同开发新产品。通过与这些企业的深度合作,Amaze Electronics不仅获得了先进的技术支持,还成功将产品打入国际市场,实现了业务的快速拓展。

启攀微电子(Chiphomer)公司的发展小趣事

2009年,全球经济遭受金融海啸的冲击,启攀微电子也面临着巨大的市场压力。然而,公司并没有选择退缩,而是选择了坚守与创新。在经济危机的背景下,公司加强了产品推广和客户支持,同时加快了新品开发的步伐。经过几年的打拼,启攀微电子的消费类电子产品在手机领域取得了一定的市场认可,出货量大幅提升,市场份额稳步上升。

Heyco公司的发展小趣事

随着全球化趋势的加剧,Heyco开始积极拓展海外市场。公司在欧洲市场取得长足发展的同时,也逐步进入北美和亚太地区。通过在全球各地建立销售网络和生产基地,Heyco实现了产品的全球化生产和销售。这一战略不仅提升了公司的市场份额,还进一步巩固了其在电子工业备品备件销售领域的领先地位。

问答坊 | AI 解惑

SOT23-6

SOT23-6封装,2脚接地,5脚接3.3V电压,1脚好像输出,3.4脚连在一起,6脚好像是信号输入。有谁知道这个什么芯片啊…

查看全部问答>

鼠标全局钩子程序,部份函数/结构、常量不能被Wince 5.0环境识别

在windows平台上用VC+6 编写好的鼠标全局钩子程序, 在向Wince 5.0,EVC4.0+SP4, 模拟器环境(StandardSDK_500)移置时,发现: 部份函数/结构、常量不能被Wince 5.0环境识别如: error C2065: \'CallNextHookEx\' : undeclared identifier erro ...…

查看全部问答>

三星有官方2440 wince 6.0的bsp吗?

三星有官方2440 wince 6.0的bsp吗? 或者哪位有?能否贡献一下?…

查看全部问答>

请教: 关于触摸屏的问题

目前需求是: 一台主机,多个触摸显示屏(USB连接到主机),该主机上装了几个虚拟操作系统,想在不同触摸屏上分别显示各个操作系统。 不知道现在市面上有没有这种触摸屏支持这种功能,就是在一定程度上提供这样一个接口,可以控制它所输出的内容 ...…

查看全部问答>

有朋友做过读卡器的驱动吗?想交流下优化的方法

如题,关于闪存底层的优化相关问题,希望能找到朋友交流下,谢谢 直接恢复或者king_tf@163.com 再次谢谢…

查看全部问答>

J-link 出现target vcc failure .please check target voltage.failed to connect

J-link 出现target vcc failure .please check target voltage.failed to connect我是笔记本电脑,用的开发板是mini2440。在看国嵌体验入门班-1-5(软硬件环境搭建) 视频教程根据视频教程的步骤,我装好了J-Flash ARM V4.08l,并连接好J-link跟开 ...…

查看全部问答>

请教一个有关中断的问题

在ZLG的1138开发板中所有的例程中,其启动文件都有这3个中断程序代码。想请教大家,特别是FaultISR(void)和IntDefaultHandler(void)到底在实际运用中有什么用途。 static void NmiSR(void) {     //     // Enter an infi ...…

查看全部问答>

正在学习PSoC,上个图

正在学习PSoC,上个图。资料正在下载中,还有视频,晚些时候会放上来。…

查看全部问答>

stm8和电脑USB接口的问题

在使用stm8时,出现了2个类似奇怪的现象(在2台电脑上使用):(电脑)1,stm8的电源指示灯突然熄灭,电脑突然关机,导致3个USB接口全部坏掉,最后判定为主板坏了。(电脑)2,stm8的电源指示灯突然熄灭,电脑突然关机,无法重启,最后拔掉电池才能 ...…

查看全部问答>

SAMR21_SSD1306

SSD1306 图5-1:OLED1 Xplained ProOLED1 Xplained Pro是Atmel设计的配件开发板,上面总共呆了三个LED和三个Key以及一个128*32的OLED液晶屏幕。 图5-2:OLED1 Xplained Pro Overview打开AtmelStudio 新建一个SSD1306的工程。 图5-3:Example代码 ...…

查看全部问答>