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程序

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

编写点亮一个灯程序

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 编写代码
c 复制代码
#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 编写点灯代码(操作寄存器方式)

c 复制代码
#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

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

c 复制代码
#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

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);
    }
}
相关推荐
学生哥-_-1 小时前
STM32通过KEIL pack包轻松移植LVGL,并学会使用GUI guider
stm32·lvgl·tftlcd·gui guider·gt911
三三十二1 小时前
STM32实战:数字音频播放器开发指南
stm32·单片机·嵌入式硬件
鱼馅饼2 小时前
vscode使用系列之快速生成html模板
ide·vscode·html
想搞嵌入式的小白3 小时前
STM32外设问题总结
单片机·嵌入式硬件
让子弹飞024 小时前
35.成功解决编写关于“江协科技”编写技巧第二期标志位积累的问题
stm32·按键
木子单片机5 小时前
基于STM32语音识别柔光台灯
stm32·单片机·嵌入式硬件·proteus·语音识别·keil
广药门徒5 小时前
澄清 STM32 NVIC 中断优先级
单片机·嵌入式硬件
小禾苗_6 小时前
32单片机——窗口看门狗
单片机·嵌入式硬件
小灰灰搞电子6 小时前
单片机0-10V电压输出电路分享
单片机·嵌入式硬件
Moonnnn.7 小时前
【单片机期末】串行口循环缓冲区发送
笔记·单片机·嵌入式硬件·学习