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