
关于STM32Cubemx 6.15版本生成工程的文件编码的问题
多DMA数据流问题
STM32G474 BOOST电路双环PID的用法
STM32G474RET6移相问题
如何解决用CubeMX生成代码时会将main.c文件中的汉字变成乱码的问题?
stm32cubemax
STM32CUBE MX无法安装,每次总是卡在最后一步
STM32F103C8T6使用CubeIDE烧录运行报硬件错误,相同代码MDK烧录却可以正常运行
STM32F103C8T6 TIM1 CH2输入捕获触发DMA的问题
STM32407 使用串口闲时中断+DMA方式接收最大接收字节是多少
{
/* USER CODE BEGIN SDMMC1_Init 0 */
/* USER CODE END SDMMC1_Init 0 */
/* USER CODE BEGIN SDMMC1_Init 1 */
/* USER CODE END SDMMC1_Init 1 */
hsd1.Instance = SDMMC1;
hsd1.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING;
hsd1.Init.ClockBypass = SDMMC_CLOCK_BYPASS_DISABLE;
hsd1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE;
hsd1.Init.BusWide = SDMMC_BUS_WIDE_4B;
hsd1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE;
hsd1.Init.ClockDiv = 0;
/* USER CODE BEGIN SDMMC1_Init 2 */
hsd1.Init.BusWide = SDMMC_BUS_WIDE_1B; //初始化时改为1线,否则卡死在BSP_SD_Init中
/* USER CODE END SDMMC1_Init 2 */
}
金士顿32G内存卡运行正常,更换为16G内存卡却总是卡在下面的死循环:while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_DBCKEND))
{
if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXDAVL))
{
*(tempscr + index) = SDMMC_ReadFIFO(hsd->Instance);
index++;
}
if((HAL_GetTick() - tickstart) >= SDMMC_DATATIMEOUT)
{
return HAL_SD_ERROR_TIMEOUT;
}
}
测试主函数:
main(void)
{
/* USER CODE BEGIN 1 */
uint32_t ii;
DWORD frr;
FATFS *FSS;
SD_POWER_ON;
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_SDMMC1_SD_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if(BSP_SD_IsDetected() != SD_NOT_PRESENT)
{
HAL_Delay(1000u);
if(BSP_SD_Init() == MSD_OK)
{
retSD = FATFS_LinkDriver(&SD_Driver, SDPath);
if(retSD==0u)
{
retSD = f_mount(&SDFatFS,(TCHAR const *)SDPath,1u);
FSS = &SDFatFS;
retSD = f_getfree((TCHAR const *)SDPath,&frr,&FSS);
ii = frr*(SDFatFS.csize)/2048;
retSD = f_mkdir("TEST0");
retSD = f_mkdir("TEST1");
retSD = f_mkdir("TEST2");
f_mount(NULL,(TCHAR const*)SDPath,1u);
}
OKcnt++;
}
else
{
ERRcnt++;
}
}
}
/* USER CODE END 3 */
}