历史上的今天
今天是: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卡进行操作了。
史海拾趣
|
鼠标全局钩子程序,部份函数/结构、常量不能被Wince 5.0环境识别 在windows平台上用VC+6 编写好的鼠标全局钩子程序, 在向Wince 5.0,EVC4.0+SP4, 模拟器环境(StandardSDK_500)移置时,发现: 部份函数/结构、常量不能被Wince 5.0环境识别如: error C2065: \'CallNextHookEx\' : undeclared identifier erro ...… 查看全部问答> |
|
目前需求是: 一台主机,多个触摸显示屏(USB连接到主机),该主机上装了几个虚拟操作系统,想在不同触摸屏上分别显示各个操作系统。 不知道现在市面上有没有这种触摸屏支持这种功能,就是在一定程度上提供这样一个接口,可以控制它所输出的内容 ...… 查看全部问答> |
|
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 ...… 查看全部问答> |
|
在使用stm8时,出现了2个类似奇怪的现象(在2台电脑上使用):(电脑)1,stm8的电源指示灯突然熄灭,电脑突然关机,导致3个USB接口全部坏掉,最后判定为主板坏了。(电脑)2,stm8的电源指示灯突然熄灭,电脑突然关机,无法重启,最后拔掉电池才能 ...… 查看全部问答> |
|
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代码 ...… 查看全部问答> |




