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卡的文件管理系统已经全部完成,博主也是各种踩坑,最后也是在网友不断帮助下实现了移植该系统,希望可以给其他人一些帮助,同时也是对整个过程的一个总结。

  • 相关阅读:
    Using Resource File on DotNet
    C++/CLI VS CSharp
    JIT VS NGen
    [Tip: disable vc intellisense]VS2008 VC Intelisense issue
    UVa 10891 Game of Sum(经典博弈区间DP)
    UVa 10723 Cyborg Genes(LCS变种)
    UVa 607 Scheduling Lectures(简单DP)
    UVa 10401 Injured Queen Problem(简单DP)
    UVa 10313 Pay the Price(类似数字分解DP)
    UVa 10635 Prince and Princess(LCS N*logN)
  • 原文地址:https://www.cnblogs.com/showtime20190824/p/11523402.html
Copyright © 2011-2022 走看看