STM32H750ZBT6核心板设计

成品图

STM32H750ZBT6核心板设计_第1张图片

STM32H750ZBT6核心板设计_第2张图片

注意事项

1、主频无法设置480Mhz,只能最高设置为400Mhz

STM32H750ZBT6核心板设计_第3张图片STM32H750ZBT6核心板设计_第4张图片 

设置版本号为V版本,即稳定版本即可以设置主频为480Mhz了,不清楚自己的STM32H750是什么版本,可以查看芯片上丝印,ST公司LOGO旁边有个Y/V,即是版本号。

2、程序超过128KB,STM32CUBEIDE无法烧录隐藏的2MB Flash空间

使用ST-Link烧录器,可以参考这篇博客:

【ART-PI】使用STM32H750的隐藏2MB ROM_指尖字符的博客-CSDN博客

使用DAP烧录器,我也没找到方法,目前暂时使用STM32CubeProgrammer软件利用DFU烧录超过128kB的程序。

3、SD卡FatFS文件系统检测硬件:Platform Setting

STM32H750ZBT6核心板设计_第5张图片 

随便选一个引脚,即便冲突也没关系。然后修改以下代码:

STM32H750ZBT6核心板设计_第6张图片

4、最后分享如何使用FatFS系统在SD卡建立工作文件夹并且保存大量数据

SD_Card_Save_Data.h

/*
 * SD_Card_Save_Data.h
 *
 *  Created on: 2023年4月3日
 *      Author: Administrator
 */

#ifndef INC_SD_CARD_SAVE_DATA_H_
#define INC_SD_CARD_SAVE_DATA_H_

#include "stm32h7xx.h"
#include "stm32h7xx_hal.h"

void SD_Card_Folder_Init(void);
void SD_Card_File_CSV_Init(uint16_t ID);
void SD_Card_File_CSV_Write(uint16_t save_data_num, uint16_t ID);


#endif /* INC_SD_CARD_SAVE_DATA_H_ */

SD_Card_Save_Data.c

/*
 * SD_Card_Save_Data.c
 *
 *  Created on: 2023年4月3日
 *      Author: Administrator
 */

#include "../../BSP/SD_Card/SD_Card.h"
#include "fatfs.h"
#include "ff.h"
#include "SD_Card_Save_Data.h"

#include "BP_Learn.h"

extern uint8_t retSD; /* Return value for SD */
extern char SDPath[4]; /* SD logical drive path */
extern FATFS SDFatFS; /* File system object for SD logical drive */
extern FIL SDFile; /* File object for SD */
extern SD_HandleTypeDef hsd1;


extern float Uo_pre_data[Save_Num];
extern float Uo_data[Save_Num];
extern float omeag1_data[Save_Num];
extern float omeag3_data[Save_Num];

const char Work_Floder[]= "BP Learn";


FRESULT scan_files_del(TCHAR* path)//递归删除文件
{
	FRESULT res;
	DIR dir;
	UINT i;
	static FILINFO fno;

	res = f_opendir(&dir, path);//打开此文件夹
	if (res == FR_OK){//成功打开文件夹
		for (;;){//循环扫描文件夹和文件
			res = f_readdir(&dir, &fno);//读取此文件家中的一个子文件
			if (res != FR_OK || fno.fname[0] == 0) break;//读取错误或者已经扫描完此文件夹下的所有文件,跳出循环
			if (fno.fattrib & AM_DIR) {//子文件为文件夹
				i = strlen(path);//统计附文件夹路径长度
				sprintf((char*)&path[i], "\\%s", fno.fname);//将子文件夹名加入路径
				res = scan_files_del(path);//递归进入子文件夹,扫描文件夹
				if (res != FR_OK) break;//操作失败跳出循环
				path[i] =0;//文件路径回退
			}
			else {//子文件为  文件类型
				i = strlen(path);//统计附文件夹路径长度
				sprintf((char*)&path[i], "\\%s", fno.fname);//将子文件名加入路径
				res=f_unlink(path);//删除子文件
				path[i] =0;//文件路径回退
			}
		}
		res=f_closedir(&dir);//挂你打开的父文件夹
		res=f_unlink(path);//删除已经清空的父文件夹
	}
	return res;
}


void SD_Card_Folder_Init(void)
{
	FRESULT result;

	char path[64];

	HAL_SD_Init(&hsd1);
	HAL_SD_InitCard(&hsd1);

	result = f_mount(&SDFatFS, (const TCHAR *)SDPath, 0); /* Mount a logical drive */
	if (result != FR_OK)
		while(1);

	sprintf(path, "%s%s", SDPath,Work_Floder);
	scan_files_del(path);
	f_mkdir(path);
}


void SD_Card_File_CSV_Init(uint16_t ID)
{
	char FsWriteBuf[256];
	UINT bw;

	sprintf(FsWriteBuf, "%s%s/Data%d.csv",SDPath, Work_Floder,ID);
	f_open(&SDFile, (const TCHAR *)FsWriteBuf, FA_CREATE_ALWAYS|FA_WRITE);
	sprintf(FsWriteBuf, "Uo_pre_data,Uo_now_data,w1_data,w3_data\r\n");
	f_write(&SDFile, FsWriteBuf, strlen(FsWriteBuf), &bw);
	f_close(&SDFile);
}


void SD_Card_File_CSV_Write(uint16_t save_data_num, uint16_t ID)
{

	char FsWriteBuf[256];
	UINT bw;

	uint16_t index;

	sprintf(FsWriteBuf, "%s%s/Data%d.csv",SDPath, Work_Floder,ID);
	f_open(&SDFile, (const TCHAR *)FsWriteBuf, FA_WRITE|FA_OPEN_APPEND);

	for(index=0;index

你可能感兴趣的:(单片机,stm32,嵌入式硬件)