【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

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

相关推荐
zgj_online2 小时前
vscode的zsh终端,conda切换node环境不成功的解决方案
ide·vscode·conda
测试人社区—小叶子2 小时前
Rust会取代C++吗?系统编程语言的新较量
运维·开发语言·网络·c++·人工智能·测试工具·rust
txwtech2 小时前
第20篇 python如何找到pyd文件的
开发语言·python
问问计算机2 小时前
vscode analyzing... and its dependencies 耗时过长问题
vscode·编辑器
00后程序员张2 小时前
Python 抓包工具全面解析,从网络监听、协议解析到底层数据流捕获的多层调试方案
开发语言·网络·python·ios·小程序·uni-app·iphone
胡八一2 小时前
解决使用PCbuild\build.bat构建python之后,运行pip报错
开发语言·python·pip
ALex_zry2 小时前
Rust 变量遮蔽 五类典型应用场景
开发语言·后端·rust
hoiii1872 小时前
MATLAB中离散傅里叶变换(DFT)的实现与分析
开发语言·matlab
灰灰勇闯IT2 小时前
RN原生模块交互:打通JS与原生的桥梁
开发语言·javascript·交互