当前位置: 首页 > news >正文

【QT调用ST-link-使用QT编写程序-调用ST-LINK_CLI.exe-烧写STM32F4xxx-基础样例】

【QT结合ST-link,使用QT编写程序,调用ST-LINK_CLI.exe,烧写STM32F4xxx-基础样例】

  • 1、前言
  • 2、实验环境
  • 3、先前了解-自我总结
  • 4、实验过程
    • (0)硬件连接与供电
    • (1)安装&使用STM32 ST-LINK Utility
    • (2)使用命令行工具 ST-LINK_CLI.exe
    • (3)新建QT工程
    • (4)代码结合
    • (5)实验结果
  • 5、实验代码
  • 6、具体细节
      • (1)如果使用软件时,提示找不到目标,
      • (2)SN可以算选择不加入
      • (3)文本框接受数据问题
      • (4)参数问题:
      • (5)报错:...St-LINK detected! ......
      • (6)显示超时问题:Timeout during flash ....
  • 7、总结

1、前言

最近在研究编写qt烧写STM32芯片,仿照STM32 ST-LINK Utility烧写工具,主要是是自己调试工具,不可能每次烧写固件,都需要调用STM32 ST-LINK Utility工具去烧,很麻烦的,另外给客户或者其他人使用,也不可能让他自己使用STM32 ST-LINK Utility烧写,所以做出一体的。

我开始也不知道怎么做,差了一些资料,目前如果使用qt的话,一般是都是使用qt调用st-link
相关工具,qt本身不具备烧写功能。

2、实验环境

实验环境还是挺重要的,因为有时候,在你电脑上能运行的东西,在别人的电脑就不一定能运行,这一部分的原因就可能是实验版本不一样。
系统环境:window环境
QT软件版本:qt 5.14.2
ST-Link命令行工具的版本号:STM32 ST-LINK CLI v3.6.0.0
硬件开发板:STM32F407ZET6(正点原子:探索者)
下载器:ST-link
在这里插入图片描述

3、先前了解-自我总结

(1)QProcess类的了解
目前看网上资料说,调用外部exe外部程序等,一般都需要这个类Qprocess。
这边有个简单简绍可以看下:https://blog.csdn.net/tianshi_1988/article/details/48273359
在这里插入图片描述

如果深入了解的话,可以直接看官网资料。
https://doc.qt.io/qt-6/qprocess.html
在这里插入图片描述

(2)下载工具ST-link的相关软件
一般下载的话,我们会可能会使用编译器内带的,如果有问题的话,才会考虑使用STM32 ST-LINK Utility或者STM32CubeProgrammer,然后弄个ST-link或者J-link硬件。
在这里插入图片描述
我们无论使用哪个工具,都需要保证软件是可用的,两个软件都可以去官网下载:
https://www.st.com/content/st_com/zh/search.html#q=STM32%20ST-LINK%20Utility-t=tools-page=1
在这里插入图片描述

(3)ST-LINK_CLI.exe与STM32_Programmer_CLI.exe
如上述图片,STM32 ST-LINK Utility工具装好后,会在对应文件目录下生成一个ST-LINK_CLI.exe文件,目录如下:
在这里插入图片描述
文件目录如下,一般默认的话就这个目录,这里也推荐默认的,后续编写qt程序要用。

//目录
C:\Program Files (x86)\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility

在这里插入图片描述
而对应的STM32CubeProgrammer软件也有个:

C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin

在这里插入图片描述
当然本次重点是使用ST-LINK_CLI.exe,并且只是用基础命令,更深可以自己研究,本篇主要是使用qt调用,这个了解就好。

4、实验过程

(0)硬件连接与供电

本次使用正点原子开发板F407,我们需要知道下载口是那几个,需要连接有3个引脚,供电直接使用适配器。
这里可以去查正点原子原理图,或者你自己板子原理图,如果是STM32,大部分应该是这个。

SWCLK  ---    PA14
SWDIO  ---    PA13
GND    ---    GND

在这里插入图片描述

(1)安装&使用STM32 ST-LINK Utility

对于初学者,还是先要熟悉一下STM32 ST-LINK Utility这个软件的,就是一个下载工具。为此我们之间使用正点原子官方样例的固件。关于资料相关,可以去正点原子官网去查找,这里就不提供了,面面俱到太啰嗦了。
固件位置如下。
在这里插入图片描述
使用软件STM32 ST-LINK Utility进行下载:
在这里插入图片描述
如上我们课获得很多信息,比如芯片FLASH size,ST-link的SN,和芯片时F4的。烧写成功如下。
在这里插入图片描述

(2)使用命令行工具 ST-LINK_CLI.exe

如果上述你成功,那么一般而言,ST-link_CLI就是可以使用的,你可以理解上边软件工具,其实也是调用 ST-LINK_CLI.exe这个,只不过软件是写好图形界面。
使用CMD,找到命令提示符。
在这里插入图片描述
然后进入相应目录,就可以执行相应命令。

在这里插入图片描述
默认目录的好处就是,如果你安装都是默认,那么你的目录应该和我这里一样的。
然后执行命令就可以烧写了,如下。

ST-LINK_CLI.exe -c SN=0016002A4D46500F20383832 SWD  -P C:/Users/Admin/Desktop/jaa/atk_f407.hex 0x08000000 -Rst

请注意找了ST-link的SN,需要根据自己下载器改,还有放置的目录也是一样的。,就是你要烧写的文件所在目录。
我开始不会时,也犯了各种错误,尝试了很多指令,总是报各种各样的问题,检验多尝试吧。
关于错误的,这块我忘记截图了,直接截图了成功的。
在这里插入图片描述
到这一步,你就基本会简单使用这个工具了,对于qt来说你已经验证了工具exe可用性。

(3)新建QT工程

新建qt空的工程,这个网上已很多,自己也说过,命好名字,一路向下。
弄好后,我们拉入一个文本框和按键,顺带编辑一下名字,布个局,直接运行下。

在这里插入图片描述

(4)代码结合

然后加入代码,代码也非常简单,不过20行。
1、第一步,编写功能代码。
在这里插入图片描述

2、第二步,引入头文件和在头文件中声明函数。
在这里插入图片描述
在这里插入图片描述

3、第三步,按键转到槽,让案件触发,收到信息发到文本框。
在这里插入图片描述
在这里插入图片描述

这里还是有很多注意点,自己也在这里卡了很久,有很多问题,都是参数编写错误导致。

(5)实验结果

看着文章挺简单的,但是实际上确实遇到很多问题,尤其是参数这块。
在这里插入图片描述

如上,就是使用一个简单qt程序调用烧写。更多情况,请看“具体细节

5、实验代码

实验代码-样例demo:https://download.csdn.net/download/qq_22146161/88174078

6、具体细节

(1)如果使用软件时,提示找不到目标,

1、有可能没供电
2、有可能线序不对,或连接问题
在这里插入图片描述

(2)SN可以算选择不加入

实际测试,可以不写入SN,也是可以,就是st-link的SN参数可以不带。

(3)文本框接受数据问题

如下问题,其实是文本框接受数据问题,我发现,是加入代码46行开始报的。
在这里插入图片描述
如下更改就没有问题了。
在这里插入图片描述

(4)参数问题:

“unknow debug protocol or option” 这里其实参数"p"写错了,应该是"-p",一直摸不到头脑。
在这里插入图片描述
后来尝试在参数前后加入空格,发现报错“Unknown,command!Use -? for help”,只能说前车之鉴,后车之师吧。

(5)报错:…St-LINK detected! …

如此这样问题,是因为软件ST-LINK_Utility 开始,断开连接后者关掉软件就可以了。
在这里插入图片描述

(6)显示超时问题:Timeout during flash …

这块需要注意烧写文件的大小,已经匹配芯片flash大小,我讲一个很大的文件烧写时候,发现文件太大了,结果没烧成功,就会报错,所有烧写时候,要注意。
在这里插入图片描述

7、总结

记录,总结,成长。

相关文章:

【QT调用ST-link-使用QT编写程序-调用ST-LINK_CLI.exe-烧写STM32F4xxx-基础样例】

【QT结合ST-link,使用QT编写程序,调用ST-LINK_CLI.exe,烧写STM32F4xxx-基础样例】 1、前言2、实验环境3、先前了解-自我总结4、实验过程(0)硬件连接与供电(1)安装&使用STM32 ST-LINK Utility&#xff0…...

高并发下的Java项目解决方案

高并发下的Java项目解决方案 在当今的互联网时代,高并发是Java项目在设计和开发过程中必须要考虑的重要因素之一。本文将详细介绍如何在Java项目中处理高并发的问题,并提供具体的解决方案。我们将主要讨论四个主要的主题:服务器扩展&#xf…...

华为推出手机系统云翻新服务:什么是云翻新?如何使用?

华为手机系统云翻新是华为推出的一项功能,旨在通过云服务提供系统翻新的服务。它可以帮助用户对手机的系统进行优化和更新,以提高手机的性能和流畅度。具体而言,华为手机系统云翻新功能提供了免费的云空间,用户可以将手机中的系统…...

修改时间和创建时间的设计问题

记录一次 在django框架开发中遇到问题: 想要的逻辑: 当在保存数据时,create_time字段只会在新建数据时被设置为当前时间,并且之后不会再修改,而modify_time字段在每次保存数据时都会被设置为当前时间也可以为空&…...

CentOS 搭建 Harbor 镜像仓库(图文详解)

本文目录 1. 下载 Harbor 安装包2. 解压3. 修改配置文件4. 安装 Harbor5. 修改 docker 配置6. docker 登录方式7. 访问 Harbor Web 界面8. 创建证书9. 生成证书10. 更新配置11. 网页登录 说明:在搭建 Harbor 镜像仓库之前,虚拟机要先安装 docker 和 dock…...

【云原生】k8s组件架构介绍与K8s最新版部署

个人主页:征服bug-CSDN博客 kubernetes专栏:kubernetes_征服bug的博客-CSDN博客 目录 1 集群组件 1.1 控制平面组件(Control Plane Components) 1.2 Node 组件 1.3 插件 (Addons) 2 集群架构详细 3 集群搭建[重点] 3.1 mi…...

你真的了解什么是生成式AI吗?

最近正好有这样的机会,让我给一群非技术人士介绍生成式AI,忙忙碌碌了一阵子,结果发现受众还是未能理解什么是生成式AI,到底和之前的AI有什么区别。因此希望此篇能够帮助普通人真正理解生成式AI,有个直观印象。 人工智…...

Linux--高级IO

高级IO 1. 五种IO模型 阻塞IO:在内核将数据准备好之前,系统调用会一直等待。 所有的套接字,默认都是阻塞方式。阻塞IO是最常见的IO模型。 非阻塞IO:如果内核还未将数据准备好,系统调用仍然会直接返回,并…...

【C# 基础精讲】C# 开发环境搭建(Visual Studio等)

安装C#开发环境是开始学习和使用C#编程的第一步。目前,最常用的C#开发环境是Microsoft Visual Studio,它是一套强大的集成开发环境(IDE),提供了丰富的工具和功能,使开发C#应用程序变得更加便捷。以下是安装…...

谷粒商城第九天-解决商品品牌问题以及前后端使用检验框架检验参数

目录 一、总述 二、商品分类问题 三、前端检验 四、后端检验 五、总结 一、总述 在完成完商品分类的时候,后来测试的时候还是发现了一些问题,现在将其进行解决,问题如下: 1. 取消显示的时候,如果取消了显示&…...

Java8函数式接口

在工作中我需要,我需要递归处理复杂嵌套的JSON字符串,然后处理方法有多种,为了代码通用性,我想要把处理方法当作参数,传入到函数中,然后根据不同的处理方法处理字符串。通过查资料得知,可以使用…...

.Net6 Web Core API --- Autofac -- AOP

目录 一、AOP 封装 二、类拦截 案例 三、接口拦截器 案例 AOP拦截器 可开启 类拦截器 和 接口拦截器 类拦截器 --- 只有方法标注 virtual 标识才会启动 接口拦截器 --- 所有实现接口的方法都会启动 一、AOP 封装 // 在 Program.cs 配置 builder.AddAOPExt();//自定义 A…...

RocketMQ基本概念和高级原理

基础概念 消息模型 RocketMQ 主要由 Producer、Broker、Consumer 三部分组成,其中 Producer 负责生产消息,Consumer 负责消费消息,Broker 负责存储消息。Broker 在实际部署过程中对应一台服务器,每个 Broker 可以存储多个 Topic…...

小白到运维工程师自学之路 第六十六集 (docker 网络模型)

一、概述 Docker网络模型是指Docker容器在网络中的通信方式和组织结构。Docker容器通过网络连接,使得容器之间可以相互通信,并与主机和外部网络进行交互。 在Docker中,有几种不同的网络模型可供选择: 1、主机模式(H…...

Go和Java实现建造者模式

Go和Java实现建造者模式 下面通过一个构造人身体不同部位的案例来说明构造者模式的使用。 1、建造者模式 建造者模式使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了 一种创建对象的最佳方式。 一个 Builder 类会…...

AutoSAR系列讲解(实践篇)11.6-服务映射(自顶向下)

目录 一、配置Service Needs 二、配置Cfg同步 我们在下一节的实验课中讲解这里的具体配置流程,本节主要讲一下这些配置的大致流程和配置项的作用。NvBlockSwComponents是一个可选项, 我们这里开始不使用NvBlockSwComponents,将我们的Application SWC直接和NvM通过C/S连接起…...

EXCEL, 用if({1,0,0} ...) 实现把给定的区域,输出为任意你想要的矩阵,数组区域!

目录 1 原材料:这样的一个区域 工具 if({1,0,0}) 数组公式 1.1 原始数据 1.2 原理 if(0/1,t-value,f-value)---变形--->if({},range1,range2) 1.2.1 if(0/1,t-value,f-value)---变形--->if({},range1,range2) 1.2.2 原理1: if 数组原理&#…...

c++实现Qt对象树机制

文章目录 对象树是什么使用对象树的好处使用c实现对象树 对象树是什么 我们常常听到 QObject 会用对象树来组织管理自己&#xff0c;那什么是对象树&#xff1f;  这个概念非常好理解。因为 QObject 类就有一个私有变量 QList<QObject *>&#xff0c;专门存储这个类的子…...

骨传导蓝牙耳机排行榜,精选五款排名最靠前的耳机

不知道大家在挑选耳机的时候会考虑什么&#xff1f;有些人会考虑耳机的功能、有些会考虑价格&#xff0c;还有的会考虑品牌等因素&#xff0c;但是综合下来&#xff0c;我们作为消费者无非是想要一款音质很好&#xff0c;而佩戴又很适合我们的耳机&#xff5e;我们年轻人作为耳…...

JDBC用法小结

JDBC用法小结 本文实例总结了JDBC的用法。分享给大家供大家参考。具体分析如下&#xff1a; DriverManger:驱动管理器类 要操作数据库&#xff0c;必须先与数据库创建连接&#xff0c;得到连接对象 public static Connection getConnection(String url, String username,Str…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码&#xff1a;HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...