关于STM32F7使用SDMMC外设移植FatFs遇到f_mount 挂载成功,而f_open 函数未运行的解决方法( X: B0 O, m9 a" |# a 本文开发环境: [ IDE环境:Keil_MDK_5.28 ], ]( u2 W1 p" L [ MCU型号:STM32F723 ] 这是我在main()函数内的代码,完成SDMMC和FatFs的初始化后打印SD卡的信息及操作步骤的反馈信息,如果正常的话应该会在SDCard里新建一个test.txt的文件;$ X* U% _! p% G" I & a g+ U$ H( w( m4 w T. m 1 u# S k& y8 C 但事实上打印出来是这样: / y" ~- ^. p2 X4 `( C* w: B , F, [" Y v1 g) d1 n' p 挂载成功后,f_open函数没有正常运行,(没有打印Code值),在Fatfs初始化函数中设置打印看程序是否运行, y' N$ a6 W( F' b+ `: D" c 8 x; W, y& ^7 j) [8 h4 w0 [ Q6 _/ G5 L! J , ~0 ~6 `- Q } Q+ m' B 发现没什么卵用,最后通过仿真发现代码运行到这里卡死:' s% X, P, u6 C; ^: M 也就是HAL库文件下的stm32f7xx_hal_sd.c的SD_FindSCR(SD_HandleTypeDef *hsd, uint32_t *pSCR)函数下6 K# E/ D3 j( L& ]% i4 n% x % ~% s. ]0 Y" h F& X7 a. Z( Q 最后发现问题出在SDMMC的初始化函数中,下面这是没能正常工作的代码: 2 j5 X8 F0 T$ Y' c2 J8 B ) ^4 C5 T6 Z- ?7 x( U* P: [ 下面这个是修改过后的代码: ; x8 `7 Q2 [8 ^% N 在HAL_SD_Init()初始化之前需要将BusWide设置为1位宽度,在SD的完成初始化后再将位宽设置为4位,重新编译,下载,实验现象:- L; J9 A3 L: Z$ R o- {4 e , p1 q; {0 Z& I3 f! n7 d 查看内存卡内是否新建了test.txt文件 ' h; F! X u7 Q4 [ 创建文件成功,实验正常; 肝了一天两夜,好在问题发现了,先记个笔记,怕以后再用到的时候又出现这个问题,也希望对卡在这里的人有些帮助;) x" R* K" Y& L' H 至于这个问题好像是SD的规范吧,必须要设置为1位,初始化后为4位,当然你也可以一直用1位没什么影响,这个下去在学习学习!6 j& B0 N, y2 {/ P+ c, T( m + O* |5 }( O- l |
基于STM32F746G-Discover的扩展电路板
【合集】STM32F7教程、资料大集合
F769 Discovery实现播放U盘音乐的播放器
STM32 VS Code Extension (在Ubuntu上开发STM32,ST官方vscode插件使用指南)
STM32F765@216MHz跑NES模拟器【代码】【视频】
基于STM32F7实现ADC软件触发+轮询采集
基于STM32F7进行ADC采集解决更新问题
基于STM32F7使用定时器经验分享
实现基于STM32F7中周期采集
基于STM32F7中实现采集和中断