
| 使用的是stm32F407驱动一个32G的tf卡,使用的SPI模式。第一次上电时,卡识别初始化能通过,但是再keil调试时复位,再运行到初始化这里。卡识别初始化一直过不了。这个时候拔插一次tf卡,再次初始化就能通过。这是什么原因?怎么解决? 初始化代码部分: uint8_t SD_Initialize(void) { uint8_t r1; // 存放SD卡的返回值 uint16_t retry; // 用来进行超时计数 uint8_t buf[4]; SD_Type = 0; //默认无卡 if (r1 == 0X01) { if (SD_SendCmd(CMD8, 0x1AA, 0x87) == 1) //SD V2.0 { for (i = 0; i < 4; i++)buf[i] = SD_SPI_ReadWriteByte(0XFF); //Get trailing return value of R7 resp if (buf[2] == 0X01 && buf[3] == 0XAA) //卡是否支持2.7~3.6V { retry = 0XFFFE; do { r1=SD_SendCmd(CMD55, 0, 0X01); //发送CMD55 r1 = SD_SendCmd(CMD41, 0x40000000, 0X01); //发送CMD41 } while (r1 && retry--); if (retry && SD_SendCmd(CMD58, 0, 0X01) == 0) //鉴别SD2.0卡版本开始 { for (i = 0; i < 4; i++)buf[i] = SD_SPI_ReadWriteByte(0XFF); //得到OCR值 if (buf[0] & 0x40)SD_Type = SD_TYPE_V2HC; //检查CCS else SD_Type = SD_TYPE_V2; } } } else //SD V1.x/ MMC V3 { SD_SendCmd(CMD55, 0, 0X01); //发送CMD55 r1 = SD_SendCmd(CMD41, 0, 0X01); //发送CMD41 if (r1 <= 1) { SD_Type = SD_TYPE_V1; retry = 0XFFFE; do //等待退出IDLE模式 { SD_SendCmd(CMD55, 0, 0X01); //发送CMD55 r1 = SD_SendCmd(CMD41, 0, 0X01); //发送CMD41 } while (r1 && retry--); } else { SD_Type = SD_TYPE_MMC; //MMC V3 retry = 0XFFFE; do //等待退出IDLE模式 { r1 = SD_SendCmd(CMD1, 0, 0X01); //发送CMD1 } while (r1 && retry--); } if (retry == 0 || SD_SendCmd(CMD16, 512, 0X01) != 0)SD_Type = SD_TYPE_ERR; //错误的卡 } } SD_DisSelect();//取消片选 if (SD_Type)return 0; else if (r1)return r1; return 0xaa;//其他错误 } 发送CMD8时,响应值正常。CMD55也正常响应。ACMD41返回值一直是0x01(r1 = SD_SendCmd(CMD41, 0x40000000, 0X01); //发送CMD41)。 if (buf[2] == 0X01 && buf[3] == 0XAA) //卡是否支持2.7~3.6V { retry = 0XFFFE; do { SD_SendCmd(CMD55, 0, 0X01); //发送CMD55 r1 = SD_SendCmd(CMD41, 0x40000000, 0X01); //发送CMD41 }while (r1 && retry--); |
在其他电脑上编译成功没有错误并且能够烧录,换了电脑之后编译出现一堆错误,并且不能烧录程序
在其他电脑上编译成功没有错误并且能够烧录,换了电脑之后编译出现一堆错误,并且不能烧录程序
STM32多通道FFT运算异常
串口重定向接收不同
关于三轴陀螺仪 I3G4250D
经过光耦之后,脉冲计数功能为啥不能实现?
STM32F407 ADC Dual regular simultaneous only 模式下最高采样率仅 96 kHz,960 kHz 无法工作,求助!
STM32N6570-DK开发板,哪里还有卖的?
STM32 F407骄阳电机版用DMA双缓存接收串口数据时,上电第一次接收区是memory1而不是memory0?
STM32F407骄阳版用DMA双缓存区接收串口数据,上电第一次接收到的数据在memory1而不是memory0
也试过直接冷启动(直接上电不通过调试器),连续初始化两次,第一次初始化通过,第二次的初始化就直接失败了。