【ARM】VSCode和IAR工程创建

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 文件) 用于管理内存

GCC下载:https://developer.arm.com/downloads/-/gnu-rm

链接脚本:

避坑: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版本的问题

错误的原因是因为新版本CMSISintrinsics.h等文件与之前的版本不兼容。


解决办法有两个:

  1. STM32导入的core版本和IAR提供的版本不⼀致,所以使用STM32的就好了,而且注释掉 core_cm3.h 93行://#include <intrinsics.h>
  1. 不用STM32提供的core,也就是在配置头文件路径的时候,不要导入core_cm3.h,然后使用系统提供的

2> 启动文件

错误:Label'Reset_Handler' is defined pubweakRR......

解决方法:add ":NOROOT" to the "SECTION"statement

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

相关推荐
俺不理解8 分钟前
Android Studio 打开项目卡在 Importing xx Gradle Project
android·ide·android studio
kylezhao201941 分钟前
C#读取字节数组某个位的值
开发语言·c#
资生算法程序员_畅想家_剑魔1 小时前
Java常见技术分享-26-事务安全-锁机制-作用与分类
java·开发语言·数据库
qq_406176141 小时前
JS 事件循环(Event Loop)
开发语言·前端·javascript
weixin_433179331 小时前
python - for循环,字符串,元组基础
开发语言·python
智航GIS2 小时前
9.1 多线程入门
java·开发语言·python
qq19257230272 小时前
QT的QML
开发语言·qt
情缘晓梦.2 小时前
C语言分支与循环
c语言·开发语言
消失的旧时光-19432 小时前
从 Java 接口到 Dart freezed:一文彻底理解 Dart 的数据模型设计
java·开发语言·flutter·dart
芯岭技术2 小时前
XL2477 WiFi 透传模组,让产品快速、低成本接入无线网络
单片机·嵌入式硬件