zoukankan      html  css  js  c++  java
  • STM32F429 利用CUBEMX移植FATFS文件系统成功!!!

    文件系统对于一个专业的嵌入式系统而言必不可少,博主这两天利用STM32F429成功移植了FATFS,特来分享一下学习心得,避免新人采坑。

    我是在SD卡上实现的,因此你需要利用SDIO接口扩展一个SD卡,具体实现如下:

     进入Configuration界面,基本参数的不用配置,但是需要开启中断和DMA,配置如下:

     

     点击OK,关闭Configuration窗口。

    在MiddleWares下拉列表中打开FATFS,选中SD卡。

     进入FATFS的Configuration界面,配置如下:

     解释一下改动的两个参数,一个选择读取中文类型的文件,另一个是使能长字节名称命名(如果不选择,只有8字节,超过8字节会出现Hardware Fault),文件系统的磁盘选择3个(方便挂载其他内存)

    最后,再设置选择中,把stack的空间大小设置为0X1000大小。

     以上,便完成可在CUBEMX中配置FATFS文件系统,点击生成工程文件。

    可以看到,在工程目录下,生成了这样一些文件:

     

     具体什么内容先不管,我们需要在main中添加一些代码测试我们的文件管理系统。

    首先添加如下所示的全局变量:

    /* USER CODE BEGIN PV */
    /* Private variables ---------------------------------------------------------*/
    uint32_t byteswritten;                /* File write counts */
    uint32_t bytesread;                   /* File read counts */
    uint8_t wtext[] = "This is STM32 working with FatFs"; /* File write buffer */
    uint8_t rtext[100];                     /* File read buffers */
    char filename[] = "STM32cube.txt";
    /* USER CODE END PV */

    在初始化之后,while(1)之前添加如下代码

    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_DMA_Init();
      MX_TIM6_Init();
      MX_FMC_Init();
      MX_USART1_UART_Init();
      MX_TIM7_Init();
      MX_USART3_UART_Init();
      MX_DMA2D_Init();
      MX_LTDC_Init();
      MX_SPI5_Init();
      MX_SDIO_SD_Init();
      MX_FATFS_Init();
    
      /* Initialize interrupts */
      MX_NVIC_Init();
      /* USER CODE BEGIN 2 */
        delay_init(180);
        LED_Init();
        KEY_Init();
        SDRAM_Init();
        LCD_Init();
        ESP8266_Init();                        //WIFI ͨѶģ¿é
        W25QXX_Init();                        //Íⲿ SPI FLASH --- 32MB
        FTL_Init();                                //Íⲿ NAND FLASH --- 512MB
        my_mem_init(SRAMIN);            //½«SRAMÖÐ60KBÄÚ´æÓÃÓÚÄÚ´æ¹ÜÀíϵͳ
        my_mem_init(SRAMEX);            //½«SDRAMÖÐ15MBÄÚ´æÓÃÓÚÄÚ´æ¹ÜÀíϵͳ
        ITEnable();
        PeriphInit();
        GUI_Init();
        Show_SDcard_Info();
        
        LCD_ShowString(400,400,400,24,24,"****** FatFs Example ******");
        retSD = f_mount(&SDFatFS, "0:", 0);
        if(retSD){
            LCD_ShowString(400,440,400,24,24,"****** mount error ******");
            LCD_ShowNum(800,440,retSD,2,24);
            Error_Handler();
        }
        else
            LCD_ShowString(400,440,400,24,24,"****** mount success!!! ******");
        
        retSD = f_open(&SDFile, filename, FA_CREATE_ALWAYS | FA_WRITE);
        if(retSD){
            LCD_ShowString(400,480,400,24,24,"****** open file error ******");
            LCD_ShowNum(800,480,retSD,2,24);
            Error_Handler();
        }
        else
            LCD_ShowString(400,480,400,24,24,"****** open file success!!! ******");
        
        retSD = f_write(&SDFile, wtext, sizeof(wtext), (void *)&byteswritten);
        if(retSD){
            LCD_ShowString(400,520,400,24,24,"****** write file error ******");
            LCD_ShowNum(800,520,retSD,2,24);
            Error_Handler();
        }
        else
            LCD_ShowString(400,520,400,24,24,"****** write file success!!! ******");
        
        retSD = f_close(&SDFile);
        if(retSD){
            LCD_ShowString(400,560,400,24,24,"****** close file error ******");
            LCD_ShowNum(800,560,retSD,2,24);
            Error_Handler();
        }
        else
            LCD_ShowString(400,560,400,24,24,"****** close file success!!! ******");
      /* USER CODE END 2 */
    
      /* Infinite loop */
      /* USER CODE BEGIN WHILE */
      while (1)
      {
    
      /* USER CODE END WHILE */
    
      /* USER CODE BEGIN 3 */
    
      }
      /* USER CODE END 3 */
    
    }

    OK,编译通过,下载程序,运行结果如下所示:

    之后你便可以在SD卡中找到你创建的文件STM32cube.txt。至此,在STM32F429上建立SD卡的文件管理系统已经全部完成,博主也是各种踩坑,最后也是在网友不断帮助下实现了移植该系统,希望可以给其他人一些帮助,同时也是对整个过程的一个总结。

  • 相关阅读:
    python设置环境变量(临时和永久)
    python items和setdefault函数
    Django学习day3——Django的简单使用
    DOS打印目录树到文件
    Django学习day2——Django安装与环境配置
    Django学习day1——Django的简单介绍
    sets,relations,and fuctions
    lecture 1
    number theory
    lecture 9.18
  • 原文地址:https://www.cnblogs.com/showtime20190824/p/11523402.html
Copyright © 2011-2022 走看看