第一步,初始化外设控制器获取参数 HAL_MMC_Init。第二步,根据需求配置emmc时钟速率,总线位宽等 HAL_MMC_ConfigWideBusOperation。 整体流程图如下: 1 初始化外设控制器获取参数 HAL_MMC_Init 1.1 初始化GPIO(HAL_MMC_MspInit) 对外设控制器进行初始化,包括gpio,控制器参数,要使用的dma的配置。 1.2 初始化卡(HA...
1.1 初始化GPIO(HAL_MMC_MspInit) 对外设控制器进行初始化,包括gpio,控制器参数,要使用的dma的配置。 1.2 初始化卡(HAL_MMC_InitCard) 1.2.1 初始化总线位宽、时钟(1bit线、速度400k以下)(SDMMC_Init) 1.2.2 卡时钟输出禁止(__HAL_MMC_DISABLE) 1.2.3 卡控制器电源使能(SDMMC_PowerState_ON) 1.2.4 ...
在HAL_StatusTypeDef HAL_MMC_Init(MMC_HandleTypeDef *hmmc)函数中加入适当延时:HAL_StatusTypeDef HAL_...
{DRESULT res = STA_NOINIT; int result; if(pdrv == MMC) {printf("\r\n---> disk_ioctl EMMC\r\n"); switch(cmd) {case GET_SECTOR_COUNT: *(DWORD * )buff = hmmc.MmcCard.BlockNbr; break; case GET_SECTOR_SIZE: *(DWORD * )buff = hmmc.MmcCard.BlockSize; break; case GET_BLOCK...
void MX_SDMMC1_MMC_Init(void) { /* USER CODE BEGIN SDMMC1_Init 0 */ /* USER CODE END SDMMC1_Init 0 */ /* USER CODE BEGIN SDMMC1_Init 1 */ /* USER CODE END SDMMC1_Init 1 */ hmmc1.Instance = SDMMC1; hmmc1.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING; ...
Instance基地址:SDMMC寄存器基地址指针,所有参数都是指定基地址后才能正确写入寄存器。 Init初始化结构体:SDMMC的初始化结构体,下面会详细讲解每一个成员。 Lock:SDMMC锁资源。 pTxBuffPtr:用来存放发送数据地址的指针。 TxXferSize:用来指定需要发送数据的大小。 pRxBuffPtr:用来存放接受数据地址的指针。 RxXferSize...
STM32 HAL库有其很好的优点,但是也有其很麻烦的缺点,对于简单的外设比如GPIO/SPI等等,可以使用LL库进行性能优化,对于SDMMC/ETH/SAI/DSI这些外设,不得不使用HAL库.直接操作寄存器是最不推荐的选择.要想以最小代价引入HAL库,浙江涉及到最后HAL_Init这个函数了. ...
SDMMC的DMA的TX和RX通道都配置好了,SD中断优先级5,DMA收发的优先级都是6。调用stm32xxxx_hal_sd.c文件中的HAL_SD_WriteBlocks_DMA和HAL_SD_ReadBlocks_DMA两个函数读写SD卡的某一个扇区。 问题如下: 问题1:HAL_SD_WriteBlocks_DMA()写1个扇区,用PC下的扇区读取工具看,发现前两个字节永远都是0xff,真实...
HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_SDMMC1_SD_Init(); uint8_t dataBuffer[512]; // eMMC块大小通常为512字节 while (1) { // 读取数据 eMMC_ReadBlocks(dataBuffer, 0, 1); // 从地址0开始读取1个块 // 处理读取到的数据 ...
b、HAL_MDMA_Init c、__HAL_LINKDMA 如果需要中断处理,需要配置NVIC a、HAL_NVIC_SetPriority b、HAL_NVIC_EnableIRQ c、SDMMC的中断使能和禁止函数__HAL_SD_ENABLE_IT,__HAL_SD_DISABLE_IT d、中断标志位处理__HAL_SD_GET_IT和__HAL_SD_CLEAR_IT ...