STMCU小助手
发布时间:2021-12-15 11:00
|
关于STM32F7使用SDMMC外设移植FatFs遇到f_mount 挂载成功,而f_open 函数未运行的解决方法# y$ L, \: q: o: C 本文开发环境:$ z, B" Q# V9 ` [ IDE环境:Keil_MDK_5.28 ]9 p% \3 J4 F# L- X, {6 l) X [ MCU型号:STM32F723 ] 这是我在main()函数内的代码,完成SDMMC和FatFs的初始化后打印SD卡的信息及操作步骤的反馈信息,如果正常的话应该会在SDCard里新建一个test.txt的文件;
% k$ ~, P% Q+ G% ~3 S 但事实上打印出来是这样:
0 R; J, `! @6 e8 @1 H* m q 挂载成功后,f_open函数没有正常运行,(没有打印Code值),在Fatfs初始化函数中设置打印看程序是否运行 * N5 L! e1 z$ \& c" _/ q8 o& U3 C
0 L" c1 f/ z7 r( E 发现没什么卵用,最后通过仿真发现代码运行到这里卡死:% |( ]- m# m# x' R 也就是HAL库文件下的stm32f7xx_hal_sd.c的SD_FindSCR(SD_HandleTypeDef *hsd, uint32_t *pSCR)函数下0 w+ L' B, j+ Z/ W9 r2 K" C % P" v5 l4 _; V' y! W+ I
: } `8 e$ E9 T( t 最后发现问题出在SDMMC的初始化函数中,下面这是没能正常工作的代码:. L/ Q, u7 ?. _
下面这个是修改过后的代码:( a; ?" B" Z+ |9 m - K( t+ T- m d( u9 j1 f
$ N; p1 r3 V& J) t 在HAL_SD_Init()初始化之前需要将BusWide设置为1位宽度,在SD的完成初始化后再将位宽设置为4位,重新编译,下载,实验现象:
* C* y0 V% m4 v6 S; n8 i% X 查看内存卡内是否新建了test.txt文件# S7 \9 Y' S9 p" Y. B& g ( }- X5 ~7 U' J3 C8 s/ l3 {1 p
创建文件成功,实验正常;4 t) a9 w6 x# N/ ?7 @& F8 {. T 肝了一天两夜,好在问题发现了,先记个笔记,怕以后再用到的时候又出现这个问题,也希望对卡在这里的人有些帮助; 至于这个问题好像是SD的规范吧,必须要设置为1位,初始化后为4位,当然你也可以一直用1位没什么影响,这个下去在学习学习!. _) p* \6 R$ `3 L/ \- {' C0 k: W ! ^. |7 f/ k& k) J; W , d! U' M' g, D8 T3 F / J/ i# c8 v G8 G" H, T% A. P1 d2 Q9 e |
基于STM32F767通过cube配置:QSPI接口读写64M PSRAM+flash参考资料...
STM32F746G-DISCO移植lvgl9.0性能基准测试
STM32F745 USART1 Bootloader启动失败排查与解决的流程分析
STM32芯片命名规则
STM32 引脚到底有多少?为什么一个引脚能当好几个用?
入门嵌入式,为什么STM32是“优选起步”?
嵌入式-单片机-STM32 EXTI中断
STM32单片机进行除零运算,为何程序不崩溃?
STM32 LL为什么比HAL高效?
STM32时钟详解
微信公众号
手机版