STM32H750ZBT6核心板设计

news2025/1/19 3:30:07

成品图

注意事项

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);
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/422671.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

零碎Java

1. 1995年Sun公司开发了java 2009年Oracle收购了Sun公司 其中2004年的java5.0和2014年的java8.0更新力度最大 java特性&#xff1a;第一至今已有20多年了 第二编程语言 第三应用广泛 2. 二进制中逢二进一 11 10 111100 0000万 0000&#xff0c;0000亿 …

RK3568平台开发系列讲解(设备驱动篇)V4L2程序实现流程

🚀返回专栏总目录 文章目录 一、V4L2 进行视频采集二、命令标识符三、V4L2程序实例3.1、打开设备3.2、查询设备属性3.3、显示所有支持的格式3.4、设置图像帧格式3.5、申请缓冲区3.6、将申请的缓冲帧从内核空间映射到用户空间3.7、将申请的缓冲帧放入队列,并启动数据流3.8、启…

配置mpls vpn MCE组网

实验三&#xff1a;配置mpls vpn MCE组网 1、实验环境&#xff1a; 某公司需要通过mpls vpn实现总部和分部的互访&#xff0c;并且要实现不同部门之间的业务隔离&#xff0c;为了节省开支&#xff0c;总公司使用MCE设备接入不同的部门。要求分公司A只能访问总公司的部门A&…

分子生物学 第二章 遗传物质

文章目录第二章 遗传物质第一节 遗传物质的分子本质大多数生物体的遗传物质是DNA有些生物体的遗传物质是RNA蛋白质能否充当遗传物质第二节 核酸的结构1 DNA双螺旋结构的特征2 影响DNA双螺旋结构稳定性的因素3 DNA结构的多态性4 DNA多链结构5 DNA的超螺旋结构6 RNA的二级结构第三…

性能测评:腾讯云轻量2核4G5M服务器CPU内存带宽流量系统盘

2核4G云服务器可以选择腾讯云轻量应用服务器&#xff0c;自带5M公网带宽&#xff0c;5M带宽下载速度峰值可达640KB/秒&#xff0c;系统盘为60GB SSD盘&#xff0c;每月500GB流量包&#xff0c;折合每天16GB流量&#xff0c;2核4G5M轻量服务器一年168、198元15个月、三年628元&a…

OpenMV快速上手 | OpenMV硬件版本概述及HelloWorld

文章目录一、OpenMV1. 什么是OpenMV2. OpenMV版本2.1. OpenMV1&#xff08;M4 V1&#xff09;2.2. OpemMV2&#xff08;M4 V2&#xff09;2.3. OpenMV3&#xff08;M7&#xff09;2.4. OpenMV4&#xff08;H7&#xff09;二、OpenMV开发环境搭建三、hello world1. 连接OpenMV2.…

Callable、Runnable、Future 和 FutureTask

Callable 和 Future 是 Java 在后续版本中引入的&#xff0c;Callable 类似于 Runnable 接口&#xff0c;实现 Callback 接口的类与实现 Runnable 接口的类都可以用于被被线程执行的任务。 以下是两个接口的相关源码&#xff1a; // /xref/libcore/ojluni/src/main/java/java…

我为什么开发个人版的ChatGPT,而不使用集成好的商业版的十大好处。

随着人工智能技术的不断发展&#xff0c;ChatGPT已经成为了许多人工智能爱好者的热门话题。然而&#xff0c;面对现有的商业版ChatGPT&#xff0c;许多人可能会感到疑惑&#xff1a;为什么要自己开发个人版的ChatGPT&#xff0c;而不是直接使用集成好的商业版&#xff1f;本文将…

C++ 并发编程

文章目录基本概念编程创建线程启动共享数据相关条件变量时间相关future相关——等待一次性事件读写锁原子操作与缓存一致性关系线程管理启动线程从类的方法来创建线程传参标识线程常用API等待线程完成后台运行线程移动线程间共享数据互斥量&#xff08;mutex&#xff09;unique…

公网WebSocket Client远程连接本地WebSocket Server【内网穿透】

目录 1. Java 服务端demo环境 2. 在pom文件引入第三包封装的netty框架maven坐标 3. 创建服务端,以接口模式调用,方便外部调用 4. 启动服务,出现以下信息表示启动成功,暴露端口默认9999 5. 创建隧道映射内网端口 6. 创建隧道映射本地端口 7. 测试公网远程连接 1. Java 服…

一文轻松教会你基于Excel+关键字驱动的自动化测试框架封装

目录 一、概述 二、框架设计 测试用例管理 关键字库封装 数据驱动设计 日志记录和报告生成 三、框架实现 测试用例管理 关键字库封装 数据驱动设计 日志记录和报告生成 四、框架使用 编写测试用例 编写关键字库 执行测试 五、总结 一、概述 在软件开发过程中&a…

【Spring Security】| 从0到1编写一个权限认证 | 学会了吗?

目录一. &#x1f981; 认证前的工作1. 添加依赖2. 创建数据库表&#xff08;数据自行添加&#xff09;3. 编写用户实体类4. 编写Dao接口5. 在启动类中添加 MapperScan 注解6. 继续添加各种包二. &#x1f981; 自定义逻辑认证原理—UserDetailsService三. &#x1f981; 数据库…

Android Studio Flamingo | 2022.2.1 发布,快来看看有什么更新吧

原文链接 https://developer.android.com/studio/releases 新的 Android Studio 版本 Flamingo (火烈鸟) 已经发布&#xff0c;本次更改最有意思的点在于&#xff1a; Flamingo 自带的 JDK 是 JDK 17 而不再是 JDK 11&#xff0c;另外还有如 IDE 支持应用主题图标和动态颜色&am…

TikTok和国产抖音的发展路径和趋势

鑫优尚电子商务&#xff1a;以历史为镜子&#xff0c;我们可以知道变化。 纵观TikTok和国产抖音&#xff0c;我们会发现TikTok目前的发展路径和趋势与国产抖音的主线十分相似&#xff0c;直播也是如此。鑫优尚电子商务 国内抖音直播一般经历过四个时代&#xff1a;直播1.0时代…

AIGC周报|清华、北邮新研究:让文生图AI更懂你

AIGC通过借鉴现有的、人类创造的内容来快速完成内容创作。ChatGPT、Bard等AI聊天机器人以及DallE 2、Stable Diffusion等文生图模型都属于AIGC的典型案例。「AIGC技术周报」将为你带来最新的paper、博客等前瞻性研究。 OpenAGI&#xff1a;当大模型遇见领域专家 “愿原力与大型…

分子生物学 第五章 DNA损伤修复和突变

文章目录第五章 DNA损伤修复和突变第一节第二节 DNA损伤的类型1 造成DNA损伤的因素2 DNA损伤的类型3 DNA损伤修复机制3.1 直接修复3.2 切除修复3.3 双链断裂修复3.4 重组修复3.5 跨越合成第五章 DNA损伤修复和突变 第一节 损伤&#xff1a;比如碱基&#xff0c;甲基化 突变&…

JavaSE学习进阶day04_04 正则表达式和Lambda表达式

第六章 正则表达式&#xff08;超级重要&#xff09; 开发心得&#xff1a;看着正确数据&#xff0c;从左到右书写正则表达式 6.1 正则表达式的概念及演示 在Java中&#xff0c;我们经常需要验证一些字符串&#xff0c;例如&#xff1a;年龄必须是2位的数字、用户名必须是8位…

爬虫日常练习-协程方式爬取图片

文章目录前言代码设计前言 hello朋友们&#xff0c;欢迎回来。这里是无聊的网友。今天给大家分享另一种处理多任务的方法–协程 那么在开始之前我们首先要了解什么是协程。协程是在一个线程内&#xff1a;多个任务出现阻塞时&#xff0c;由envet_loop轮转查看阻塞状态&#…

Zeppelin0.9.0 连接 Hive 3.1.2(踩坑,亲测有效)

一、前提 已经安装好Hadoop、Hive&#xff08;可以启动hiveserver2&#xff09;、Zeppelin 1.启动Hadoop [roothurys24 ~]# start-all.sh 2.启动hiveserver2 [roothurys24 ~]# cd /opt/soft/hive312/conf/ [roothurys24 conf]# nohup ../bin/hive --service hiveserver2 &a…

kubernetes之Ingress介绍

Ingress 组成 ingress controller将新加入的Ingress转化成Nginx的配置文件并使之生效 ingress服务将Nginx的配置抽象成一个Ingress对象&#xff0c;每添加一个新的服务只需写一个新的Ingress的yaml文件即可工作原理 1.ingress controller通过和kubernetes api交互&#xff0…