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);}
}