
关于STM32F7使用SDMMC外设移植FatFs遇到f_mount 挂载成功,而f_open 函数未运行的解决方法: Z: h+ B9 I, s) s+ U3 A 本文开发环境: [ IDE环境:Keil_MDK_5.28 ]- {" Z2 I" E) [) c [ MCU型号:STM32F723 ]: d m$ [# ^3 Y" d7 }, q 这是我在main()函数内的代码,完成SDMMC和FatFs的初始化后打印SD卡的信息及操作步骤的反馈信息,如果正常的话应该会在SDCard里新建一个test.txt的文件; # z2 L. T( `5 V0 ? ![]() # B4 i, Z y8 r/ q2 D/ @ 但事实上打印出来是这样:- V" E4 h- Z, A1 W4 b ![]() ) g- d9 b- ]" A9 k( ^ 挂载成功后,f_open函数没有正常运行,(没有打印Code值),在Fatfs初始化函数中设置打印看程序是否运行 2 F* b U+ k$ r9 C$ P! H1 b2 }. ~7 ?( ` ![]() 发现没什么卵用,最后通过仿真发现代码运行到这里卡死: 也就是HAL库文件下的stm32f7xx_hal_sd.c的SD_FindSCR(SD_HandleTypeDef *hsd, uint32_t *pSCR)函数下 8 T6 z |/ P9 g" ~; N ![]() e, ~% f- l- B o/ C% _4 X b 最后发现问题出在SDMMC的初始化函数中,下面这是没能正常工作的代码:8 p( W2 Q( Z4 s, E4 H7 | ![]() ! H0 c" n! i# ~8 [ 下面这个是修改过后的代码:5 y( Y& D& ]0 h& C, I . @& J+ {( v$ `% w! A: b ![]() 在HAL_SD_Init()初始化之前需要将BusWide设置为1位宽度,在SD的完成初始化后再将位宽设置为4位,重新编译,下载,实验现象: / A- P. t. d7 |1 O ![]() ( p6 w1 O; I$ }7 n8 }6 k 查看内存卡内是否新建了test.txt文件 + z; m7 t& D2 y3 e* d( ^ ![]() 创建文件成功,实验正常;8 U: G8 S- `. A! a0 _% @' i 肝了一天两夜,好在问题发现了,先记个笔记,怕以后再用到的时候又出现这个问题,也希望对卡在这里的人有些帮助; 至于这个问题好像是SD的规范吧,必须要设置为1位,初始化后为4位,当然你也可以一直用1位没什么影响,这个下去在学习学习! ( X; u* @5 W8 B5 @. i2 N- G) w : \- s, g0 F- J# S" D 7 Q% L! a& @1 d2 Q- h' z |
【STM32F769I-DISC1】开发板刷入Micropython并完成点灯、读取内部温度测试
【STM32F769I-DISC1】测评01:创建STM32cube IDE 工程,点个灯
【STM32F769】创建deepseek本地服务,并实现http请求
汇编浮点库qfplib移植STM32F769I-DISCO开发板与硬件浮点运算性能测试对比
coremark移植到STM32F769I-DISCO开发板的两种方法
【GUI板免费申请活动】【圣诞GUI】使用F746-DISO基于TouchGFX的圣诞树
刘氓兔的杂谈【001】-片上USB 高速PHY
【合集】STM32F7教程、资料大集合
基于STM32F746G-Discover的扩展电路板
F769 Discovery实现播放U盘音乐的播放器