HAL库 CubeMX STM32通过SDIO模式实现对SD卡的读写 |
您所在的位置:网站首页 › 单片机sd卡读写速度慢 › HAL库 CubeMX STM32通过SDIO模式实现对SD卡的读写 |
开发环境: STM32CubeMX 5.6.0 Keil MDK 5.33 STM32F103RET6开发板 16G SD-Micro存储卡 SD卡SD卡大家一定都不陌生,不过我想很多年龄不是很大的人(比如我)可能都对SD卡不是很了解,在我们的意识中,可能大家以为SD卡长这样 选中开发板之后,首先对系统内核进行配置: 接下来接进行SD卡读取的代码编写,在代码编写之前,需要做些准备工作: 1、确定你的开发板上有SDIO模块 2、你的SD卡为一块小于或等于32G的存储卡,因为目前大多数单片机只支持SC和HC类型的卡,这与单片机所遵循的SD卡协议有关系,总之,你的单片机很有可能不支持XC类型的卡,如果确定支持XC的卡也可以用。 3、对你的SD卡用读卡器进行格式化,格式化为FAT32模式的文件系统,分配单元自己定,分配单元越小,空间利用率越高(第三步格式化为FAT32模式,也为用FatFs系统开发做准备)。 以上便是我们的准备工作,打开我们生成的工程之后,首先带领大家认识几个我们会用到的函数: 在stm32f1xx_hal_sd.c源文件中的SD卡初始化函数: 首先在/* Private define /下的/ USER CODE BEGIN PD /和/ USER CODE END PD */之间定义一些宏(不在这里定义也可以,但是这里是官方给大家定义的写宏的区域,我希望大家初学养成一个规范的好习惯) #define BLOCK_SIZE 512 // SD卡块大小 #define NUMBER_OF_BLOCKS 1 // 测试块数量(小于15) #define WRITE_READ_ADDRESS 0x00000000 // 测试读写地址然后在/* Private variables /下的/ USER CODE BEGIN PD /和/ USER CODE END PD */创建写数组和读数组 /* 注意我们这里设置的数字一个元素占4字节,元素个数为128个, 所以这一个数组申请的内存空间为512字节,正好为我们SD卡的一个扇区 */ __align(4) uint32_t Buffer_Block_Tx[BLOCK_SIZE*NUMBER_OF_BLOCKS/4]; //将要写入的数据放在这里,__align(4)是四字节对齐关键词 __align(4) uint32_t Buffer_Block_Rx[BLOCK_SIZE*NUMBER_OF_BLOCKS/4]; //将读出的数据放在此数组接下来进行SD卡的读写操作 在/* USER CODE BEGIN 2 /和/ USER CODE END 2 */之间添加代码 HAL_SD_InitCard(&hsd); //初始化SD卡,注意句柄 if(HAL_SD_Erase(&hsd,WRITE_READ_ADDRESS,WRITE_READ_ADDRESS + 0x00000200) == HAL_OK) { printf("Erase Successful\r\n"); HAL_Delay(20); //如果不延时可能到值写操作失败 if(HAL_SD_WriteBlocks(&hsd, (uint8_t *)Buffer_Block_Tx, WRITE_READ_ADDRESS, NUMBER_OF_BLOCKS, 0xFFFF) == HAL_OK ) { printf("Write Successful\r\n"); HAL_Delay(20); if(HAL_SD_ReadBlocks(&hsd, (uint8_t *)Buffer_Block_Rx, WRITE_READ_ADDRESS, NUMBER_OF_BLOCKS, 0xFFFF) == HAL_OK) { printf("Raed Successful\r\n"); uint8_t j = 0; for(uint16_t i=0;i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |