stm32通用外部spi下载算法实现

news2024/11/26 7:29:52

参考硬汉嵌入式:【实战技能】任何支持SWD接口的单片机都可以方便移植的SPI Flash烧写算法制作_哔哩哔哩_bilibili

该up主提供的stm32H7的模板工程,目前需求是实现基于正点原子探索者stm32f407zet6+W25Q128

下载算法实现步骤

  1. 使用cubemx建立一个LED工程,主要是配置系统时钟
  2. 复制系统时钟配置函数
  3. 复制stm32f4的hal库文件和添加头文件路径
  4. 添加必要的文件模板工程
  5. 修改gpio模拟spi外设的引脚system_stm32f4xx.c文件
  6. 修改FlashDev.c文件的的FlashDevice内部的参数,主要是flash的大小,和算法名称
  7. 修改输出文件名和mcu型号选择
  8. 编译生成flm下载算法文件

1.使用cubemx建立一个LED工程,主要是配置系统时钟
1.1 外部时钟
在这里插入图片描述

1.2设置主频
在这里插入图片描述

1.3生成工程如下

2.复制系统时钟配置函数
2.1复制 stm32f4xx_hal_conf.h 和system_stm32f4xx.c 到user目录下
在这里插入图片描述

3.复制stm32f4的hal库文件,添加头文件路径
复制hal库文件
在这里插入图片描述

添加头文路径
在这里插入图片描述

复制系统时钟配置函数
注意:系统时钟函数必须返回0,表示时钟配置成功,否则初始化就是失败
在这里插入图片描述

4.添加必要的文件模板工程

在这里插入图片描述

5.修改gpio模拟spi外设的引脚和添加system_stm32f4xx.c文件
硬件连接

spi涉及的gpio配置
GPIOB3======>SPI_CLK
GPIOB4======>SPI_MISO
GPIOB5======>SPI_MOSI
GPIOB6======>SPI_CS
在这里插入图片描述
在这里插入图片描述

6.修改FlashDev.c文件的的FlashDevice内部的参数,主要是flash的大小,和算法名称

在这里插入图片描述

7.修改输出文件名和mcu型号选择
输出文件
在这里插入图片描述

修改CPU型号

在这里插入图片描述
修改添加宏定义

STM32F407xx
在这里插入图片描述

8.最后编译生成flm文件

在这里插入图片描述

  1. flm文件的使用
    2.1复制flm文件到指定文件夹

C:\Keil_v5\ARM\Flash
在这里插入图片描述

2.2创建一个工程,复制一个字库文件,将字库文件内容存储在外部flash中
添加一个ROM存储区域
在这里插入图片描述

添加一个字库文件放置在工程内部,设置字库文件的放置位置
在这里插入图片描述

修改存储区域入口

放置编译一优化

-keep=gb2312.o

在这里插入图片描述

选择存储区域
在这里插入图片描述
在这里插入图片描述

添加下载算法
在这里插入图片描述

设置算法
在这里插入图片描述

下载测试
下载中。。。。
在这里插入图片描述

检验中。。。。。
在这里插入图片描述

检验完成
在这里插入图片描述
代码仓库:https://gitcode.net/u010261063/temp_project#stm32%E9%80%9A%E7%94%A8spi%E4%B8%8B%E8%BD%BD%E7%AE%97%E6%B3%95%E5%AE%9E%E7%8E%B0

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

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

相关文章

postgresql walsender源码分析

专栏内容:postgresql内核源码分析个人主页:我的主页座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 目录 前言 介绍 数据结构 WAL对端的状态 walsender进程 WALsender交互流程 在…

【连续介质力学】张量分量的变换定律

张量分量的变换定律 张量的分量是依赖于坐标系的,所以当坐标系发生旋转,张量分量也会发生改变,张量分量与坐标系通过分量变换规律互相关联起来的。 考虑在正交基 ( e ^ 1 , e ^ 2 , e ^ 3 ) (\hat e_1, \hat e_2, \hat e_3) (e^1​,e^2​,…

【51单片机】串口通信使用串口通信控制LED灯

🎊专栏【51单片机】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【51单片机】 🥰大一同学小吉,欢迎并且感谢大家指出我的问题🥰 目录 🍔串口通信 😎代码…

HTTP1.1(四)URI

一 URI的基本格式以及与URL的区别 ① URI直观感受 1)URI是HTTP协议的重要组成部分2)ABNF如何严格定义URI ② URL、URN、URI ③ URI细讲 ④ URI的组成 ⑤ ABNF关于URI定义 blob:http 地址的原理及生成方法 video 标签 src 带有blob:http data…

NetCore发布到Docker-单机

一.git安装 1.下载 https://github.com/git/git/releases/tag/v2.40.1 2.将本地的安装包上传到 linux 服务器上,我这里放在 /opt/git/ 目录下 3.解压压缩包,得到目录 git-2.40.1,位置在 /opt/git/git-2.40.1 tar -zxvf git-2.40.1.tar.gz 4.…

【刷题之路】LeetCode 225. 用队列实现栈

【刷题之路】LeetCode 225. 用队列实现栈 一、题目描述二、解题1、主要思路解析2、先实现栈3、实现各个接口3.1、初始化接口3.2、push接口3.3、pop接口3.4、myStackTop接口3.5、myStackEmpty接口3.6、myStackFree接口 一、题目描述 原题连接: 225. 用队列实现栈 题…

如何选择合适的自动化测试工具? 我教你

目录 前言 选择最佳自动化测试工具的重要性 自动化测试工具的种类 选择自动化测试工具时要考虑的因素 自动化测试工具的选择标准 前言 自动化测试是高质量软件交付领域中最重要的实践之一。在今天的敏捷开发方法中,几乎任一软件开发过程都需要在开发阶段的某个…

测试工具-JIRA

软件测试工具—JIRA使用 1.创建 项目:一般为业务线名称 问题类型:任务、故事、缺陷等 概要:bug的简要描述,一般写出定位地方和目前现状 Sprint:一般为业务线迭代简称 测试阶段:按照各公司的测试流程对应标…

vlc搭建rtsp直播Demo

文章目录 学习链接本地视频文件作为数据源推流步骤拉流步骤 本地摄像头作为数据源拉流步骤 学习链接 ffmpeg 使用VLC亲手搭建RTSP直播点播 本地视频文件作为数据源 推流步骤 点击媒体->流 点击添加,选择视频文件,后点击串流 点击串流后&#xf…

linux异步通知实验

一、异步通知简介 中断是处理器提供的一种异步机制,配置好中断后就可以让处理器去处理其他的事情,当中断发生以后会执行中断服务函数,在中断服务函数中做具体的处理。 Linux 应用程序可以通过阻塞或者非阻塞两种方式来访问驱动设备&#xff0…

04:mysql--DCL

目录 1:介绍 2:语法 3:DCL的使用 4:权限 1:介绍 DCL英文全称是Data ControlLanguage(数据控制语言),用来管理数据库 用户、控制数据库的访问 权限。 2:语法 DCL-管理用户 查询用户 use mysql; select * from user; 创建用户 create user "用户名&quo…

缓存服务器概述

一、概述 主要功能:应用解耦,异步消息,流量削锋等问题 架构设计:实现高性能,高可用,可伸缩和最终一致性架构 常用消息队列:ActiveMQ,RabbitMQ,ZeroMQ,Kafka…

谷歌chrome浏览器升级新版后字体显示不清楚解决方案

谷歌chrome浏览器升级新版后字体显示不清楚解决方案 参考图片: Chrome更新至版本Chrome 109.0.5414.120 字体看不清 浏览器症状与表现 Chrome更新至版本Chrome 109.0.5414.120 字体看不清;会很细,在设置中选择自定义的字体,仍无法…

MySQL数据库笔记-基础篇

文章目录 MySQL概述数据库相关概念小总结 MySQL数据库版本:启动与停止客户端连接关系型数据库数据模型小总结 SQLSQL通用语法SQL分类DDL数据库操作查询创建数据类型数据类型的使用练习 修改删除小总结 DML添加数据修改数据删除数据小总结 DQLDCL MySQL概述 数据库相…

BI技巧丨矩阵甘特图

BOSS:白茶,我们最近有很多项目,能不能做个甘特图? 白茶:没问题!(应用市场上随便找个甘特图就OK了嘛!) BOSS:对了,不要那种点进来会有点卡&#xf…

二、数据结构1:单链表 模板题+算法模板(单链表)

文章目录 算法模板单链表题目模板 模板题单链表原题链接题目思路题解 算法模板 单链表题目模板 // head存储链表头,e[]存储节点的值,ne[]存储节点的next指针,idx表示当前用到了哪个节点 int head, e[N], ne[N], idx;// 初始化 void init() …

【001】C++的第一个程序Hello World

C的第一个应用程序(Hello World程序) 引言一、代码二、代码解释三、注意事项四、注释语句总结 引言 💡 作者简介:专注于C/C高性能程序设计和开发,理论与代码实践结合,让世界没有难学的技术。 👉…

《JavaEE》网络编程套接字

文章目录 Socket我们来解释一下上面叫做有无连接我们再来理解一下上面是可靠传输和不可靠传输面向字节流与面向数据报的区别(后期会具体分析这个)全双工 单双工 UDPDatagramSocketDatagramPacket我们来尝试写一下UDP版本的代码 TCPServerSocketSocket我们…

什么年代了?不会还有人不会插件化吧?

一.到底什么是插件化开发 插件化开发是将整个app拆分成很多模块,这些模块包括一个宿主和多个插件,每个模块都是一个apk,最终打包的时候将宿主apk和插件apk分开或者联合打包。 为什么要将一定要使用插件化开发呢? 宿…

【Linux】一文带你掌握Linux权限!

Linux权限 问题一:Linux下的用户分类有哪些?问题二:什么叫做权限?问题三:见一见没有权限是什么现象(看看就好了)问题四:权限的修改问题。chmodchownchgrp 问题五:其他问题(三个小问题)文件的初始…