关于STM32F7使用SDMMC外设移植FatFs遇到f_mount 挂载成功,而f_open 函数未运行的解决方法 本文开发环境:* t" V* H/ M' z0 f: T [ IDE环境:Keil_MDK_5.28 ]3 Z, k: l9 O7 X [ MCU型号:STM32F723 ] 这是我在main()函数内的代码,完成SDMMC和FatFs的初始化后打印SD卡的信息及操作步骤的反馈信息,如果正常的话应该会在SDCard里新建一个test.txt的文件;# l0 h2 O/ e2 Y) A 但事实上打印出来是这样:$ @: H+ G3 r3 f( \8 m5 w6 T 挂载成功后,f_open函数没有正常运行,(没有打印Code值),在Fatfs初始化函数中设置打印看程序是否运行- J0 I: H/ U" S: O- G+ h 发现没什么卵用,最后通过仿真发现代码运行到这里卡死: 也就是HAL库文件下的stm32f7xx_hal_sd.c的SD_FindSCR(SD_HandleTypeDef *hsd, uint32_t *pSCR)函数下 8 s' O' n7 R, h6 [ 最后发现问题出在SDMMC的初始化函数中,下面这是没能正常工作的代码: 4 h) h6 P6 y: ^& ^; [2 J 下面这个是修改过后的代码: % h$ `4 `4 u- x 在HAL_SD_Init()初始化之前需要将BusWide设置为1位宽度,在SD的完成初始化后再将位宽设置为4位,重新编译,下载,实验现象: 查看内存卡内是否新建了test.txt文件 8 y+ L1 y9 R0 p2 G3 W& b 创建文件成功,实验正常; 肝了一天两夜,好在问题发现了,先记个笔记,怕以后再用到的时候又出现这个问题,也希望对卡在这里的人有些帮助;0 k8 t- N0 e" D* P 至于这个问题好像是SD的规范吧,必须要设置为1位,初始化后为4位,当然你也可以一直用1位没什么影响,这个下去在学习学习!4 p4 E F) P8 c' c( C 4 }+ s% Z! R$ [2 Y; h |
刘氓兔的杂谈【001】-片上USB 高速PHY
【合集】STM32F7教程、资料大集合
基于STM32F746G-Discover的扩展电路板
F769 Discovery实现播放U盘音乐的播放器
STM32 VS Code Extension (在Ubuntu上开发STM32,ST官方vscode插件使用指南)
STM32F765@216MHz跑NES模拟器【代码】【视频】
基于STM32F7实现ADC软件触发+轮询采集
基于STM32F7进行ADC采集解决更新问题
基于STM32F7使用定时器经验分享
实现基于STM32F7中周期采集