你好!
我将 FatFS R0.11 与 STM32F373 一起使用,有时可以使用 FATFS,有时则不能。
这些是我遇到的问题,我不知道为什么。
NVIC 中断是否会导致 FatFS 库出现问题?
挂载SD卡:
安装 SD 卡 -> 卸载 SD 卡 -> 拔出 SD 卡 -> 插入 SD 卡 -> 安装 SD 卡。这将为我创建一个错误。我无法卸载 SD 卡并拔下它,然后重新插入并安装它。然后我得到一个 FR_DISK_ERR。
请注意,如果我重新刷新 STM32 处理器或进入调试模式,那么我不会收到 FR_DISK_ERR。但是如果我取出卡,重新插入,重新启动 STM32 处理器,那么我仍然得到 FR_DISK_ERR。
写垃圾值:
例如,如果我写一个文本字符串
- STM32_PLC_SD_Write_File("Hour,Minute,Second,Millisecond,");
- STM32_PLC_SD_Write_File("ADC0,ADC1,ADC2,ADC3,ADC4,ADC5,ADC6,ADC7,ADC8,ADC9,ADC10,ADC11,");
- STM32_PLC_SD_Write_File("DADC0,DADC1,DADC2,DADC3,DADC4,");
- STM32_PLC_SD_Write_File("I0,I1,I2,I3,I4,I5,I6,I7,");
- STM32_PLC_SD_Write_File("E0,E1,");
- STM32_PLC_SD_Write_File("IC0,IC1,IC2,");
- STM32_PLC_SD_Write_File("DAC0,DAC1,DAC2,");
- STM32_PLC_SD_Write_File("PMW0,PWM1,PWM2,PWM3,PWM4,PWM5,PWM6,PWM7
"); - /* Return -1 with End of File (EOF) */
- static FIL *fil;
- int STM32_PLC_SD_Write_File(char text[]) {
- return f_puts(text, fil);
- }
然后我得到了这个
- $� ADC ��� DADC4 I0 I1 I2 I3 I4 I5 I6 I7 E0 E1 IC0 IC1 IC2 DAC0 DAC1 DAC2 PMW0 PWM1 PWM2 PWM3 PWM4 PWM5 PWM6 PWM7
硬故障:
有时,当我尝试写这篇文章时,我会遇到严重的错误。从一开始,它工作正常。然后几秒钟后,我遇到了严重的错误。文本数组的长度为 200 个字节。
此代码每毫秒循环一次。
- sprintf(text, "%i,%i,%i,%i,",
- hours,
- minutes,
- seconds,
- milliseconds);
- STM32_PLC_SD_Write_File(text);
- sprintf(text, "%0.2f,%0.2f,%0.2f,%0.2f,%0.2f,%0.2f,%0.2f,%0.2f,%0.2f,%0.2f,%0.2f,%0.2f,",
- STM32_PLC_Analog_Input_ADC_Get(0),
- STM32_PLC_Analog_Input_ADC_Get(1),
- STM32_PLC_Analog_Input_ADC_Get(2),
- STM32_PLC_Analog_Input_ADC_Get(3),
- STM32_PLC_Analog_Input_ADC_Get(4),
- STM32_PLC_Analog_Input_ADC_Get(5),
- STM32_PLC_Analog_Input_ADC_Get(6),
- STM32_PLC_Analog_Input_ADC_Get(7),
- STM32_PLC_Analog_Input_ADC_Get(8),
- STM32_PLC_Analog_Input_ADC_Get(9),
- STM32_PLC_Analog_Input_ADC_Get(10),
- STM32_PLC_Analog_Input_ADC_Get(11));
- STM32_PLC_SD_Write_File(text);
- sprintf(text, "%0.2f,%0.2f,%0.2f,%0.2f,%0.2f,",
- STM32_PLC_Analog_Input_DADC_Get(0),
- STM32_PLC_Analog_Input_DADC_Get(1),
- STM32_PLC_Analog_Input_DADC_Get(2),
- STM32_PLC_Analog_Input_DADC_Get(3),
- STM32_PLC_Analog_Input_DADC_Get(4));
- STM32_PLC_SD_Write_File(text);
- sprintf(text, "%i,%i,%i,%i,%i,%i,%i,%i,",
- STM32_PLC_Digital_Input_Get(0),
- STM32_PLC_Digital_Input_Get(1),
- STM32_PLC_Digital_Input_Get(2),
- STM32_PLC_Digital_Input_Get(3),
- STM32_PLC_Digital_Input_Get(4),
- STM32_PLC_Digital_Input_Get(5),
- STM32_PLC_Digital_Input_Get(6),
- STM32_PLC_Digital_Input_Get(7));
- STM32_PLC_SD_Write_File(text);
- sprintf(text, "%i,%i",
- STM32_PLC_Encoder_Get(0),
- STM32_PLC_Encoder_Get(1));
- STM32_PLC_SD_Write_File(text);
- sprintf(text, "%0.2f,%0.2f,%0.2f,",
- STM32_PLC_Input_Capture_Get(0),
- STM32_PLC_Input_Capture_Get(1),
- STM32_PLC_Input_Capture_Get(2));
- STM32_PLC_SD_Write_File(text);
- sprintf(text, "%i,%i,%i,",
- STM32_PLC_Analog_Output_Get(0),
- STM32_PLC_Analog_Output_Get(1),
- STM32_PLC_Analog_Output_Get(2));
- STM32_PLC_SD_Write_File(text);
- sprintf(text, "%i,%i,%i,%i,%i,%i,%i,%i
", - STM32_PLC_PWM_Get(0),
- STM32_PLC_PWM_Get(1),
- STM32_PLC_PWM_Get(2),
- STM32_PLC_PWM_Get(3),
- STM32_PLC_PWM_Get(4),
- STM32_PLC_PWM_Get(5),
- STM32_PLC_PWM_Get(6),
- STM32_PLC_PWM_Get(7));
- STM32_PLC_SD_Write_File(text);
这是我执行“成功”日志记录过程时的结果。
我的 SPI 设置:
我正在使用 SPI 写入和读取 SD 卡。
这是我的 FATFS 配置
/* 用户代码开始头 *//** ****************************************** **** - Pastebin.com
编辑:
使用这个库后
kiwih/cubeide-sd-card:CubeIDE/CubeMX 兼容的 MMC/SD 存储卡 FatFs 驱动程序 (github.com)
现在情况开始好转。
我写作时不会犯严重错误。所以这是个好消息。
但我现在收到两个错误代码。这两个。
FR_DISK_ERR, /* (1) 底层磁盘I/O层发生硬错误 */
FR_NOT_READY, /* (3) 物理驱动器不能工作 */
当我拔下 SD 卡并重新插入以进行挂载时,我会得到 FR_DISK_ERR。
如果我关闭 STM32 处理器的 电源然后再次关闭电源,我会得到 FR_NOT_READY。
要“解决”FR_NOT_READY,我需要再次刷新 STM32 处理器。但是在我为我的STM32处理器重新插上电源(USB电压)后,问题就出现了。
0
|
1个回答
|
|
|