当前位置: 首页 > article >正文

IAR 9.1 版本创建 STM32F1 工程全解析(V3.6.0标准外设库)

一前言之前一直用的KEIL MDK 编译ST工程最近开始学习用IAR搭建工程先是不知道官网下载的V3.6.0标准外设库里面的文件该怎么挑、怎么放再是IAR 9.1版本和网上低版本教程不兼容一编译就报Pe147错误最后还搞混“工程”和“工作空间”到底啥关系建了几个实验工程就乱成一团。摸索了好几天终于把工程搭建规范摸透了也理清了所有文件的来源的路径现在把自己的学习历程和整理的经验记录下来既是给自己留个笔记也希望能帮到和我一样刚开始学IAR的人。先说明本文全程用的是IAR 9.1 版本标准外设库是从ST官网下载的STM32F10x_StdPeriph_Lib_V3.6.0。附IAR官网地址IAR 嵌入式工作台 |IARST标准外设库下载地址STM32标准外设软件库 - 意法半导体二IAR STM32 标准工程结构新建一个IAR_STM32F1_LED_Toggle文件夹里面新建五个如图所示的文件夹命名可根据喜好自行命名无需完全一致用于存放必需文件。每个文件所存放的内容如图所示其中Doc文件可选。IAR_STM32F1_LED_Toggle实验/ # 工程根目录命名清晰方便区分不同实验 ├─ CMSIS/ # 内核芯片底层文件来自V3.6.0标准库 ├─ STM32F10x_StdPeriph_Driver/ # 标准外设库文件来自V3.6.0标准库 ├─ User/ # 自己写的代码主函数、中断函数等 ├─ IAR_Project/ # IAR工程文件编译输出IAR自动生成集中存放 └─ Doc/ # 可选放原理图、 datasheet、自己的学习笔记三各文件夹作用详细说明以及从标准外设库的哪些文件夹获取1 CMSIS/内核芯片底层启动文件核心作用提供STM32F1的内核驱动、芯片寄存器定义、系统时钟初始化。文件来源标准库路径1内核和底层文件STM32F10x_StdPeriph_Lib_V3.6.0 → Libraries → CMSIS → CM3 → DeviceSupport → ST → STM32F10x标准库路径2启动文件STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\iar启动文件按芯片容量选md中容量hd大容量ld小容量我用的STM32F103C8T6所以选择中容量如果是F100系列的选择后面带vl后缀的。有些教程可能会复制core_cm3.h文件但IAR 9.1无需手动添加core_cm3.hIAR 9.1自带仅保留4个必要文件即可。最终CMSIS文件夹如图2 STM32F10x_StdPeriph_Driver/标准外设库核心作用提供STM32F1所有外设GPIO、UART、ADC等的驱动函数不用我们自己写驱动直接用标准库的就行这个文件夹的结构是固定的不要随意修改。标准库路径STM32F10x_StdPeriph_Lib_V3.6.0 → Libraries → STM32F10x_StdPeriph_Driver把这个路径下的“src”和“inc”两个文件夹直接复制到我们工程的STM32F10x_StdPeriph_Driver文件夹里不用做任何修改结构如下最终STM32F10x_StdPeriph_Driver文件夹如图根据之前keil的使用经验src文件夹里的.c文件不用全部添加到IAR工程比如做LED实验只加misc.c、stm32f10x_gpio.c、stm32f10x_rcc.c这3个就够了加太多会增加编译时间还容易混乱。3 User/自己写的代码核心目录核心作用存放自己编写的所有代码包括主函数、中断服务函数、自定义驱动比如延时函数是我们自己开发的核心区域这个文件夹的文件一部分来自标准库一部分是自己写的。标准库路径STM32F10x_StdPeriph_Lib_V3.6.0\Project\STM32F10x_StdPeriph_Examples\GPIO\IOToggle从这个路径里复制以下文件到我们工程的User文件夹。最终User文件夹如图stm32f10x_conf.h这个文件一定要有而且要放在User文件夹里它是标准库的“总开关”用来开启或关闭外设驱动没有它工程会报“找不到外设函数”的错误4 IAR_Project/IAR工程文件编译输出核心作用存放所有IAR工程相关文件和编译输出这个后续IAR新建工程会细讲。5 Doc/可放原理图及需求等此文件夹可按需建立不做讲解。四IAR新建STM32F1工作空间及工程一个工作空间可以放多个工程工程之间完全独立互不干扰切换工程不用重新打开IAR。6.2 官方定义概念后缀核心作用包含内容工作空间Workspace.eww管理多个工程方便切换不用反复打开IAR不包含任何代码只记录已添加的工程、当前激活的工程、窗口布局工程Project.ewp一个独立的STM32程序对应一个具体实验如LED、串口芯片型号、头文件路径、添加的.c文件、编译选项、最终生成的.hex文件每个工程都有自己独立的文件夹不要共用CMSIS、User文件夹否则会出现文件冲突一个工程报错其他工程也会受影响。1.新建工作空间打开IAR → File → New Workspace2.创建新项目Project - Create New Project3.选择ARM,空项目Empty project),点击ok4.选择保存项目的目录我们保存在刚刚准备的文件目录里面去然后项目名称命名为LED_Toggle然后保存。5.IAR添加文件和文件组点击工程然后右键选择添加三个和我们在工程目录下的文件组如下其中CMSIS组下还要再添加如图所示组6.添加相应文件然后在每个目录组里面添加工程目录对应文件下的.c文件依次添加CMSIS、标准固件库、还有User目录下的文件。最终添加成功应为如图所示结构其中CMSIS只添加启动文件和C文件USER只添加main文件驱动文件按需添加对应的.c和.h文件我这里直接全选添加了。到这里IAR新建工作空间和工程已经全部搞定了。五IAR工程选项配置1.配置内核和芯片型号点击工程然后右键选择Options…选项。然后配置芯片内核和型号如下图STM32F103C8T62.配置头文件包含路径C/C Compiler - preprocessor然后在里面添加我们所需要的头文件目录如下点击后会出现格式有误按图所示转换格式即可。把所有路径都添加成功后应如图所示。3 在Options配置中添加所需要的宏定义如图所示宏放在下方USE_STDPERIPH_DRIVER STM32F10X_MD4.配置调试器和相关配置5.配置是否使用IAR软件自带的一些库函数如果需要使用某些标准的库函数接口如我们使用的printf and scanf那么库就需要选择Full类型了如下图所示。使用新版本的IAR软件需要勾选 Use CMSIS微控制器软件接口标准的意思。如下图所示。6.编译下载程序编译程序工程下点击main.c,按F7编译程序此时会弹出个文件框意思是需要一个地方存放工作空间我们新建一个STM32F1_IAR_Study文件夹用于存放此工作空间建议不要与项目放在同一个文件夹且工程路径正确、无中文特殊符号之后弹出的信息可能会报错是因为标准库模板里的main.c会有#include stm32_eval.h这个是评估板专用的普通工程要删掉。删掉后再按F7就会提示编译成功。下载程序1、首先去掉Use flash loader选项的勾不去的话默认下载调试同时进行STLINK配置界面如图点击Project - Download - Downlaod active application 就可以下载程序了到这里IAR工程建立及编译下载程序已经全部完成了。六IAR常见报错及解决办法1Error[Pe147] 函数声明冲突报错示例declaration is incompatible with __nounwind __softfp unsigned int __iar_builtin_REV16(unsigned int)declared in iccarm_builtin.h刚开始跟着低版本教程把V3.6.0标准库CMSIS路径下的core_cm3.h文件复制到了工程里结果一编译就报这个错查了很久才知道IAR 9.1自带了这个文件两者冲突了。解决方法直接删除工程CMSIS文件夹里的core_cm3.h文件不用替换、不用下载IAR 9.1会自动调用自带的内核文件所有Pe147报错都会消失。2Fatal Error[Pe1696] 找不到 stm32_eval.h报错示例cannot open source file stm32_eval.h复制了V3.6.0标准库模板里的main.c没仔细看里面有一行#include stm32_eval.h编译的时候就报错以为是头文件路径没配好折腾了半天后来才知道这个文件是评估板专用的。解决方法打开User文件夹下的main.c文件删除一行代码#include stm32_eval.h保存后重新编译报错就没了。3Error[Li006] 重复定义报错示例duplicate definitions for AHBPrescTable; in XXX\CMSIS\system_stm32f10x.o, and XXX\User\system_stm32f10x.o搭建工程时不小心把CMSIS文件夹里的system_stm32f10x.c文件又复制了一份到User文件夹里还把这两个文件夹里的system_stm32f10x.c都添加到了IAR工程中结果一编译就报了4个Li006重复定义错误折腾了好久才找到原因。报错原因通俗理解system_stm32f10x.c文件里包含了AHBPrescTable、SystemCoreClock、SystemCoreClockUpdate、SystemInit这4个核心函数/变量你同时把这个文件放在了CMSIS和User两个文件夹还都添加到了IAR工程中IAR编译时会识别到两个相同的文件就会报“重复定义”错误。解决方法打开你的工程文件夹进入User文件夹找到并删除里面的system_stm32f10x.c文件这个文件本来就该放在CMSIS文件夹User文件夹里不需要打开IAR工程在左侧“Project”窗口找到“User”文件夹下的“system_stm32f10x.c”如果有的话右键点击 → Remove删除确保工程里只保留CMSIS文件夹下的system_stm32f10x.c保存工程重新编译Li006报错会全部消失。system_stm32f10x.c和system_stm32f10x.h只能放在CMSIS文件夹绝对不能复制到User文件夹也不能在工程中添加两个相同的文件这是新手最容易踩的坑之一。七写在后面本博客仅记录自己的学习进程无任何商业用途基于论坛上已经存在的内容结合自己实操过程完成了此博客自己也做了一些细节验证在此记录下来作为学习沉淀。如有侵权联系速删。

相关文章:

IAR 9.1 版本创建 STM32F1 工程全解析(V3.6.0标准外设库)

一:前言 之前一直用的KEIL MDK 编译ST工程,最近开始学习用IAR搭建工程:先是不知道官网下载的V3.6.0标准外设库,里面的文件该怎么挑、怎么放;再是IAR 9.1版本和网上低版本教程不兼容,一编译就报Pe147错误&a…...

在超大数据集下 DuckDB 与 MySQL 查询速度对比姿

一、什么是urllib3? urllib3 是一个用于处理 HTTP 请求和连接池的强大、用户友好的 Python 库。 它可以帮助你: 发送各种 HTTP 请求(GET, POST, PUT, DELETE等)。 管理连接池,提高网络请求效率。 处理重试和重定向。 支…...

GLM-4.1V-9B-Base与Proteus联调:可视化电路仿真结果分析

GLM-4.1V-9B-Base与Proteus联调:可视化电路仿真结果分析 1. 硬件调试的新思路 在电子工程领域,电路调试一直是个耗时费力的过程。工程师们需要盯着示波器上的波形,手动比对预期与实际结果,这个过程不仅容易出错,还特…...

【零基础入门】本地LLM聊天机器人保姆级教程|Windows+Mac通用

本文适合:完全不懂Python、AI零基础小白,无需显卡、无需翻墙、无需付费,跟着步骤复制粘贴即可拥有自己的本地AI助手。 🍓 前言 最近本地大模型特别火,很多同学想入门,却被环境配置、模型部署、代码逻辑劝退…...

Wan2.2-I2V-A14B Java面试热点:如何设计高并发视频生成任务系统?

Java面试热点:如何设计高并发视频生成任务系统? 1. 场景与挑战 视频生成服务正成为内容创作领域的热门需求,而高并发场景下的系统设计是Java后端开发面试中的常见考察点。假设我们需要基于Wan2.2-I2V-A14B模型构建一个视频生成平台&#xf…...

mremap:用户态调用mremap后VMA的pgoff以及page会发生发生

结论 先说结论: 1、执行 mremap 后,如果新的addr之前被映射过,之前映射过的page会被释放掉,新的addr先unmap掉。重新把旧addr的page重新映射到新的addr 2、VMA 确实会发生变化:如果原来的一个连续 VMA地址 会被拆分…...

Universal Control Remapper使用难题攻克:3个核心问题的系统解决方案

Universal Control Remapper使用难题攻克:3个核心问题的系统解决方案 【免费下载链接】UCR Universal Control Remapper [ALPHA] 项目地址: https://gitcode.com/gh_mirrors/ucr/UCR 作为一款开源的控制器映射工具,Universal Control Remapper&am…...

Anthropic发布史上最强模型:Claude Mythos Preview,但遭禁用

“太危险不能发布”这句话,AI 行业七年前就说过一次。是2019 年 2 月,OpenAI 发了一个叫 GPT-2 的语言模型。当时OpenAI给出的理由是担心被用来大规模生成虚假信息,所以只放出了一个缩水版。七年过去,Anthropic把这句话又说了一遍…...

【工业PHP物联网网关开发实战指南】:从零搭建高并发、低延迟数据中继系统(含Modbus/TCP+MQTT双协议栈源码)

第一章:工业PHP物联网数据网关开发概览工业物联网(IIoT)场景中,PHP 作为成熟稳定的后端语言,正以轻量、可扩展、易集成的特性,在边缘侧数据网关开发中焕发新生。本章聚焦于构建一个面向工业现场的 PHP 数据…...

内容审核自动化:Qwen3Guard-Gen-WEB部署与集成实战教程

内容审核自动化:Qwen3Guard-Gen-WEB部署与集成实战教程 1. 认识Qwen3Guard-Gen-WEB Qwen3Guard-Gen-WEB是阿里开源的安全审核模型Qwen3Guard-Gen的即用型封装,它将复杂的AI审核能力转化为开箱即用的Web服务和API接口。不同于传统的二分类审核系统&…...

单调队列优化多重背包 学习笔记 详解蔷

背景 StreamJsonRpc 是微软官方维护的用于 .NET 和 TypeScript 的 JSON-RPC 通信库,以其强大的类型安全、自动代理生成和成熟的异常处理机制著称。在 HagiCode 项目中,为了通过 ACP (Agent Communication Protocol) 与外部 AI 工具(如 iflow …...

Claude Mythos Preview 模型强到不敢公开,是真的吗?

Claude Mythos Preview 模型官方安全与能力报告(Anthropic 2026年4月7日) 本文为Anthropic公司2026年4月7日发布的Claude Mythos Preview模型官方安全与能力报告,也是人类目前最顶级的大模型之一的完整技术与风险说明书。 一、一句话定位 …...

Pixel Language Portal 系统资源管理:应对 C 盘空间不足的智能清理建议

Pixel Language Portal 系统资源管理:应对 C 盘空间不足的智能清理建议 1. 引言:C盘空间告急的日常困扰 "您的C盘空间不足"——这个弹窗可能是很多Windows用户最不愿看到的提示之一。随着使用时间增长,系统盘空间被各种临时文件、…...

Scrapy工作空间搭建与目录结构解析:从初始化到基础配置全流程

Scrapy工作空间搭建与目录结构解析:从初始化到基础配置全流程 在Scrapy爬虫开发中,规范的工作空间搭建是高效开发、便于维护的基础。无论是个人数据采集项目,还是企业级大规模爬虫开发,清晰的项目结构、标准的操作流程&#xff0…...

一文吃透Scrapy:从本质到实战,揭秘商用爬虫的核心框架

一文吃透Scrapy:从本质到实战,揭秘商用爬虫的核心框架 在网络爬虫领域,Scrapy绝对是绕不开的核心工具。无论是个人做数据采集,还是企业级商用爬虫项目,它都是绝大多数开发者的首选。但很多人对Scrapy的认知存在偏差&a…...

Agent智能体开发:基于万象熔炉·丹青幻境构建自主任务执行系统

Agent智能体开发:基于万象熔炉丹青幻境构建自主任务执行系统 最近AI圈子里“智能体”(Agent)这个词特别火,但很多人可能还不太清楚它到底能做什么。简单来说,它不再是那个你问一句、它答一句的聊天机器人,…...

RWKV7-1.5B-G1A在Ubuntu系统的部署与优化实践

RWKV7-1.5B-G1A在Ubuntu系统的部署与优化实践 1. 环境准备与系统要求 在开始部署RWKV7-1.5B-G1A模型之前,我们需要确保Ubuntu系统满足基本要求。我推荐使用Ubuntu 20.04 LTS版本,因为这个版本长期支持且稳定性好,社区资源也丰富。 硬件方面…...

RMBG-2.0在在线教育平台的应用:自动为讲师照片生成透明背景直播贴纸

RMBG-2.0在在线教育平台的应用:自动为讲师照片生成透明背景直播贴纸 1. 引言:在线教育讲师的“形象”难题 如果你是一位在线教育平台的讲师,或者负责运营一个知识付费的直播间,你一定遇到过这样的场景: 直播前&…...

Java与C++:7大核心差异全解析

好的,Java 和 C 都是广泛使用的面向对象编程语言,但它们在设计哲学、特性和应用场景上存在显著区别。以下是它们的主要差异:1. 内存管理C:支持手动内存管理(通过 new/delete 操作符)。程序员需自行分配和释…...

Go Routine 调度性能调优技巧

Go Routine 调度性能调优技巧 Go语言凭借其轻量级的协程(Goroutine)和高性能的调度器,成为高并发场景下的热门选择。在实际开发中,如果不合理使用Goroutine,可能会导致性能瓶颈,如调度延迟、资源竞争或CPU…...

EasyAnimateV5图生视频模型小白入门:5分钟快速部署与一键生成实战

EasyAnimateV5图生视频模型小白入门:5分钟快速部署与一键生成实战 1. 快速了解EasyAnimateV5 EasyAnimateV5是一款专注于图生视频任务的AI模型,它能将静态图片转化为动态视频。与常见的文生视频模型不同,它特别擅长基于已有图片内容生成连贯…...

Python全景与哲学:为何选择Python

# 001、Python全景与哲学:为何选择Python?昨天深夜调试一个嵌入式C项目,指针越界导致内存写穿,硬是熬到三点才靠逻辑分析仪抓到异常。关机时突然想到:同样的功能如果用Python写,可能晚饭前就收工了。这个反…...

2026年冷干机十大品牌深度测评:从能效到服务的工业级选型指南

冷冻式干燥机(冷干机)作为压缩空气系统的“水分守门员”,直接影响工业生产的稳定性——食品加工的卫生级空气、电子制造的低露点要求、化工行业的腐蚀防护,都依赖冷干机的可靠运行。对于处于购买阶段的企业而言,选型的…...

文墨共鸣效果展示:政策文件A/B/C三版本语义距离的三维水墨拓扑图

文墨共鸣效果展示:政策文件A/B/C三版本语义距离的三维水墨拓扑图 1. 项目概览 文墨共鸣(Wen Mo Gong Ming)是一个将深度学习算法与传统中国水墨美学相结合的创新项目。通过阿里达摩院开源的StructBERT大模型,系统能够深入分析文…...

Phi-4-mini-reasoning vLLM性能调优:CUDA Graph启用、PagedAttention深度优化

Phi-4-mini-reasoning vLLM性能调优:CUDA Graph启用、PagedAttention深度优化 1. 模型概述与部署环境 1.1 Phi-4-mini-reasoning模型简介 Phi-4-mini-reasoning是一个基于合成数据构建的轻量级开源模型,专注于高质量、密集推理的数据处理能力。作为Ph…...

硬核万字图解 MySQL 表空间、Tables、Index、双写缓冲、Redo Log、Undo Log 原理

在数据库领域,MySQL 的 InnoDB 存储引擎以其高性能、高可靠性和事务支持著称。 MySQL innoDB 引擎架构可以分为两大块,分别是内存架构(In-Memory Structure)和磁盘架构(On-Disk Structure)。 图 1 书接上…...

Python 环境构建艺术:虚拟环境、包管理与开发工具链

# 002、环境构建艺术:虚拟环境、包管理与开发工具链上周帮同事调试一个老项目,问题出得挺典型:本地跑得好好的脚本,放到服务器上就报依赖冲突。日志里赫然一行“numpy版本不匹配导致内存布局错误”,两个人对着屏幕查了…...

值类型与引用类型:别再只背“栈和堆”了,看这 个实际影响颜

基础示例:单工作表 Excel 转 TXT 以下是将一个 Excel 文件中的第一个工作表转换为 TXT 的完整步骤: 1. 加载并读取Excel文件 from spire.xls import * from spire.xls.common import * workbook Workbook() workbook.LoadFromFile("示例.xlsx"…...

如何让 Claude Code 彻底变聪明:完整记忆 + 插件体系 + 本地零占用实战教程(2026最新)!!!

从“每次重启就失忆的实习生” → “拥有长期记忆、实时知识、安全检查、结构化工作流的资深架构师”大家好,我最近在用 Claude Code 开发项目时,深深感受到上下文丢失和知识过时的痛苦。经过一番折腾,我把目前社区最强、最实用的插件体系全部…...

云原生环境中的服务网格安全最佳实践

云原生环境中的服务网格安全最佳实践 🔥 硬核开场 各位技术老铁,今天咱们聊聊云原生环境中的服务网格安全最佳实践。别跟我扯那些理论,直接上干货!在云原生时代,服务网格已经成为微服务架构的重要基础设施,…...