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卡的文件管理系統已經全部完成,博主也是各種踩坑,最后也是在網友不斷幫助下實現了移植該系統,希望可以給其他人一些幫助,同時也是對整個過程的一個總結。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM