STM32CubeMX 生成 STM32F767IGTx 基于TF卡的 FatFs 工程

一.创建工程

1.版本状态:

芯片:STM32F767IG

固件版本:HAL1.9.0

FatFs版本:R0.12c

 

2.创建过程

2.1选择好芯片 开启外部时钟,根据TF卡连接的引脚开启SDMMC1

 

2.2设置时钟 /25 X432 P:/2 Q:/9 APB1:/4 APB2:/4

 

2.3设置 SDMMC1的时钟: PLL48CLK

 

2.4配置工程:

选择:FATFS --> SD Card

配置FATFS :

USE_STRFUNC (String functions)

Enabled without LF -> CRLF conversion

 

CODE_PAGE (Code page on target)

Simplified Chinese (DBCS)

 

USE_LFN (Use Long Filename)

Enabled with dynamic working buffer on the STACK

 

2.5配置 SDMMC1 DMA RX TX

 

2.6配置中断优先级

SDMMC1 global interrupt

true

4

0

DMA2 stream3 global interrupt

true

5

0

DMA2 stream6 global interrupt

true

5

0

 

 

2.7选择 生成独立文件夹

2.8根据你的IDE 生成 工程文件

二.修改工程文件

新生成的文件无法直接运行

经过调试发现会卡在

sd_diskio.c

DRESULT SD_read(BYTE lun, BYTE *buff, DWORD sector, UINT count)

这个函数的如下位置:

 

退出的条件一个是 超时 一个是ReadStatus =1

这个超时是默认 30秒,没问题,然后全局查找 ReadStatus 找到如下 ReadStatus = 1 的 执行函数

sd_diskio.c 中找到如下

 

注释中有提示:

 

===============================================================================

Select the correct function signature depending on your platform.

please refer to the file "stm32xxxx_eval_sd.h" to verify the correct function

prototype

===============================================================================

意思就是 要根据你自己的平台去配置这个调用,参考 stm32xxxx_eval_sd.h

从如下路径找到

en.stm32cubef7\STM32Cube_FW_F7_V1.9.0\Drivers\BSP\STM32F769I_EVAL\stm32xxxx_eval_sd.c

发现这个 BSP_SD_ReadCpltCallback HAL_SD_RxCpltCallback 调用

 

 

回到我们自己创建的工程 全局查找 : HAL_SD_RxCpltCallback

stm32f7xx_hal_sd.c 中 分别被 如下两个函数调用:

 

 

 

然后根据 stm32xxxx_eval_sd.c 里面的实现 添加 一下函数 到 自己工程的 sd_diskio.c 文件下

 

  1 /**
  2 
  3 * @brief BSP SD Abort callbacks
  4 
  5 * @retval None
  6 
  7 */
  8 
  9 __weak void BSP_SD_AbortCallback(void)
 10 
 11 {
 12 
 13  
 14 
 15 }
 16 
 17  
 18 
 19 /**
 20 
 21 * @brief BSP Tx Transfer completed callbacks
 22 
 23 * @retval None
 24 
 25 */
 26 
 27 //__weak void BSP_SD_WriteCpltCallback(void)
 28 
 29 //{
 30 
 31 //
 32 
 33 //}
 34 
 35  
 36 
 37 /**
 38 
 39 * @brief BSP Rx Transfer completed callbacks
 40 
 41 * @retval None
 42 
 43 */
 44 
 45 //__weak void BSP_SD_ReadCpltCallback(void)
 46 
 47 //{
 48 
 49 //
 50 
 51 //}
 52 
 53  
 54 
 55  
 56 
 57 /**
 58 
 59 * @brief BSP Error callbacks
 60 
 61 * @retval None
 62 
 63 */
 64 
 65 __weak void BSP_SD_ErrorCallback(void)
 66 
 67 {
 68 
 69  
 70 
 71 }
 72 
 73  
 74 
 75  
 76 
 77  
 78 
 79  
 80 
 81 /**
 82 
 83 * @brief BSP SD Transceiver 1.8V Mode Callback.
 84 
 85 */
 86 
 87 __weak void BSP_SD_DriveTransciver_1_8V_Callback(FlagStatus status)
 88 
 89 {
 90 
 91  
 92 
 93 }
 94 
 95  
 96 
 97 /* USER CODE BEGIN lastSection */
 98 
 99 /**
100 
101 * @brief SD Abort callbacks
102 
103 * @param hsd: SD handle
104 
105 * @retval None
106 
107 */
108 
109 void HAL_SD_AbortCallback(SD_HandleTypeDef *hsd)
110 
111 {
112 
113 BSP_SD_AbortCallback();
114 
115 }
116 
117  
118 
119  
120 
121 /**
122 
123 * @brief Tx Transfer completed callbacks
124 
125 * @param hsd: SD handle
126 
127 * @retval None
128 
129 */
130 
131 void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd)
132 
133 {
134 
135 BSP_SD_WriteCpltCallback();
136 
137 }
138 
139  
140 
141 /**
142 
143 * @brief Rx Transfer completed callbacks
144 
145 * @param hsd: SD handle
146 
147 * @retval None
148 
149 */
150 
151 void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd)
152 
153 {
154 
155 BSP_SD_ReadCpltCallback();
156 
157 }
158 
159  
160 
161 /**
162 
163 * @brief Error callbacks
164 
165 * @param hsd: SD handle
166 
167 * @retval None
168 
169 */
170 
171 void HAL_SD_ErrorCallback(SD_HandleTypeDef *hsd)
172 
173 {
174 
175 BSP_SD_ErrorCallback();
176 
177 }
178 
179 /**
180 
181 * @brief Enable the SD Transceiver 1.8V Mode Callback.
182 
183 */
184 
185 void HAL_SD_DriveTransciver_1_8V_Callback(FlagStatus status)
186 
187 {
188 
189 BSP_SD_DriveTransciver_1_8V_Callback(status);
190 
191 }
View Code

 

转载于:https://www.cnblogs.com/liuyunxiang/p/8491480.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值