STM32H750ZBT6核心板设计
成品图
注意事项
1、主频无法设置480Mhz,只能最高设置为400Mhz
设置版本号为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
随便选一个引脚,即便冲突也没关系。然后修改以下代码:
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<save_data_num;index++){sprintf(FsWriteBuf, "%f,%f,%f,%f\\r\\n",Uo_pre_data[index],Uo_data[index],omeag1_data[index],omeag3_data[index]);f_write(&SDFile, FsWriteBuf, strlen(FsWriteBuf), &bw);}f_close(&SDFile);
}