VSCode和IAR工程创建
- [1. VSCode工程创建](#1. VSCode工程创建)
-
- [1.1. 安装插件](#1.1. 安装插件)
- [1.2. 设置编译工具链](#1.2. 设置编译工具链)
- [1.2.1. ARM CC设置](#1.2.1. ARM CC设置)
-
- [1.2.2. GCC](#1.2.2. GCC)
- [1.3. 调试下载](#1.3. 调试下载)
- [2. IAR工程创建](#2. IAR工程创建)
-
- [2.1. IAR工具介绍](#2.1. IAR工具介绍)
-
- [2.1.1. 界面介绍](#2.1.1. 界面介绍)
- [2.1.2. 风格设置](#2.1.2. 风格设置)
- [2.2. 创建本地工程](#2.2. 创建本地工程)
-
- [2.2.1. 下载STM32官方标准库](#2.2.1. 下载STM32官方标准库)
- [2.2.2. 创建IAR的工程目录文件](#2.2.2. 创建IAR的工程目录文件)
- [2.2.3. 构建工程文件](#2.2.3. 构建工程文件)
- [2.3. 创建IAR工程](#2.3. 创建IAR工程)
- [2.4. 配置工程](#2.4. 配置工程)
- [2.5. 编译工程及解决问题](#2.5. 编译工程及解决问题)
1. VSCode工程创建
1.1. 安装插件
bash
🎼 C/C++
Embedded IDE
Hide Files
Chinese (Simplified)
Arm Assembly
Fitten Code
Serial Monitor
vscode-icons
vetur
Cortex-Debug




1.2. 设置编译工具链
bash
🏖 注意:AC5编译器和GCC编译器所使用的的汇编语法不通,需要引入不同的启动汇编文件
1.2.1. ARM CC设置
bash
✍️ 优点:可以在启动汇编脚本中直接设置栈 和 堆内存空间大小,并且提供可视化的RAM、ROM
配置界面:
缺点:与Keil强绑定,必须和Keil证书激活⼀起激活,目前不向未购买用户提供下载链接




串口:
bash
🎁 添加宏:
__MICROLIB
c
int fputc(int ch,FILE *f)
{
USART_SendData(USART1,ch);
while(SET!=USART_GetFlagStatus(USART1, USART_FLAG_TC));
USART_ClearFlag(USART1, USART_FLAG_TC);
return ch;
}
int fgetc(FILE *f)
{
uint8_t ch = 0;
while(SET!=USART_GetFlagStatus(USART1,USART_FLAG_RXNE));
ch = USART_ReceiveData(USART1);
USART_ClearFlag(USART1, USART_FLAG_RXNE);
return (int)ch;
}
1.2.2. GCC
优点:开源免费
缺点:需要不同的汇编启动脚本(部分芯片厂商未提供),无可视化内存管理窗口->> 需要配置⼀个链接脚本 (.ld 文件) 用于管理内存
链接脚本:


避坑:STM32F10x 固件库使用GCC编译需要修改 core_cm3.c 中下面两行代码,不然编译报错

串口:
c
#ifndef __DRV_USART_H__
#define __DRV_USART_H__
#include "stm32f10x.h"
#include "stdio.h"
#include "string.h"
#ifdef __GNUC__
//串口重定向
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#define GETCHAR_PROTOTYPE int __io_getchar()
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
void USART_Config(void);
#endif
c
PUTCHAR_PROTOTYPE
{
USART_SendData(USART1,ch);
while(SET!=USART_GetFlagStatus(USART1, USART_FLAG_TC));
USART_ClearFlag(USART1, USART_FLAG_TC);
return ch;
}
GETCHAR_PROTOTYPE
{
uint8_t ch = 0;
while(SET!=USART_GetFlagStatus(USART1,USART_FLAG_RXNE));
ch = USART_ReceiveData(USART1);
USART_ClearFlag(USART1, USART_FLAG_RXNE);
return (int)ch;
}
// 重写 _write()
int _write(int fd, char *pBuffer, int size)
{
for (int i = 0; i < size; i++)
{
__io_putchar(*pBuffer++);
}
return size;
}
1.3. 调试下载

📌 注意:没装下载器驱动或烧录工具,可以直接在 '安装实用工具栏' 直接选择安装,会安装在 C:/{用户}/.eide/tools 目录下,装错了需要手动删除

注意: 这里VSCode有⼀个小坑,在选择新的烧入配置后(默认Jlink,不改就可以不管),DEBUG时会提示错误,原因是debug配置中没将老的烧入配置移除。
(只影响DEBUG, 不影响烧入)

STM32F407下载调试设置:

c
{
"version": "0.2.0",
"configurations": [
{
"cwd": "${workspaceRoot}",
"type": "cortex-debug",
"request": "launch",
"name": "jlink",
"servertype": "jlink",
"interface": "swd",
"executable": "build\\Debug\\led.elf",
"runToEntryPoint": "main",
"device": "null",
"toolchainPrefix": "arm-none-eabi"
},
{
"cwd": "${workspaceRoot}",
"type": "cortex-debug",
"request": "launch",
"name": "openocd",
"servertype": "openocd",
"executable": "build\\Debug\\led.elf",
"runToEntryPoint": "main",
"configFiles": [
"interface/stlink.cfg",
"target/stm32f1x.cfg"
]
}
]
}
2. IAR工程创建
2.1. IAR工具介绍
2.1.1. 界面介绍



2.1.2. 风格设置



2.2. 创建本地工程
2.2.1. 下载STM32官方标准库

2.2.2. 创建IAR的工程目录文件

bash
🌰 【Config】保存IAR工程需要的配置文件;
【Library】保存STM32标准库文件和⼀些内核文件;
【Object】保存IAR工程文件,以及IAR编译过程产生的文件;
【User】保存自己写的代码文件
2.2.3. 构建工程文件
1> 将EWARM内的文件复制进步骤2中的【Config】文件夹

2> 将Libraries标准库文件复制进步骤2中的【Libraries】文件夹

3> 复制用户文件到步骤2中的【User】文件夹

2.3. 创建IAR工程
1> 创建工作空间
【IAR】->【File】->【New Workspace】
2> 保存工作空间
【File】->【Save Workspase As】->【选择上⼀个步骤创建工程的Object文件夹】->【保存的名字和 工程名字相同即可】
3> 创建IAR工程
【Project】->【Create New Project】->【Empty project】->【选择上⼀个步骤创建工程的Object文件夹】->【保存的名字和工程名字相同即可】
4> 添加分组
【工作空间鼠标右击】->【Add】->【Add Group...】->【依次先创建Libraries、User、StartUp】

5> 添加文件进IAR工作空间

⛱️ 备注:如果某些.c文件没有用到,也可以添加到工程里面,然后再该文件上【右击】-> 【Options】->【Exclude from build】打勾,那么它就不会参加编译
2.4. 配置工程
1> 选择芯片型号
【Project】->【Options】->【General Options】->【Target】->【Device】

2> 配置头文件路径和全局宏定义
【Project】->【Options】->【C/C++Compiler】->【Preprocessor】


3> 配置
stm32f10x_flash.icf文件【Project】->【Options】->【Linker】->【Config】

4> 选择调试器

2.5. 编译工程及解决问题
1> 直接编译将会出现⼀个Core_cm3版本的问题

错误的原因是因为新版本CMSIS 的intrinsics.h等文件与之前的版本不兼容。
解决办法有两个:
- STM32导入的
core版本和IAR提供的版本不⼀致,所以使用STM32的就好了,而且注释掉core_cm3.h93行://#include <intrinsics.h>

- 不用STM32提供的
core,也就是在配置头文件路径的时候,不要导入core_cm3.h,然后使用系统提供的


2> 启动文件
错误:Label'Reset_Handler' is defined pubweakRR......
解决方法:add ":NOROOT" to the "SECTION"statement

以上,欢迎有从事同行业的电子信息工程、互联网通信、嵌入式开发的朋友共同探讨与提问,我可以提供实战演示或模板库。希望内容能够对你产生帮助!