我是靠谱客的博主 孤独歌曲,最近开发中收集的这篇文章主要介绍用STM32F103 完成对SD卡的数据读取一、SD卡读写模块二、SPI协议三、代码分析四、接线五、总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

一、SD卡读写模块

二、SPI协议

三、代码分析

四、接线

五、总结


一、SD卡读写模块

        SD卡读写是指单片机读写SD卡/TF卡。SD卡是一种低电压的flash闪存产品,有标准的MMC/SPI两种操作模块。对于MMC操作模式,读写速度快,控制信号线多,操作复杂,对于SPI操作模块,速度慢,线少,操作相对简单。

关于SD卡读写模块在百度百科有更详细的解释:​​nullicon-default.png?t=LA92https://baike.baidu.com/item/SD%E5%8D%A1%E8%AF%BB%E5%86%99%E6%A8%A1%E5%9D%97/1455469?fr=aladdin链接如上,我在此不再赘述。

二、SPI协议

SD卡也是通过SPI协议进行通信,关于SPI协议的解释如下:

        SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议,比如AT91RM9200。

在百度百科有关于SPI协议更详细的解释:

SPI(SPI协议)_百度百科 (baidu.com)icon-default.png?t=LA92https://baike.baidu.com/item/SPI/53075243?fr=aladdin链接如上,在此我不再过多赘述。

三、代码分析

主函数

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* 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_SPI1_Init();
  MX_FATFS_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
    
    HAL_UART_Receive_IT(&huart1,&aRxBuffer1,1);     //enable uart    

    printf(" mian rn");

    Get_SDCard_Capacity();    //得到使用内存并选择格式化

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {        
        WritetoSD(WriteBuffer,sizeof(WriteBuffer));            
        HAL_Delay(500);
        WriteBuffer[0] = WriteBuffer[0] +0;
        WriteBuffer[1] = WriteBuffer[1] +1;
        write_cnt ++;        
        while(write_cnt > 10)
        {    
            printf(" while rn");
            HAL_Delay(500);
        }            
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}


SD卡写入函数

void WritetoSD(BYTE write_buff[],uint8_t bufSize)
{
    FATFS fs;
    FIL file;
    uint8_t res=0;
    UINT Bw;    
    
    res = SD_init();        //SD卡初始化
    
    if(res == 1)
    {
        printf("SD卡初始化失败! rn");        
    }
    else
    {
        printf("SD卡初始化成功! rn");        
    }
    
    res=f_mount(&fs,"0:",1);        //挂载
    
//    if(test_sd == 0)        //用于测试格式化
    if(res == FR_NO_FILESYSTEM)        //没有文件系统,格式化
    {
//        test_sd =1;                //用于测试格式化
        printf("没有文件系统! rn");        
        res = f_mkfs("", 0, 0);        //格式化sd卡
        if(res == FR_OK)
        {
            printf("格式化成功! rn");        
            res = f_mount(NULL,"0:",1);         //格式化后先取消挂载
            res = f_mount(&fs,"0:",1);            //重新挂载    
            if(res == FR_OK)
            {
                printf("SD卡已经成功挂载,可以进进行文件写入测试!rn");
            }    
        }
        else
        {
            printf("格式化失败! rn");        
        }
    }
    else if(res == FR_OK)
    {
        printf("挂载成功! rn");        
    }
    else
    {
        printf("挂载失败! rn");
    }    
    
    res = f_open(&file,SD_FileName,FA_OPEN_ALWAYS |FA_WRITE);
    if((res & FR_DENIED) == FR_DENIED)
    {
        printf("卡存储已满,写入失败!rn");        
    }
    
    f_lseek(&file, f_size(&file));//确保写词写入不会覆盖之前的数据
    if(res == FR_OK)
    {
        printf("打开成功/创建文件成功! rn");        
        res = f_write(&file,write_buff,bufSize,&Bw);        //写数据到SD卡
        if(res == FR_OK)
        {
            printf("文件写入成功! rn");            
        }
        else
        {
            printf("文件写入失败! rn");
        }        
    }
    else
    {
        printf("打开文件失败!rn");
    }    
    
    f_close(&file);                        //关闭文件        
    f_mount(NULL,"0:",1);         //取消挂载
    
}


程序首先进行相关初始化,完成后输出mian,之后进行SD卡格式化,成功后进入循环,进入SD卡读写函数,先后进行SD卡的初始化,挂载,创文件,写入,写入超过10次,输出while

四、接线

SD卡STM32 
      CS        PB0
SCKPA5
MISOPA6
MOSIPA7

五、总结

本次实验内容较多,本篇博客内容较清晰,如有不足请指出

最后

以上就是孤独歌曲为你收集整理的用STM32F103 完成对SD卡的数据读取一、SD卡读写模块二、SPI协议三、代码分析四、接线五、总结的全部内容,希望文章能够帮你解决用STM32F103 完成对SD卡的数据读取一、SD卡读写模块二、SPI协议三、代码分析四、接线五、总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部