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

Keil+VSCode优化开发体验

目录

一、引言

二、详细步骤

1、编译器准备

2、安装相应插件

2.1 安装C/C++插件

2.2 安装Keil相关插件

3、添加keil环境变量

4、加载keil工程文件

5、VSCode中成功添加工程文件后可能出现的问题

5.1 编码不一致问题

6、在VSCode中进行编译工程以及烧录程序

7、效果展示

8、使用注意事项

三、总结


一、引言

前面,我们陆陆续续讲解了关于STM32的介绍、入门的点灯案例以及stm32中GPIO的相关介绍。在编写点灯案例的过程中我们使用的编译器时keil,我们很明显能发现,他和其他编译器在一些方面的差距,如快速进入某函数实现体或某文件中、代码提示等都没有像VSCode等编译器那么美观。

因此,我们接下来要说的就是如何去结合过去好用的编译器如vscode来进行stm32开发的代码编写,优化开发体验。


二、详细步骤

1、编译器准备

既然我们要使用VSCode,那么首先我们要有这个软件。因此先去vscode官网下载该软件:Visual Studio Code - Code Editing. Redefined,点击即可直接进入vsc的官网,然后进行下载安装即可,如若安装过程有何问题,可自行搜索vscode安装教程。

安装成功后启动VSCode后的页面大概长这样:

因为我已经使用过,所以和最初进入的页面会有些许差异,大概就是这样的。 


2、安装相应插件

接下来,就正式开始在VSCode中配置编译环境了。

2.1 安装C/C++插件

首先,我们需要安装相应插件,因为我们在编译器中需要使用C语言来进行代码的编写,所以首先要安装好C/C++的插件。

点击最左边一竖栏中第五个长着像四个方块的图标,就会进入扩展:工具页面,接着在搜索栏输入C即可搜索到如下图所示的插件,我们选择第一个插件,进行安装即可。

我这里已经安装了,所以那里显示的“禁用 卸载”.

安装好了以后,关于C语言编码的环境就有了。

2.2 安装Keil相关插件

然后为了顺利地通过VSCode去编译烧录keil的工程文件,还需要安装关于keil的插件,安装步骤如下:

同样是进入VSCode的扩展,然后在搜索一栏中搜索keil,就能找到关于keil的相关插件,然后安装“Keil Asssistant以及Embedded IDE”,步骤如下图所示


3、添加keil环境变量

把相关插件安装好了以后,因为实际上使用VSCode去编写代码实际上也是间接地使用了keil的环境,换句话说,此事VSCode可以看做是一个文本编辑器,而keil可看作是更底层的环境,我现在就是通过在VScode中写代码然后保存到底层keil中,编译和烧录同样也是要经过底层的keil实现。这个时候大家就会发现,这岂不是变麻烦了?确实是这样,不过好处就是能够优化我们编码的体验,如使用VSCode编写代码时界面更加好看了,同时还有用熟悉的快捷键一下进入某文件或函数实现体中,同时有这更多的代码提示等等优点。

因此,现在我们要做的就是让VSCode能够顺利找到我们的Keil,即添加keil的环境变量,如何做呢?

进入VSCode后,我们可以看见界面最左下角有个齿轮图标,我们点击【齿轮】,显示一个选项栏,再点击【设置】,就能进入VSCode设置界面,接着我们直接在【搜索栏】中输入keil快速索引到keil相关的配置部分,就能看见如下图所示界面,接着根据自己所使用的keil版本去选择添加keil路径的一栏,然后添加即可。 主要操作步骤如下图所示:

4、加载keil工程文件

正确安装好插件并且设置好keil所在路径后,我们就可以开始将keil工程文件添加到VSCode的工作空间了,具体步骤如下:

找到资源管理器下的状态栏中最后一个关于keil的选项KEIL UVISION PROJECT,然后展开它:就能看见旁边出现一个【彩色加号】,继续点击这个加号即可添加我们想要的工程文件了(注意要选择我们工程文件夹中的.uvprojx后缀名的文件)

以下图片展示的具体操作步骤:

添加工程文件后,VSCode就会对工程文件夹加载到此时的工作空间,可能会弹出如下图窗口:直接点击“是,信任此作者”即可,同时可勾上“信任父文件夹...”,具体操作如下图所示:

 然后我们还会看见在界面右下角还有个提示:keil project load done.switch workspace? 这个提示的主要意思就是 我们的keil工程文件已经成功加载到VSCode中了,是否要进入到该工作空间下?我们直接点击OK即可,这样我们才能在VSCode中看见我们的代码文件夹。

具体操作步骤如下图所示:

 OK后,就是如下图界面:


5、VSCode中成功添加工程文件后可能出现的问题

5.1 编码不一致问题

添加完工程文件后,我们点击User查看我们之前写的main.c文件内容,如下图所示:

很明显和我们在keil中的内容是一样的,同时在这里看还有代码彩色区分效果,同时鼠标移到代码上,还会有很好的代码提示,可见此时看起来是不是更加舒服了呢。

这个时候,有些同学可能会出现这样的问题:一点击main.c文件,直接蹦出一些乱码。。。(此时孩子感觉天都要塌了...),这是为什么呢?孩子不要慌,这是个小问题~:最大的可能就是编码不一致:即在keil中使用的编码和此时vscode中的编码不一样,如何解决呢?只需要在VSCode最底下一栏找到UTF-8或者GBK亦或是其他编码格式的显示然后点击它进行修改即可消除乱码,一切都回到了应该的样子 ~ ^ ^   具体操作步骤已经在上图展示出来了。

如果还不清楚也可以上网搜VSCode如何修改编码格式,就能看见很多详细的解决方法的。

6、在VSCode中进行编译工程以及烧录程序

最后,我们文件啥的都已经成功弄到vscode了,那么如何实现在VSCode中进行程序的编译和烧录呢?很简单,具体图标和操作如下图所示

我们进行编译试试


7、效果展示

最后,我们再在VSCode中烧录点灯程序看看是否能够成功吧

首先还是以原来的点灯案例代码为例,如下:

int main(void)
{
    // 1. 开启时钟
    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
    
    // 2. 配置GPIO工作模式
    GPIOA->CRL &= ~GPIO_CRL_CNF0;
    GPIOA->CRL |= GPIO_CRL_MODE0;
    
    GPIOA->CRL &= ~GPIO_CRL_CNF1;
    GPIOA->CRL |= GPIO_CRL_MODE1;
    
    GPIOA->CRH &= ~GPIO_CRH_CNF8;
    GPIOA->CRH |= GPIO_CRH_MODE8;
    
    // 3. 设置PA0、1、8为低电平 点亮三色灯
    GPIOA->ODR &= ~GPIO_ODR_ODR0;     
    GPIOA->ODR &= ~GPIO_ODR_ODR1;
    GPIOA->ODR &= ~GPIO_ODR_ODR8;
    
    // 4. 死循环保持状态
    while(1){}
}

进行烧录

烧录成功了!看看现象 

OK,现象是对的。 


8、使用注意事项

然后再给出一些注意事项:

1、如果我们在VSCode中修改代码了,然后进入keil时就会看见一个提示:

此时不用慌,直接点击是即可。

2、同时,如果我们在keil中修改了代码,此时我们直接回到已经打开的vsCode中查看的话是没有改变的,但实际上确实改变了,此时我们只需要在VSCode中关闭文件重新加载即可看见在keil中修改过的代码了。 


三、总结

本期我们讲解了关于VSCode在单片机开发编码带来的优化体验以及实现keil和VSCode的联合开发的详细步骤以及相关注意事项。

相关文章:

Keil+VSCode优化开发体验

目录 一、引言 二、详细步骤 1、编译器准备 2、安装相应插件 2.1 安装C/C插件 2.2 安装Keil相关插件 3、添加keil环境变量 4、加载keil工程文件 5、VSCode中成功添加工程文件后可能出现的问题 5.1 编码不一致问题 6、在VSCode中进行编译工程以及烧录程序 7、效果展示…...

vue2中引入cesium全步骤

1.npm 下载cesium建议指定版本下载,最新版本有兼容性问题 npm install cesium1.95.0 2.在node_models中找到cesium将此文件下的Cesium文件复制出来放在项目的静态资源public中或者static中,获取去github上去下载zip包放在本地也可以 3.在index.html中引…...

工程师 - 智能家居方案介绍

1. 智能家居硬件方案概述 智能家居硬件方案是实现家庭自动化的重要组件,通过集成各种设备来提升生活的便利性、安全性和效率。这些方案通常结合了物联网技术,为用户提供智能化、自动化的生活体验。硬件方案的选择直接影响到智能家居系统的性能、兼容性、…...

中小企业人事管理:SpringBoot框架高级应用

摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,中小企业人事管理系统当然也不能排除在外。中小企业人事管理系统是以实际运用为开发背景,运用软件工程原理和…...

嵌入式Linux驱动开发日记

目录 让我们从环境配置开始 目标平台 从Ubuntu开始 从交叉编译器继续 arm-linux-gnueabihf-gcc vscode 没学过ARM汇编 正文开始——速度体验一把 写一个链接脚本 写一个简单的Makefile脚本 使用正点原子的imxdownload下载到自己的SD卡上 更进一步的笔记和说明 从IM…...

迪杰特斯拉算法(Dijkstra‘s)

迪杰斯特拉算法(Dijkstras algorithm)是由荷兰计算机科学家艾兹格迪科斯彻(Edsger W. Dijkstra)在1956年提出的,用于在加权图中找到单个源点到所有其他顶点的最短路径的算法。这个算法广泛应用于网络路由、地图导航等领…...

reids基础

数据结构类型 String setnx //设置key不存在,则添加成功 setex name 10 jack // key 10s失效,自动删除 hash hset hget list 按添加数据排序 lpush //左侧插入 rpush //右侧插入 set 不重复 sadd //添加…...

私有化部署视频平台EasyCVR宇视设备视频平台如何构建视频联网平台及升级视频转码业务?

在当今数字化、网络化的时代背景下,视频监控技术已广泛应用于各行各业,成为保障安全、提升效率的重要工具。然而,面对复杂多变的监控需求和跨区域、网络化的管理挑战,传统的视频监控解决方案往往显得力不从心。 EasyCVR视频融合云…...

SparkContext讲解

SparkContext讲解 什么是 SparkContext? SparkContext 是 Spark 应用程序的入口点,是 Spark 的核心组件之一。每个 Spark 应用程序启动时,都会创建一个 SparkContext 对象,它负责与集群管理器(如 YARN、Mesos 或 Spa…...

MODBUS TCP转CANOpen网关

Modbus TCP转CANopen网关 型号:SG-TCP-COE-210 产品用途 本网关可以实现将CANOpen接口设备连接到MODBUS TCP网络中;并且用户不需要了解具体的CANOpen和Modbus TCP 协议即可实现将CANOpen设备挂载到MODBUS TCP接口的 PLC上,并和CANOpen设备…...

渗透测试---shell(4)脚本与用户交互以及if条件判断

声明:学习素材来自b站up【泷羽Sec】,侵删,若阅读过程中有相关方面的不足,还请指正,本文只做相关技术分享,切莫从事违法等相关行为,本人一律不承担一切后果 目录 一、shell脚本与用户进行交互 使用 read 指…...

02_Spring_IoC实现

接下来先简单说一下关于IoC的一些要点,后面我们再详细一步一步讨论。 一、IoC控制反转 IoC控制反转它是一种思想,不是具体的实现控制反转的目的是为了降低程序的耦合度,提高程序的可扩展性,从而满足OCP原则和DIP原则控制反转,那到底反转是什么东西? 我们不再使用某个对象…...

使用Python3实现Gitee码云自动化发布

仓库信息 https://gitee.com/liumou_site/ip 实现代码 import osimport requests from loguru import loggerdef gitee(ver, message, prerelease: bool False):"""在 Gitee 上创建发布版本:param ver: 版本号:param message: 发布信息:param prerelease: 是…...

Ubuntu24.04下的docker问题

按官网提示是可以安装成功的,但是curl无法使用https下载,会造成下述语句执行失败 # Add Dockers official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https…...

PAT (Basic Level) Practice (中文)1002 写出这个数

读入一个正整数 n&#xff0c;计算其各位数字之和&#xff0c;用汉语拼音写出和的每一位数字。 #include<bits/stdc.h> using namespace std; string a; int sum0; int f0; int n[10005]; int main(){ cin>>a; int c0; int laa.size(); for(int i…...

C07.L07.STL之映射.应用2.统计数字

题目描述 某次科研调查时得到了 n 个自然数&#xff0c;每个数均不超过 1500000000 (1.5*10^9 )。已知不相同的数不超过 10000 个&#xff0c;现在需要统计这些自然数各自出现的次数&#xff0c;并按照自然数从小到大的顺序输出统计结果。 输入格式 包含 2 行&#xff1a; 第…...

微信小程序组件详解:text 和 rich-text 组件的基本用法

微信小程序组件详解:text 和 rich-text 组件的基本用法 引言 在微信小程序的开发中,文本展示是用户界面设计中不可或缺的一部分。无论是简单的文本信息,还是复杂的富文本内容,text 和 rich-text 组件都能够帮助我们实现这些需求。本文将详细介绍这两个组件的基本用法,包…...

算法.图论-习题全集(Updating)

文章目录 本节设置的意义并查集篇并查集简介以及常见技巧并查集板子(洛谷)情侣牵手问题相似的字符串组岛屿数量(并查集做法)省份数量移除最多的同行或同列石头最大的人工岛找出知晓秘密的所有专家 建图及其拓扑排序篇链式前向星建图板子课程表 本节设置的意义 主要就是为了复习…...

this.$prompt 限制输入长度

this.$prompt(请输入关键词名称, 提示, {confirmButtonText: 确定,cancelButtonText: 取消,inputPattern: /^\d{0,50}$/,inputErrorMessage: 关键词名称长度不能超过50个字符 }).then(({ value }) > {})...

JDBC使用p6spy记录实际执行SQL方法【解决SQL打印两次问题】

p6spy介绍 p6spy 是一个开源的 JDBC 数据源代理工具&#xff0c;主要用于拦截和记录应用程序与数据库之间的所有 SQL 操作&#xff0c;方便开发者进行 SQL 调试、性能监控和问题排查。 p6spy可以打印实际执行的sql&#xff0c;在开发过程中方便调试&#xff0c;和使用框架无关…...

问题: redis-高并发场景下如何保证缓存数据与数据库的最终一致性

在高并发场景下&#xff0c;Redis 通常用作缓存层&#xff0c;与数据库结合使用以提高系统的性能。为了保证缓存数据与数据库的最终一致性&#xff0c;通常采用的有双写机制、缓存失效机制&#xff0c;基于双写机制、缓存失效机制又衍生出来了消息队列、事件驱动架构等 常见机…...

Stable Diffusion核心网络结构——CLIP Text Encoder

&#x1f33a;系列文章推荐&#x1f33a; 扩散模型系列文章正在持续的更新&#xff0c;更新节奏如下&#xff0c;先更新SD模型讲解&#xff0c;再更新相关的微调方法文章&#xff0c;敬请期待&#xff01;&#xff01;&#xff01;&#xff08;本文及其之前的文章均已更新&…...

C语言-11-18笔记

1.C语言数据类型 类型存储大小值范围char1 字节-128 到 127 或 0 到 255unsigned char1 字节0 到 255signed char1 字节-128 到 127int2 或 4 字节-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647unsigned int2 或 4 字节0 到 65,535 或 0 到 4,294,967,295short2 字节…...

数据结构_图的遍历

深度优先搜索遍历 遍历思想 邻接矩阵上的遍历算法 void Map::DFSTraverse() {int i, v;for (i 0; i < MaxLen; i){visited[i] false;}for (i 0; i < Vexnum; i){// 如果顶点未访问&#xff0c;则进行深度优先搜索if (visited[i] false){DFS(i);}}cout << endl…...

设计LRU缓存

LRU缓存 LRU缓存的实现思路LRU缓存的操作C11 STL实现LRU缓存自行设计双向链表 哈希表 LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;缓存是一种常见的缓存淘汰算法&#xff0c;其基本思想是&#xff1a;当缓存空间已满时&#xff0c;移除最近最少使…...

python中的base64使用小笑话

在使用base64的时候将本地的图片转换为base64 代码如下&#xff0c;代码绝对正确 import base64 def image_to_data_uri(image_path):with open(image_path, rb) as image_file:image_data base64.b64encode(image_file.read()).decode(utf-8)file_extension image_path.sp…...

Python之time时间库

time时间库 概述获取当前时间time库datetime库区别 时间元组处理获取时间元组的各个部分时间戳和时间元组的转换 格式化时间格式化时间解析时间格式符号说明 暂停程序计时操作简单计时高精度计时计时器类的实现 UTC时间操作time库datetime库 概述 time是Python标准库中的一个模…...

Easyexcel(4-模板文件)

相关文章链接 Easyexcel&#xff08;1-注解使用&#xff09;Easyexcel&#xff08;2-文件读取&#xff09;Easyexcel&#xff08;3-文件导出&#xff09;Easyexcel&#xff08;4-模板文件&#xff09; 文件导出 获取 resources 目录下的文件&#xff0c;使用 withTemplate 获…...

国产linux系统(银河麒麟,统信uos)使用 PageOffice 动态生成word文件

PageOffice 国产版 &#xff1a;支持信创系统&#xff0c;支持银河麒麟V10和统信UOS&#xff0c;支持X86&#xff08;intel、兆芯、海光等&#xff09;、ARM&#xff08;飞腾、鲲鹏、麒麟等&#xff09;、龙芯&#xff08;LoogArch&#xff09;芯片架构。 数据区域填充文本 数…...

Window11+annie 视频下载器安装

一、ffmpeg环境的配置 下载annie之前需要先配置ffmpeg视频解码器。 网址下载地址 https://ffmpeg.org/download.html1、在网址中选择window版本 2、点击后选择该版本 3、下载完成后对压缩包进行解压&#xff0c;后进行环境的配置 &#xff08;1&#xff09;压缩包解压&#…...

黑白色调网站/关键词排名查询工具

名人名言昨日翻译“A successful man is one who can lay a firm foundation with the bricks others have thrown at him.” ——David Brinkley成功的人能够把别人扔向他的板砖成为他的根基。——戴维布林克利今日名言“Those who dare to fail miserably can achieve greatl…...

win10虚拟目录 做网站/网络推广代理平台

CNN目标检测&#xff08;三&#xff09;&#xff1a;SSD详解 转载 浩瀚之水_csdn 最后发布于2017-08-26 08:30:47 阅读数 41732 收藏 展开 SSD github : https://github.com/weiliu89/caffe/tree/ssd SSD paper : https://arxiv.org/abs/1512.02325 SSD eccv2016 slide …...

做技术网站赚钱/郑州抖音推广

目录 目标一、PathVariable 校验二、方法参数校验三、表单对象校验四、RequestBody 校验五、自定义校验规则六、异常拦截器参考文档目标 对于几种常见的入参方式&#xff0c;了解如何进行校验以及该如何处理错误消息&#xff1b;了解springboot 内置的参数异常类型&#xff0c;…...

石龙镇网站仿做/网络销售工资一般多少

交换机隔离冲突,原因在于它的矩形阵列.所以一个交换机有几个端口就有几个冲突域.集线器不隔离冲突,是因为它的多个端口是有一条线路连接,所以,无论它有多少个端口,它都 只有一个冲突域.转载于:https://blog.51cto.com/zhangjiao123/287040...

金隅嘉华大厦网站建设公司/福州网站建设策划

XXX管理平台系统会议管 理关于项目中的会议管理&#xff0c;其实并无定数可言&#xff0c;与个人的爱好、管理风格、沟通能力、团队组织、项目规模、甚至公司的IT管理风格息息相关。 在H公司工作的时候&#xff0c;我的department manager喜欢把所有的员工召集起来一起进行月度…...

新手学做网站学哪些知识/yandex引擎

对结果集的排序以及谓词的使用(distinct、top) 一、对结果集的排序 在SQL表中的数据是无序的&#xff0c;主键的作用唯一标识记录行。而不是对表进行排序。 若Select语句中没有使用Order by语句将按主键排列表中的数据。 注&#xff1a;如果要对记录行进行排序&#xff0c;最好…...