【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、总结
记录,总结,成长。