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

vscode+keil嵌入式软件开发全流程

vscode+keil嵌入式软件开发全流程

1 安装MinGW-w64

(1) MinGW-w64 是一个用于Windows操作系统的开发工具集,其包含了C语言编译器 GCC(GNU Compiler Collection),官网地址:https://www.mingw-w64.org。

(2)下载安装包,并解压到相应的安装目录,后添加到环境变量中。
在这里插入图片描述

2 安装VSCode

VS Code 官网 https://code.visualstudio.com 下载最新安装包,后安装,注选择附加任务时,全勾选。

在这里插入图片描述

安装扩展 Chinese(Simplified)(简体中文)Language Pack for Visual Studio Code,C/C++相关扩展。
在这里插入图片描述

3 用VsCode编写第一个C语言程序

在本地磁盘新建C程序保存目录,打开文件夹。

在这里插入图片描述

新建文件夹,编写love.c程序

#include<stdio.h>
int main(){int times;for(times=10;times>=1;times--){printf("love you 10 thousands year\n");}return 0; 
}

在这里插入图片描述

点击运行程序,即可在终端看到结果
在这里插入图片描述

4 Keil C51软件安装

4.1 下载安装

官网的下载地址为:https://www.keil.com
在这里插入图片描述

点击C51V961.EXE进行安装
在这里插入图片描述

4.2 激活keil

以管理员身份打开keil,后在文件中找到License ManageMent
在这里插入图片描述

复制CID
在这里插入图片描述

运行注册机
在这里插入图片描述

注册机粘贴keil中复制的CID,点击生成,复制生成后的许可密钥。
在这里插入图片描述

在License Management中粘贴密钥,点击Add LIC按钮,查看license生成结果,关闭
在这里插入图片描述

5 STC-ISP烧录工具安装

官方下载地址为:http://www.stcmcudata.com/STCISP/stc-isp-15xx-v6.92A.zip

点击stcai-isp-v6.94H.exe进行安装
在这里插入图片描述

通过stc-isp向Keil添加STC89C52系列芯片信息
在这里插入图片描述

6 用keil C51编写第一个单片机程序

6.1 创建项目

新建工程
在这里插入图片描述

项目名test
在这里插入图片描述

选择所需芯片
在这里插入图片描述

6.2 编写程序

新建文件
在这里插入图片描述

文件名为main.c
在这里插入图片描述

编写点亮一个灯程序

#include "reg52.h"
sbit led1=P3^7;
void main(){//灯亮,给一个低电平led1=0;
}

在这里插入图片描述

上述中文无法正常显示,修改字符集edit->configuration
在这里插入图片描述

选择Chinese GB2312
在这里插入图片描述

6.3 编译程序

勾选生成hex文件
在这里插入图片描述

点击Build按钮进行编译(Translate编译当前文件,仅语法检查,不可生成可执行文件,Build编译当前文件,可生成可执行文件)
在这里插入图片描述

6.4 烧录程序

(1))开发板通过数据线连接PC

(2)CH340串口转USB驱动安装(若PC中已安装,则无需再次安装)

在这里插入图片描述

(2)启动stc-isp->选择芯片型号和串口,波特率->打开程序文件->下载
在这里插入图片描述

7 用VSCode编写单片机程序

7.1 EIDE插件安装

在这里插入图片描述

7.2 EIDE插件使用

7.2.1 创建项目

在这里插入图片描述

选择空项目
在这里插入图片描述

选择8位MCU
在这里插入图片描述

选择8051项目
在这里插入图片描述

编辑项目名
在这里插入图片描述

选择项目保存路径
在这里插入图片描述

7.2.2 配置项目

Keil_C51编译器选择,选择Keil C51编译器
在这里插入图片描述

设置keil C51编译器路径
在这里插入图片描述

设置Include Path(STC芯片的头文件添加到项目的Include Path,方便项目引用)
在这里插入图片描述

选择STC头文件所在目录
在这里插入图片描述

7.2.3 编写代码
#include "reg52.h"
sbit led1=P3^7;
void main(){//灯亮,给一个低电平led1=0;
}

在这里插入图片描述

编译代码
在这里插入图片描述

生成hex文件(项目根目录下的build\Relase目录中生成)
在这里插入图片描述

使用stc-isp烧录程序
在这里插入图片描述

8 Keil MDK的下载和安装

8.1下载安装

官方下载地址:https://www.keil.com/download/product/
在这里插入图片描述

点击MDK538a.EXE进行安装
在这里插入图片描述

8.2 激活keil

以管理员身份打开keil,后在文件中找到**License ManageMent
在这里插入图片描述

复制CID
在这里插入图片描述

运行注册机
在这里插入图片描述

注册机粘贴keil中复制的CID,点击生成,复制生成后的许可密钥。
在这里插入图片描述

8.3 离线安装芯片支持包

关闭芯片支持包的在线安装,从官网下载离线芯片支持包

芯片支持包网址:https://www.keil.arm.com/devices/
在这里插入图片描述

下载完成双击即可自动安装
在这里插入图片描述

8.4 Keil烧录程序闪退

替换掉D:\developer_tools\Keil_v5_MDK\ARM\STLink目录下STLinkUSBDriver.dll文件
在这里插入图片描述

9 用keil MDK编写第一个单片机程序

9.1 创建项目工程

9.1.1 创建需要的目录

创建项目工程存放目录STM32,第一个工程目录led_register
在这里插入图片描述

9.1.2 准备启动文件
9.1.2.1 下载芯片对应标准外设库包

标准外设库下载地址:https://www.st.com/zh/embedded-software/stm32-standard-peripheral-libraries/products.html

搜索产品型号
在这里插入图片描述

下载最新版本
在这里插入图片描述

获取到标准外设库包
在这里插入图片描述

9.1.2.2 从标准库中拷贝启动文件和其他核心文件

创建Start目录存放启动文件和其他核心文件
在这里插入图片描述

启动文件选择标准:
在这里插入图片描述

复制启动文件startup_stm32f10x_md.s
在这里插入图片描述

复制文件stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h
在这里插入图片描述

复制文件core_cm3.c,core_cm3.h
在这里插入图片描述

复制上述文件到Start目录下后
在这里插入图片描述

9.1.3 创建工程

打开keil MDK新建工程
在这里插入图片描述

选择所需芯片
在这里插入图片描述

工程创建助手关闭
在这里插入图片描述

创建后的新项目如下
在这里插入图片描述

9.1.4 工程配置

删除Source Group 1,再添加Start(启动相关文件),User(用户代码)这两个project group。
在这里插入图片描述

Start 中添加文件
在这里插入图片描述

创建main函数,并添加到User
在这里插入图片描述
在这里插入图片描述

9.1.5 编译配置
9.1.5.1 编译器改版本

最新的Keil ARM用的是Compiler version 6,与核心文件中的core_cm3.c不兼容,需换成Compiler version 5

下载地址:https://developer.arm.com/downloads/view/ACOMP5

解压后的文件名改为ARMCC后复制到keil MDK安装目录下
在这里插入图片描述

添加新的ARM Compiler
在这里插入图片描述
在这里插入图片描述

选择ARMCC目录
在这里插入图片描述

设置为默认ARM Compiler Version
在这里插入图片描述

9.1.5.2 其他配置

勾选生成HEX文件
在这里插入图片描述

添加包含的文件路径
在这里插入图片描述

9.2 编写点灯代码(操作寄存器方式)

在这里插入图片描述

#include "stm32f10x.h"
int main(void)
{/* 开启GPIOA的时钟 */RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;/* 给PA0设置为通用推挽输出 */GPIOA->CRL &= ~GPIO_CRL_CNF0_1;GPIOA->CRL &= ~GPIO_CRL_CNF0_0;GPIOA->CRL |= GPIO_CRL_MODE0_1;GPIOA->CRL |= GPIO_CRL_MODE0_0;/* 给输出寄存器赋值 */GPIOA->ODR &= ~GPIO_ODR_ODR0;while (1){}
}

9.3 编译代码

在这里插入图片描述

9.3 下载程序

9.3.1 下载程序前配置

安装ST-LINK驱动

keil目录下有ST-LINK的USB驱动,双击运行即可
在这里插入图片描述

升级STLink固件

连接STLink烧录器,keil目录下有ST-Link升级程序,双击运行即可
在这里插入图片描述

Keil中配置ST-LINK
在这里插入图片描述

勾选Reset and Run(程序下载后自动执行)
在这里插入图片描述

取消勾选Pack的Enable项(勾选了的话,不会自动执行,需手动复位才执行)
在这里插入图片描述

9.3.2 下载

在这里插入图片描述

10 Keil MDK + VSCode开发

10.1 安装Keil Assisant插件

已安装Vscode,并已安装C/C++插件,下面安装Keil Assisant插件
在这里插入图片描述

10.2 Keil 助手插件配置

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

10.3 编辑代码

keil中完成工程创建,环境配置,VSCode打开keil工程

方法一:(VSCode中keil工程)
在这里插入图片描述

找到keil项目的uvprojx文件
在这里插入图片描述

方法2:(选择uvprojx文件通过Code打开)
在这里插入图片描述

10.4 编译下载

在这里插入图片描述

11 HAL库开发

11.1 java环境安装

STM32CubeMX 要求java8的运行环境,下载地址:https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html

双击安装即可
在这里插入图片描述

11.2 安装STM32CubeMX

下载地址:https://www.st.com/zh/development-tools/stm32cubemx.html#get-software

双击安装即可
在这里插入图片描述

11.3 下载芯片支持包

11.3.1 方法1:在线下载芯片支持包

打开STM32CubeMX
在这里插入图片描述

在这里插入图片描述

11.3.2 方法2:离线安装芯片支持包

下载地址:https://www.st.com/zh/development-tools/stm32cubemx.html#tools-software
在这里插入图片描述
在这里插入图片描述

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

注:离线安装方式只能安装基础包(en.stm32cubef1.zip),无法安装升级包(en.stm32cubef1-v1-8-5.zip)。

把en.stm32cubef1-v1-8-5.zip拷贝到stm32cube的仓库,xxx\STM32Cube\Repository下解压覆盖原先文件即可

11.4 创建HAL库工程

从MCU开启工程
在这里插入图片描述

选择芯片STM32F103C8T6
在这里插入图片描述

参数设置,引脚设置
在这里插入图片描述

Debug参数选择(选择串口)
在这里插入图片描述

RCC时钟选择
在这里插入图片描述
在这里插入图片描述

GPIO设置
在这里插入图片描述
在这里插入图片描述

工程配置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

生成代码
在这里插入图片描述

生成的工程目录
在这里插入图片描述

11.5 解读自动生成的代码

main函数代码如下:
在这里插入图片描述

gpio初始化代码如下:
在这里插入图片描述

11.6 HAL库实现LED每隔1s钟闪烁一次

有了gpio初始化程序,还需构建LED驱动,项目根目录下新建Hardware/led目录,Hardware/led目录下创建2个文件led.h和led.c,并在keil中配置。

LED驱动路径添加
在这里插入图片描述

添加LED驱动文件
在这里插入图片描述

编写代码led.c,led.h,main.c

led.c

#include "led.h"
//点亮LED1函数
void led_on(void)
{//void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); // 拉低LED1引脚,点亮LED1
}
//熄灭LED1函数
void led_off(void)
{HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); // 拉高LED1引脚,熄灭LED1
}//翻转LED1状态函数
void led_toggle(void)
{//void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_0);
}

led.h

#ifndef __LED_H__
#define __LED_H__
#include "gpio.h"
void led_init(void);
void led_on(void);
void led_off(void);
void led_toggle(void);
#endif

main.c

#include "led.h"
int main(void)
{HAL_Init();  /* 初始化HAL库 */SystemClock_Config();;   /* 设置时钟, 72Mhz */led_init(); /* 初始化LED灯 */MX_GPIO_Init();while(1){ led_on();delay_ms(500);led_off();delay_ms(500);}
}
http://www.xdnf.cn/news/4591.html

相关文章:

  • C++笔记-list
  • 【已更新】2025华中杯C题数学建模网络挑战赛思路代码文章教学数学建模思路:就业状态分析与预测
  • 06-DevOps-自动构建Docker镜像
  • 动态规划专题5:最长上升子序列
  • LeetCode hot 100—括号生成
  • 数据中台(大数据平台)之数据质量管理
  • 3.Rust + Axum 提取器模式深度剖析
  • 【Python Cookbook】迭代器与生成器(一)
  • 【Qt】初识Qt(一)
  • Oracle 12.1.0.2补丁安装全流程
  • FPGA阵列
  • ZStack文档DevOps平台建设实践
  • 设计模式每日硬核训练 Day 14:组合模式(Composite Pattern)完整讲解与实战应用
  • 基于Django实现的图书分析大屏系统项目
  • Linux 常用命令总结
  • NLP高频面试题(四十六)——Transformer 架构中的位置编码及其演化详解
  • MCP和A2A是什么?
  • FreeRTOS事件标志组
  • 【Linux】第八章 监控和管理Linux进程
  • 关于Diamond机械手的运动学与动力学的推导
  • 【力扣刷题】49字母异位词分组,不用哈希,c语言实现
  • 《AI大模型应知应会100篇》第22篇:系统提示词(System Prompt)设计与优化
  • 基础知识 - 结构体
  • 首席人工智能官(Chief Artificial Intelligence Officer,CAIO)的详细解析
  • 从“链主”到“全链”:供应链数字化转型的底层逻辑
  • 智能sc一面
  • 【cocos creator 3.x】cocos creator2.x项目升级3.x项目改动点
  • 士兵乱斗(贪心)
  • 前端api(请求后端)简易template
  • Python高级爬虫之JS逆向+安卓逆向1.5节: 控制结构