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的联合开发的详细步骤以及相关注意事项。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Llama模型文件介绍

文章目录 概要文件组成 概要 在使用 LLaMA(Large Language Model Meta AI)权重时,通常会涉及到与模型权重存储和加载相关的文件。这些文件通常是以二进制格式存储的,具有特定的结构来支持高效的模型操作。以下以Llama-7B为例&…

Spring Web入门练习

加法计算器 约定前后端交互接⼝ 约定 "前后端交互接⼝" 是进⾏ Web 开发中的关键环节. 接⼝⼜叫 API(Application Programming Interface), 我们⼀般讲到接⼝或者 API,指的都是同⼀个东西. 是指应⽤程序对外提供的服务的描述, ⽤于交换信息…

Easyexcel(5-自定义列宽)

相关文章链接 Easyexcel(1-注解使用)Easyexcel(2-文件读取)Easyexcel(3-文件导出)Easyexcel(4-模板文件)Easyexcel(5-自定义列宽) 注解 ColumnWidth Data…

FIFO和LRU算法实现操作系统中主存管理

FIFO&#xff0c;用数组实现 1和2都是使用nextReplace实现新页面位置的更新 1、不精确时间&#xff1a;用ctime输出运行时间都是0.00秒 #include <iostream> #include <iomanip> #include<ctime>//用于计算时间 using namespace std;// 页访问顺序 int pa…

Unity3d场景童话梦幻卡通Q版城镇建筑植物山石3D模型游戏美术素材

注明&#xff1a;网络素材&#xff0c;仅供学习使用&#xff01; https://download.csdn.net/download/elineSea/90017291

batchnorm与layernorn的区别

1 原理 简单总结&#xff1a; batchnorn 和layernorm是在不同维度上对特征进行归一化处理。 batchnorm在batch这一维度上&#xff0c; 对一个batch内部所有样本&#xff0c; 在同一个特征通道上进行归一化。 举个例子&#xff0c; 假设输入的特征图尺寸为16x224x224x256&…

SpringAOP模拟实现

文章目录 1_底层切点、通知、切面2_切点匹配3_从 Aspect 到 Advisor1_代理创建器2_代理创建时机3_Before 对应的低级通知 4_静态通知调用1_通知调用过程2_模拟 MethodInvocation 5_动态通知调用 1_底层切点、通知、切面 注意点&#xff1a; 底层的切点实现底层的通知实现底层的…

标准驱动开发(Linux2.6(cdev) 的开发)

Linux2.6&#xff08;cdev&#xff09; 的开发 目录 Linux2.6&#xff08;cdev&#xff09; 的开发 回顾 Linux2.6&#xff08;cdev&#xff09; 的开发 了解一下 Linux2.6 开发框架 学习 Linux2.6 的相关接口 1、申请设备号&#xff08;alloc_chrdev_region&#xff09…

硬件知识 cadence16.6 原理图输出为pdf 网络名下划线偏移 (ORCAD)

1. cadence原理图输出为PDF网络名下划线偏移 生这种情况的原因 1. 设计的原理图图纸大小比正常的 A4图纸大。 2. 打印为PDF 的时候&#xff0c;打印机的设置有问题。 2.cadence原理图输出为 PDF网络名下划线偏移的情况 可以看到上图&#xff0c;网络名往上漂移。 3. 解决办法 …

HarmonyOs DevEco Studio小技巧31--卡片的生命周期与卡片的开发

Form Kit简介 Form Kit&#xff08;卡片开发服务&#xff09;提供一种界面展示形式&#xff0c;可以将应用的重要信息或操作前置到服务卡片&#xff08;以下简称“卡片”&#xff09;&#xff0c;以达到服务直达、减少跳转层级的体验效果。卡片常用于嵌入到其他应用&#xff0…

SSRF漏洞利用

2.漏洞利用 2.1 SSRF中URL的伪协议 file:// 从⽂件系统中获取⽂件内容&#xff0c;如&#xff0c;file:///etc/passwd dict:// 字典服务器协议&#xff0c;访问字典资源&#xff0c;如dict://ip:6379/info sftp:// ssh⽂件传输协议或安全⽂件传输协议 ldap:// 轻量级⽬录访问…

nacos镜像启动时候报Public Key Retrieval is not allowed

在nacos的配置文件里加上一句allowPublicKeyRetrievaltrue

【pytorch-04】:线性回归案例(手动构建)

文章目录 1 构建数据集2 构建假设函数3 损失函数4 优化方法5 训练函数6.总结 1 构建数据集 为什么构建数据加载器&#xff1f; 在进行训练的时候都是采用的不是全部的数据&#xff0c;而是采用一个batch_size的数据进行训练&#xff0c;每次向模型当中送入batch_size数据&#…

实验室管理效率提升:Spring Boot技术的力量

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

STM32H7开发笔记(2)——H7外设之多路定时器中断

STM32H7开发笔记&#xff08;2&#xff09;——H7外设之多路定时器中断 文章目录 STM32H7开发笔记&#xff08;2&#xff09;——H7外设之多路定时器中断0.引言1.CubeMX配置2.软件编写 0.引言 本文PC端采用Win11STM32CubeMX4.1.0.0Keil5.24.2的配置&#xff0c;硬件使用STM32H…

springboot基于微信小程序的旧衣回收系统的设计与实现

摘 要 微信小程序的旧衣回收系统是一种专为环保生活设计的应用软件。这款小程序的主要功能包括&#xff1a;系统首页、个人中心、用户管理、回收人员管理、旧衣服分类管理、旧衣信息管理、回收预约管理、回收派单管理、回收订单管理、积分商品管理、积分兑换管理、管理员管理、…

路由缓存后跳转到新路由时,上一路由中的tip信息框不销毁问题解决

上一路由tip信息框不销毁问题解决 路由缓存篇问题描述及截图解决思路关键代码 路由缓存篇 传送门 问题描述及截图 路由缓存后跳转新路由时&#xff0c;上一个路由的tip信息框没销毁。 解决思路 在全局路由守卫中获取DOM元素&#xff0c;通过css去控制 关键代码 修改文…

40分钟学 Go 语言高并发:并发下载器开发实战教程

并发下载器开发实战教程 一、系统设计概述 1.1 功能需求表 功能模块描述技术要点分片下载将大文件分成多个小块并发下载goroutine池、分片算法断点续传支持下载中断后继续下载文件指针定位、临时文件管理进度显示实时显示下载进度和速度进度计算、速度统计错误处理处理下载过…

【前端】JavaScript中的indexOf()方法详解:基础概念与背后的应用思路

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;什么是indexOf()方法&#xff1f;参数解释返回值示例 &#x1f4af;indexOf() 方法的工作原理&#x1f4af;特殊案例&#xff1a;undefined 的处理示例代码图示解释 &#x1f4af;i…

HarmonyOS4+NEXT星河版入门与项目实战------Button组件

文章目录 1、控件图解2、案例实现1、代码实现2、代码解释3、运行效果4、总结1、控件图解 这里我们用一张完整的图来汇整 Button 的用法格式、属性和事件,如下所示: 按钮默认类型就是胶囊类型。 2、案例实现 这里我们实现一个根据放大和缩小按钮来改变图片大小的功能。 功…