
| 使用的是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--); |
keil调试阶段无法进行仿真,能进到仿真界面,但是无法执行程序,这个怎么解决?
STM32F4的IO口5V容忍问题
STM32F407的flash读写问题
询问STM32F407两种USB可以实现的功能
stm32h7 用pb3、pb4、pb5、pa15做spi3后,mx组态时debug里选择serial wire,程序里加了禁用jtag,spi3口不能工作
TOF传感器(VL53L5),无法得到data ready
STM32U575 SPI&GPDMA
L9663驱动开发
在CUBEMX生成的STM32F407VET6的I2S主机接收模式与I2S主机发送模式能正常运行,如何进行动态调整或者如何实现主机全双工?
STM32F407 多机RS485串口通讯+地址位唤醒+DMA空闲线接收,无法进入中断服务程序。
也试过直接冷启动(直接上电不通过调试器),连续初始化两次,第一次初始化通过,第二次的初始化就直接失败了。