这是我的写入代码
[C] 纯文本查看 复制代码 FRESULT Usb_Save_String_To_File(const char* filename, const char* data_buffer) {
FIL fil;
FRESULT res;
UINT bytes_written;
res = f_mount(&USBHFatFS, "1:", 1);
if (res != FR_OK) {
return res;
}
res = f_open(&fil, filename, FA_CREATE_ALWAYS | FA_WRITE);
if (res != FR_OK) {
f_mount(NULL, "1:", 1);
return res;
}
res = f_write(&fil, data_buffer, strlen(data_buffer), &bytes_written);
if (res != FR_OK) {
f_close(&fil);
f_mount(NULL, "1:", 1);
return res;
}
res = f_close(&fil);
if (res != FR_OK) {
f_mount(NULL, "1:", 1);
return res;
}
if (bytes_written < strlen(data_buffer)) {
return FR_DISK_ERR;
}
return FR_OK;
}
执行代码后,挂载成功,创建文件成功,但是会堵死在f_write这一步,经过断点调试发现问题发生在
stm32h7xx_hal_sd.c的
[C] 纯文本查看 复制代码 HAL_SD_CardStateTypeDef HAL_SD_GetCardState(SD_HandleTypeDef *hsd)
{
//uint32_t cardstate;
uint32_t errorstate;
uint32_t resp1 = 0;
errorstate = SD_SendStatus(hsd, &resp1);
if (errorstate != HAL_SD_ERROR_NONE)
{
hsd->ErrorCode |= errorstate;
}
cardstate = ((resp1 >> 9U) & 0x0FU);
return (HAL_SD_CardStateTypeDef)cardstate;
}
这段代码里,然后我看了一下是将返回值与HAL_SD_CARD_TRANSFER进行比较,正好是errorstate 的0x000004
所以修改
[C] 纯文本查看 复制代码 HAL_SD_CardStateTypeDef HAL_SD_GetCardState(SD_HandleTypeDef *hsd)
{
//uint32_t cardstate;
uint32_t errorstate;
uint32_t resp1 = 0;
errorstate = SD_SendStatus(hsd, &resp1);
if (errorstate != HAL_SD_ERROR_NONE)
{
hsd->ErrorCode |= errorstate;
}
//cardstate = ((resp1 >> 9U) & 0x0FU);
//return (HAL_SD_CardStateTypeDef)cardstate;
return (HAL_SD_CardStateTypeDef)errorstate;
}
代码可以正常运作,可以正常写入文件,但是并不知道是什么原因导致的,大佬能否解答一下
|