rom大小 stm32f205_最小的基于STM32F205VE的系统板程序与ST-Link固件

该代码示例展示了如何在STM32微控制器上使用FATFS库初始化SD卡,并读取根目录下的文件列表。通过HAL库配置系统时钟,初始化GPIO、SDIO、FSMC等外设,实现文件系统的挂载和文件的遍历显示。
摘要由CSDN通过智能技术生成

/* Includes ------------------------------------------------------------------*/

#include "main.h"

#include "fatfs.h"

#include "sdio.h"

#include "gpio.h"

#include "fsmc.h"

/* Private includes ----------------------------------------------------------*/

/* USER CODE BEGIN Includes */

#include "stdlib.h"

#include "ILI9225.h"

#include "fonts.h"

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/

/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/

/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/

/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */

FATFS fs;

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/

void SystemClock_Config(void);

/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/

/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**

* @brief  The application entry point.

* @retval int

*/

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_SDIO_SD_Init();

MX_FATFS_Init();

MX_FSMC_Init();

/* USER CODE BEGIN 2 */

ILI9225_Init();

ILI9225_FillScreen(ILI9225_BLACK);

uint16_t delay = 100; // 为了展示方便而加的延时

HAL_Delay(delay);

FRESULT rst = f_mount(&fs, "0:", 1);

if (rst == FR_OK) {

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_9, GPIO_PIN_RESET);

ILI9225_WriteString(0, 0, "Mount drive : OK!", FONT_SONG_6X12, ILI9225_WHITE, ILI9225_BLACK);

}

else {

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_8, GPIO_PIN_RESET);

ILI9225_WriteString(0, 0, "Mount drive : Failed!", FONT_SONG_6X12, ILI9225_WHITE, ILI9225_BLACK);

}

HAL_Delay(delay);

FILINFO fileInfo;

fileInfo.lfsize = 255;

fileInfo.lfname = malloc(255);

DIR root;

uint16_t y = 0;

rst = f_opendir(&root, "0:");

if (rst == FR_OK) {

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_9, GPIO_PIN_RESET);

ILI9225_WriteString(0, (y += 12), "Listing root files : ", FONT_SONG_6X12, ILI9225_WHITE, ILI9225_BLACK);

ILI9225_WriteString(0, (y += 12), "--------------------", FONT_SONG_6X12, ILI9225_WHITE, ILI9225_BLACK);

HAL_Delay(1000);

while (1) {

rst = f_readdir(&root, &fileInfo);

if (rst != FR_OK || (!fileInfo.fname[0] && !fileInfo.fname[0])) {

break;

}

ILI9225_WriteString(0, (y += 12), "\\", FONT_SONG_6X12, ILI9225_WHITE, ILI9225_BLACK);

if (fileInfo.lfname[0]) {

ILI9225_WriteString(6, (y), fileInfo.lfname, FONT_SONG_6X12, ILI9225_WHITE, ILI9225_BLACK);

}

else {

ILI9225_WriteString(6, (y), fileInfo.fname, FONT_SONG_6X12, ILI9225_WHITE, ILI9225_BLACK);

}

HAL_Delay(delay);

}

}

else {

HAL_GPIO_WritePin(GPIOD, GPIO_PIN_8, GPIO_PIN_RESET);

ILI9225_WriteString(0, 12, "Listing root files : Failed!", FONT_SONG_6X12, ILI9225_WHITE, ILI9225_BLACK);

}

HAL_Delay(delay);

ILI9225_WriteString(0, (y += 12), "--------------------", FONT_SONG_6X12, ILI9225_WHITE, ILI9225_BLACK);

ILI9225_WriteString(0, (y += 12), "Completed!", FONT_SONG_6X12, ILI9225_WHITE, ILI9225_BLACK);

f_closedir(&root);

/* USER CODE END 2 */

/* Infinite loop */

/* USER CODE BEGIN WHILE */

while (1) {

/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */

}

/* USER CODE END 3 */

}

/**

* @brief System Clock Configuration

* @retval None

*/

void SystemClock_Config(void)

{

RCC_OscInitTypeDef RCC_OscInitStruct = {0};

RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

/** Initializes the CPU, AHB and APB busses clocks

*/

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;

RCC_OscInitStruct.HSEState = RCC_HSE_ON;

RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;

RCC_OscInitStruct.PLL.PLLM = 20;

RCC_OscInitStruct.PLL.PLLN = 192;

RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;

RCC_OscInitStruct.PLL.PLLQ = 5;

if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

{

Error_Handler();

}

/** Initializes the CPU, AHB and APB busses clocks

*/

RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;

RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;

RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;

RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK)

{

Error_Handler();

}

}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**

* @brief  This function is executed in case of error occurrence.

* @retval None

*/

void Error_Handler(void)

{

……………………

…………限于本文篇幅 余下代码请从51黑下载附件…………

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值