零死角玩转stm32初级篇1-STM32如何编译和下载程序

news2024/12/29 11:00:37

本篇博文目录:

      • 一.程序的编译
      • 二.程序的下载
        • 1.ISP方式
        • 2.JTAG方式
        • 3.SWD方式
        • 4.SWIM方式

一.程序的编译

Keil uVision5 工具中有四个编译如图在这里插入图片描述,他们分别表示什么意思,下面进行介绍,解释来源于<<零死角玩转stm32>>。

  • 第一个按钮: Translate 就是翻译当下修改过的文件,说明白点就是检查下有没有语法错误,并不会去链接库文件,也不会生成可执行文件。
  • 第二个按钮: Build 就是编译当下修改过的文件,它包含了语法检查,链接动态库文件,生成可执行文件。
  • 第三个按钮: Rebuild 重新编译整个工程,跟 Build 这个按钮实现的功能是一样的,但有所不同的是它编译的是整个工程的所有文件,耗时巨大。

综上:当我们编辑好我们的程序之后,只需要用第二个 Build 按钮就可以,即方便又省时。第一个跟第三个按钮用的比较少。

对于前面3个按钮<<零死角玩转stm32>> 进行了介绍,但是对于第四个按钮并没有进行介绍,因为该书使用的是Keil uVision4,对于这部分的介绍来源于这篇博文:https://blog.csdn.net/weixin_41344412/article/details/114151424。

在这里插入图片描述

综上:对于第四个按钮,在一个workbench下有多个项目时进行使用,当一个workbench下有多个项目需要同时进行Build 时,就可以点击第四个按钮的Batch Build进行编译。

程序的编译主要是生成单片机需要的.hex文件

在这里插入图片描述

项目输出文件的hex文件目录是可以进行设置的,首先点击在这里插入图片描述然后选择在这里插入图片描述,最后点击在这里插入图片描述按钮即可选择相应目录。

在这里插入图片描述

程序的编译前不要忘了勾选在这里插入图片描述,否则无法生成相应的hex文件,至于更多的设置请参照这篇博文零死角玩转stm32初级篇3-从零创建STM32工程模板。

在这里插入图片描述

二.程序的下载

常见的程序下载方式有ISP,SWD,SWIM和 JTAG下载,具体使用哪一种下载方式需要根据硬件设计来看,如果硬件设计的程序下载方式有多种时,则选择其中的一种进行下载即可,我们怎么知道单片机上面有几种程序下载方式了,最直接的方式就是通过看硬件原理图,所以我们首先需要知道则四种方式的硬件接线图;对于这四种方式来源于这篇博文程序如何下载到单片机中?单片机常用的四种烧写程序方式介绍。

1.ISP方式

ISP方式这种烧写方式是通过单片机的UART串口来实现的,所需要的工具也比较简单USB/TTL。这个USB/TTL的芯片可以通过MAX232、CH340G等芯片来实现,通过MAX232实现的UART烧写电路如下所示:

在这里插入图片描述

当然上面的接线图看起来或许比较复杂,一般我们只需要留出MCU的TXD,RXD和GND即可,然后在淘宝上面买一个USB/TTL的烧写器,将烧写器的TXD和单片机的RXD相连,烧写器的RXD和单片机的TXD相连,最后再连接GND即可;转换模块的5V也可以给单片机提供电源,有时可能因为模块电压不足出现电脑无法识别的情况,这时需要再额外接一根3.3V电源线到模块和单片机板子上(有可能是我的转换器被烧过,如果不接3.3V的话会出现电脑无法识别的情况,接一根3.3V就可以了)。

在这里插入图片描述

上图说的boot0接到VCC出,指的是STM32的最小模块上的帽扣,如下图所示( 一定不要忘了:烧写时将boot0接到VCC,烧写完后重写接到GND ):

在这里插入图片描述

在结合该最小系统帽扣的原理图就更加明了

在这里插入图片描述

对于硬件是否有ISP方式,我们看最小系统中是否额外留出TXD,RXD和GND。

在这里插入图片描述

按到上面硬件的连接图将单片机和PC进行连接,由于ISP方式并不能够直接通过Keil uVision5软件进行程序的烧写,而是需要依靠其他第三方软件 FlyMcu进行程序的烧写,你可以参照这篇博文进行了解使用FlyMCU往STM32中烧写程序,使用FlyMcu进行程序烧写时,经常会遇到芯片超时问题,你可以试试这篇博文的解决方法关于flymcu烧录stm32芯片超时的问题解决。

在这里插入图片描述

2.JTAG方式

JTAG接口是一种标准的测试协议,可以实现编程时在线调试,利用单步追踪可以很方便的查找代码的Bug,大多数的单片机都支持这种接口。这种接口除了电源线和复位引脚之外,还要用到单片机的四个引脚,分别是:TDI、TMS、TCK、TDO,他们所代表的含义如下所示:

  • TDI–数据输入,所有写入寄存器的数据都是通过TDI接口串行输入的;
  • TMS–模式选择,Jlink输出给目标CPU的时钟信号;
  • TCK–时钟信号,所有数据的输入输出都是以该时钟信号为基准的;
  • TDO–数据输出,所有从寄存器读出的数据都是通过TDO接口串行输出的;

以上这四个引脚都是协议里强制要求的( 意思就是上面四个引脚必须进行连接 ),而且协议建议在设计电路时要选用上拉电阻。JTAG接口有多种形式,常用的20引脚、14引脚和10引脚。以20引脚JTAG为例,所设计的JTAG烧写电路如下图所示:

在这里插入图片描述

上面的连接图看起来或许比较麻烦,我们可以直接在淘宝上搜索JTAG下载器或jlink仿真器,直接看产品的详细信息即可。

在这里插入图片描述

如果硬件单片机留出来的是引脚排针,按到下图进行连接即可:

在这里插入图片描述

当然大多数情况都是使用如下这种排座形式,这种方式直接插上去就可以了:

在这里插入图片描述

使用JTAG方式进行程序的烧写并不需要其他第三方软件,可以直接通过Keil uVision5进行程序烧写,你可以参照这篇博文KIEL 5如何烧录程序到STM32芯片。

在这里插入图片描述

使用JTAG方式进行烧写前,需要安装相应的驱动,在商品的详情界面有相应驱动的百度网盘地址或者直接找客户要即可。

在这里插入图片描述

3.SWD方式

SWD是一种串行调试接口,与JTAG相比,SWD只需要两根线,分别为:SWCLK和SWDIO。他们的含义如下:

  • SWDIO–串行数据线,用于数据的读出和写入;
  • SWDCLK–串行时钟线,提供所需要的时钟信号;

一般来说,大多数单片机的JTAG接口和SWDIO接口是复用的,SWD也是用J-Link工具来实现的。所以在使用的时候,只需要在软件界面做一下选择,使用SWD方式还是JTAG方式,硬件上无需改动。除了J-Link外,意法半导体的ST-Link也是支持SWD模式的。

在这里插入图片描述

当然有时候也会有没有复用的接口,对于单独的SWD方式我们只需要将单片机和连接器对应引脚相连即可。

  • 单片机上的SWD的四个引脚VCC3V3,SWDIO,SWDCLK,GND

在这里插入图片描述

  • 连接器如下图所示,下面分别指出了相应的引脚说明,和上面单片机的对于相连即可

在这里插入图片描述
在这里插入图片描述

SWD方式与JTAG方式相同的是也不需要其他第三方软件,可以直接通过Keil uVision5进行程序烧写,你可以参照这篇博文KIEL 5如何烧录程序到STM32芯片。

在这里插入图片描述

4.SWIM方式

这种下载方式是针对STM8系列的单片机,这种方式只需要一根线即可实现程序的下载,所使用的工具为ST-Link,如下图所示:

在这里插入图片描述

从淘宝的详情界面可以看到,该方式有四根线TVCC,SWIM,GND和REST( 实际只需要一根SWIM ),只需要和单片机对应引脚相连即可。

在这里插入图片描述

对于程序的烧录,你可以通过这篇博文进行了解为了更快普及STM8,我做了一个STM8串口下载程序教程。

在这里插入图片描述

上面这个教程使用的是STVP软件,你可以通过这篇博文进行了解STM32下载编程工具 | STVP介绍、下载、安装和使用教程

在这里插入图片描述

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

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

相关文章

【项目实战】Linux下安装Nginx教程

一、环境准备 Linux版本&#xff1a;CentOS7 64位 二、具体步骤 2.1 步骤1&#xff1a;确认系统中安装以下基础依赖 确认系统中安装了gcc、pcre-devel、zlib-devel、openssl-devel。 在安装Nginx前首先要确认系统中安装了gcc、pcre-devel、zlib-devel、openssl-devel。 yu…

Feature interation—— Bridge、Fusion、Filte

Feature interation&#xff08;特征交互&#xff09;&#xff1a;物品不同模态的表示属于不同的语义空间&#xff0c;并且每个用户对模态也有不同的偏好。因此&#xff0c;多模态推荐系统&#xff08;MRS&#xff09;寻求融合和交互多模态特征来生成用户和物品的特征表示。特征…

STM32开发(六)STM32F103 通信 —— RS485 Modbus通信编程详解

文章目录一、基础知识点二、开发环境三、STM32CubeMX相关配置1、STM32CubeMX基本配置2、STM32CubeMX RS485 相关配置四、Vscode代码讲解五、结果演示以及报文解析一、基础知识点 了解 RS485 Modbus协议技术 。本实验是基于STM32F103开发 实现 通过RS-485实现modbus协议。 准备…

DJ1-1 计算机网络和因特网

目录 一、计算机网络 二、Interent 1. Internet 的介绍 2. Internet 的具体构成 3. Internet 提供的服务 4. Internet 的通信控制 一、计算机网络 定义&#xff1a;是指两台以上具有独立操作系统的计算机通过某些介质连接成的相互共享软硬件资源的集合体。 计算机网络向…

Python机器学习17——极限学习机(ELM)

本系列基本不讲数学原理&#xff0c;只从代码角度去让读者们利用最简洁的Python代码实现机器学习方法。 背景&#xff1a; 极限学习机(ELM)也是学术界常用的一种机器学习算法&#xff0c;严格来说它应该属于神经网络&#xff0c;应该属于深度学习栏目&#xff0c;但是我这里把它…

C/C++开发,无可避免的多线程(篇四).线程与函数的奇妙碰撞

一、函数、函数指针及函数对象 1.1 函数 函数&#xff08;function&#xff09;是把一个语句序列&#xff08;函数体, function body&#xff09;关联到一个名字和零或更多个函数形参&#xff08;function parameter&#xff09;的列表的 C 实体&#xff0c;可以通过返回或者抛…

MongoDB分片教程

一、概述分片是一种将数据分布在多个 机器。MongoDB使用分片来支持具有非常大数据的部署 集和高吞吐量操作。具有大型数据集或高吞吐量应用程序的数据库系统可以 挑战单个服务器的容量。例如&#xff0c;高查询率可以 耗尽服务器的 CPU 容量。工作集大小大于 系统的 RAM 会给磁…

初学者的第一个Linux驱动

软件环境&#xff1a;Ubuntu20.04 Linux内核源码&#xff1a;3.4.39 硬件环境&#xff1a;GEC6818 什么是驱动&#xff1f;简单来说就是让硬件工作起来的程序代码。 Linux驱动模块加载有两种方式&#xff1a; 1、把写好的驱动代码直接编译进内核。 2、把写好的驱动代码编…

Linux24 -- tcp相关概念、多个客户端链接服务端代码

一、tcp相关概念 tcp协议特点&#xff1a;面向连接的、可靠的、流式服务 建立链接&#xff1a;三次握手&#xff0c;发送 SYN 断开链接&#xff1b;四次挥手&#xff0c;发送 FIN tcp、udp都同属于传输层&#xff0c;在网络层使用ip协议&#xff0c;都要将数据交给IP协议&am…

零拷贝技术-内核源码剖析

在网络编程中&#xff0c;如果我们想要提供文件传输的功能&#xff0c;最简单的方法就是用read将数据从磁盘上的文件中读取出来&#xff0c;再将其用write写入到socket中&#xff0c;通过网络协议发送给客户端。ssize_t read(int fd, void *buf, size_t count); ssize_t write(…

学习记录---latent code 潜在编码

文章目录参考文献1. 什么是潜在编码&#xff1f;2.什么是潜在空间&#xff1f;3.同类潜在编码的相似性4.潜在编码的应用4.1 Antoencoders4.2 Generative models5.结论个人学习总结&#xff0c;持续更新中……参考文献 [1] 快速理解深度学习中的latent code潜在编码 1. 什么是…

[一篇读懂]C语言十一讲:单链表的删除和单链表真题实战

[一篇读懂]C语言十一讲&#xff1a;单链表的删除和单链表真题实战1. 与408关联解析及本节内容介绍1 本节内容介绍2. 单链表的删除操作实战3. 单链表真题解读与解题设计1 题目解读2 解题设计第一阶段&#xff1a;双指针找中间结点第二阶段&#xff1a;原地逆置第三阶段&#xff…

ubuntu16.04 python代码自启动和可执行文件自启动

1 python代码自启动 参考 https://blog.csdn.net/qq_38288618/article/details/104096606 准备好python文件 test.py import time c1 while 1:time.sleep(1)cc1print(c)运行 sudo chmod 777 test.py python3 test.py准备run.sh 文件 #!/bin/bash gnome-terminal -x bash -…

【Spring6】IoC容器之基于XML管理Bean

3、容器&#xff1a;IoC IoC 是 Inversion of Control 的简写&#xff0c;译为“控制反转”&#xff0c;它不是一门技术&#xff0c;而是一种设计思想&#xff0c;是一个重要的面向对象编程法则&#xff0c;能够指导我们如何设计出松耦合、更优良的程序。 Spring 通过 IoC 容…

C语言学习笔记——指针(初阶)

前言 指针可以说是C语言基础语法中最难的理解的知识之一&#xff0c;很多新手&#xff08;包括我&#xff09;刚接触指针时都觉得很难。在我之前发布的笔记中都穿插运用了指针&#xff0c;但是我一直没有专门出一期指针的笔记&#xff0c;这是因为我确实还有些细节至今还不太清…

STM32之关门狗

看门狗介绍在由单片机构成的微型计算机系统中&#xff0c;由于单片机的工作常常会受到来自外界电磁场的干扰&#xff0c;造成程序的跑飞&#xff0c;而陷入死循环&#xff0c;程序的正常运行被打断&#xff0c;由单片机控制的系统无法继续工作&#xff0c;会造成整个系统的陷入…

vue3+rust个人博客建站日记5-所有界面

没有数据的前端&#xff0c;是没有灵魂的。明明标题是vue3 rust &#xff0c;但日记撰写至今&#xff0c;似乎只有第一篇提及了Rust&#xff0c;这可不行。是时候一股作气&#xff0c;完成大部分页面绘制工作了&#xff01; 最后再说一次&#xff0c;时间要加速了。 ——普奇神…

EPICS S7nodave手册

第一章&#xff1a;介绍 本手册分为6章(不算次介绍部分)。第一章介绍s7nodave用于EPICS的设备支持的概念和特新。第二章描述启动一个使用s7nodave的IOC项目所需要的几步。第三章描述s7nodave支持的IOC shell命令。之后&#xff0c;第四章解释s7nodave支持的各种记录类型。最后…

【算法】期末复盘,酒店住宿问题——勿向思想僵化前进

文章目录前言题目描述卡在哪里代码&#xff08;C&#xff09;前言 省流&#xff1a;一个人也可以住双人间&#xff0c;如果便宜的话。 害&#xff01;尚正值青春年华&#xff0c;黄金岁月&#xff0c;小脑瓜子就已经不灵光咯。好在我在考试的最后一分钟还是成功通过了这题&am…

Jetpack Compose 中的 CompositionLocal

要在可组合函数之间共享数据时&#xff0c;可以通过参数传递显式地调用&#xff0c;这通常是最简单和最好的方式。 但随着参数越来越多&#xff0c;组件也越来越多&#xff0c;并且有些数据还需要保持私有性&#xff0c;这时这种方式就会显得很繁琐臃肿&#xff0c;难以维护。…