• 开发环境:Window 10 64bit
  • 开发工具:IAR Embedded Workbench
  • 硬件:stm32f103c8t6

基于IAR 开发工具,新建立STM32F1系列的最小开发例程,并加入stm32的官方标准库,工程源码STM32-IAR-Demo。下面是详细步骤说明:

1.下载STM32官方标准库

点击上面链接,下载需要登陆账号,如果没有就注册一个,非常快就能注册完成。我用的是F1系列,如果你用的不是F1系列,那么打开链接后找到对应的标准库下载。我下载解压完是这样子的(版本V3.5.0):

上面的Project里面就有IAR的例子工程,也有其他编译器的例子工程,以及外设的使用例子。一般我们只需要选择熟悉一种开发工具即可,不会用到所有的例子,同时如果我们没有买官方的开发板,它的摸板例子也不能直接使用。我们只需要将关键的库文件复制到我们新的项目目录里,对应自己买的开发板资源进行开发。

2.新建IAR工程目录

在自己电脑上新建一个STM32-IAR-Demo的文件夹,在该文件夹里面创建以下文件夹:

Config保存IAR工程需要的配置文件;Libraries:保存stm32标准库文件,以及一些内核文件,一般情况不需要更改的文件;Project:保存IAR工程文件,以及IAR编译过程产生的文件。User:保存自己写的代码,里面可以跟据自己的喜好再进行文件夹分类,我加了一个main.c文件进去。

以上文件夹分类可根据自己的喜好进行调整。

3.将‘步骤1’下载的标准库文件复制到‘步骤2’新建的目录里

1.将stm32标准库en.stsw-stm32054\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template\EWARM 文件夹里的.icf文件全部复制到STM32-IAR-Demo下的Config文件夹里:

2.将stm32标准库en.stsw-stm32054\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries里的文件复制到STM32-IAR-Demo下的Libraries文件夹里:

CMSIS里面还可把多余的文件去掉,我这里没有再进一步处理。CMSIS\CM3\CoreSupport里面是M3核通用的文件,需要用到。CMSIS\CM3\DeviceSupport\ST\STM32F10x里面的.H和.C文件都用到,其中:stm32f10x.h里定义了芯片所有寄存器的基地址,以及配置寄存器的结构体的定义;两个system_stm32f10x文件时系统默认时钟的配置,它里面的SystemInit函数会在芯片启动时调用(启动文件.s里),所以我们在main函数里不进行时钟配置也可以正常工作。

CMSIS\CM3\DeviceSupport\ST\STM32F10x里面还有一个startup文件夹,我们只需要它底下iar文件夹里面的文件,打开iar文件夹会发现很多个.s文件,我们使用时需要对应自己芯片的容量选择一个就行。

3.将stm32标准库en.stsw-stm32054\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template里的其中3个文件(下图所示)复制到STM32-IAR-Demo下的User文件夹里:

这里并没有复制main文件,我们在新工程里新建一个空的main.c文件即可,也是放在User文件夹底下。stm32f10x_conf.h文件的作用是包含哪些用到的外设的头文件,假如没有用到adc模块,那就注释掉#include "stm32f10x_adc.h"这一句话,以节约编译出来的程序所占的空间。stm32f10x_it.h文件的作用是中断函数的定义,如果用到外设的中断,可以统一在这个文件夹里写,中断函数的名字不是随便起的,需要参考.s启动文件。

4.到此,建立stm32的IAR工程的前期工作已准备完成。

4.打开IAR软件,新建IAR工程

1. 打开IAR->File->New Workspace建立好工作空间,保存工作空间File->Save Workspase As,选择刚才新建的STM32-IAR-Demo目录下的Project文件夹里,保存名字STM32-IAR-Demo;接着Project->Create New Project,选择Empty project空的工程,点确认,选择保存路径是刚才新建的STM32-IAR-Demo目录下的Project文件夹里,保存名字也是STM32-IAR-Demo。新建好了之后的Project文件夹:

2.将新建STM32-IAR-Demo目录里的源文件添加到IAR工程里面,右击界面左边的工作空间,先添加组,我这加了Libraries、Startup、User三个组:

接着鼠标在组上右击添加文件:

Libraries——我在Libraries组下又新建了两个组CMSIS、STM32F10……_Driver,在STM32-IAR-Demo/Libraries里找到下图所示的文件分别加入到这两个组,图片里组STM32F10……_Driver没有展开,里面添加的是STM32-IAR-Demo\Libraries\STM32F10x_StdPeriph_Driver\src下所有的.c文件。

Startup——在STM32-IAR-Demo\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\iar下找到适合自己芯片容量的.s文件,

User——添加STM32-IAR-Demo\User里的stm32f10x_it.c文件。

到此,所有.c文件添加完毕。如果某些.c文件没有用到,也可以添加到工程里面,然后再该文件上右击->Options->Exclude from build打勾,那么它就不会参加编译。

3.配置工程,打开Project->Options,General Options->Target->Device选择使用的芯片型号,General Options->Library Configuration勾上Use CMSIS:

接着,C/C++Compiler->Preprocessor,一处是配置头文件目录(为了在include时不用加上路径),另一处是定义全局宏,如下图配置:

(下面提供文本方便复制)

$PROJ_DIR$\..\

$PROJ_DIR$\..\Libraries\STM32F10x_StdPeriph_Driver\inc

$PROJ_DIR$\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x

$PROJ_DIR$\..\User

USE_STDPERIPH_DRIVER

STM32F10X_MD

再来,配置icf文件:

最后,配置Debugger,选择自己使用的调试器(如下图),再Download里把Verify download勾上(图略):

完成上面配置,记得点击OK保存。

4.添加一个main.c文件,保存到STM32-IAR-Demo/User目录下,并加入到工程:

点击make,进行编译,可能会出现3个警告,把core_cm3.c排除编译,鼠标右击该文件,Options->Exclude form build勾上,前面已经在工程配置里Use CMSIS,无需该文件也可。重新编译就没有错误和警告了。

5.利用移植好stm32标准库的工程实现一个LED例程:

#include "stm32f10x.h"static void LED_GPIO_Init(void);
static void delay(int n);int main(void)
{LED_GPIO_Init();while(1){GPIO_SetBits(GPIOC,GPIO_Pin_13);delay(100);GPIO_ResetBits(GPIOC,GPIO_Pin_13);delay(100);}}static void LED_GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_13;GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStruct);
}static void delay(int n)
{int i;while(n--){for(i = 0;i<0xFFFF;i++);}
}

点击下载调试,点击运行,led闪烁,证明工程没有问题。

接下来可以在User目录下添加自己的代码,继续扩展工程。

补充1:官方例程里的.s文件,在IAR编译器编译时会出现以下警告:

修改方法时,双击一个警告跳转到代码后,比如:

SECTION .text:CODE:REORDER(1)  >>>改为>>> SECTION .text:CODE:NOROOT:REORDER(1)

NOROOT表示如果符号没有被关联的时候是被优专化掉的, 如果想不被优化则使属用ROOT。

更正:icf的路径我设置了绝对路径,如果工程复制到别的地方,编译会报错。如下图更改为相对路径:

$PROJ_DIR$\..\Config\stm32f10x_flash.icf

如若有误,还望指出,谢谢。

IAR新建stm32工程,完美移植stm32标准库(附源码)相关推荐

  1. print python 带回车_python标准库threading源码解读【二】

    紧接着上一篇文章继续解析源码 甘蔗:python标准库threading源码解读[一]​zhuanlan.zhihu.com 目录 Event的介绍和用法 Event源码解析 以后的内容尽量少一点并且 ...

  2. [08]ESP32+激光传感器VL53L1x移植与调试(附源码)

    文章目录 一.硬件介绍 1. VL53L0X介绍 2. VL53L1X介绍 3. VL53L1X典型电路 4. VL53L0X与VL53L1X区别? 二.移植过程介绍 1. 官方库文件如何使用? 2. ...

  3. 是谁在Go标准库的源码中植入了色情网站?

    昨天,有网友在群里说在GitHub上发现了色情网站! GitHub上怎么会有色情网站呢?网友给出了下面的截图: 这个出现在Go标准库中的Issue里面,有一个url- 该Issue地址:https:/ ...

  4. 基于stm32单片机的模拟IIC时序(附源码)

    我下面要说的是基于stm32单片机的模拟IIC时序,以及是一些要注意的事项:结合自己所做的MMA7455加速度传感器,我把模拟IIC的源代码贴了出来,大家可以参考一下. 1.因为在IIC协议中,当总线 ...

  5. 【软件】实现STM32软件精确时间的方法(附源码)

    欢迎关注[玩转单片机与嵌入式]公号,回复关键字获取更多免费视频和资料 回复[加群],[单片机].[STM32].[硬件知识].[硬件设计].[经典电路].[论文].[毕业设计].[3D封装库].[PC ...

  6. android 手机壁纸源码,Android工程实现换壁纸功能【附源码】

    最近工作要实现换壁纸小功能,将代码做成demo发出来 没有采用zip格式换肤,因为只是更换一张图片背景 1.将三张图放入drawable-hdpi,我放的是480*800的 2.用sharedPref ...

  7. 基于STM32开源:磁流体蓝牙音箱(包含源码+PCB)

    目录 日常·唠嗑 一.视频效果 二.硬件设计 三.程序设计 四.工程获取 五.专利 日常·唠嗑 21年6月的时候,那会刚开始创业,跟着合伙人园丁(笔名)在创业的道路上,瞎灯黑火乱摸索,基本上是能跟开发 ...

  8. STM32闭环步进电机驱动器方案,原理图,源码,PCB

    STM32闭环步进电机驱动器方案,原理图,源码,PCB id=664404898534&

  9. 【qt】qt工程中包含c++标准库头文件,提示找不到。

    问题: 在qt工程中包含c++标准库头文件,提示找不到. 如下: #include <vector> using namespace std; 解决办法: 在*.pro文件中增加vecto ...

  10. 基于stm32单片机的图书馆噪音检测量分贝仪(源码+原理图)

    资料编号:080 根据噪音大小,分别不同指示灯,当噪音过大的时候蜂鸣器报警, 具体功能请看下面演示视频    全套资料齐全: 80-基于stm32单片机的图书馆噪音检测量分贝仪(源码+原理图) stm ...

最新文章

  1. php网课资源百度云盘_安全中国PHP网站开发工程师就业指导班 35课 附课件、源码,全套视频教程学习资料通过百度云网盘下载...
  2. VS快速注释多行 以及 取消
  3. 老板:kill -9 的原理都不知道就敢去线上执行?明天不用来了
  4. 中psr_PSR-SX900测评:雅马哈升级幅度较大的高品质编曲键盘
  5. JDK14的新特性:Lombok的终结者record
  6. linux目录操作函数
  7. linux远程拷贝免手动输入密码,scp远程拷贝避免输入密码
  8. mybatis多个foreach_mybatis的foreach 删除多条使用汇总
  9. Java GC机制详解
  10. 推荐一个用Flutter写的仿网易云音乐项目(已开源)
  11. ET游戏框架之环境搭建与运行
  12. HBuilder X如何运行uni-app 项目
  13. QQ连连看外挂--基于LAScript
  14. 程序员打造影响力常犯的 3 个错
  15. iVX开发过程整理的常见问题与回答(二)
  16. github下载文件时让输入用户名和密码
  17. FFplay文档解读-16-音频过滤器一
  18. CUDA/cudnn/CUDA Toolkit/NVCC区别简介
  19. Python爬虫爬取小说
  20. python 判断手机号码和正整数

热门文章

  1. zabbix在configure时候遇到的问题(Ubuntu\debian)
  2. iOS 中正则表达式的使用
  3. 任意编程语言访问PostgreSQL:C++接口
  4. SICP学习笔记(1.1.4~1.1.5)
  5. 【推荐】一款快速预览神器:QuickLook
  6. linux下解除端口占用
  7. go mod引用git仓库中的包:拉取存放在gitee中的package
  8. linux du -hd1查看文件及目录所占磁盘空间
  9. ubuntu21.04下终端路径显示优化
  10. Hadoop Yarn配置多队列的容量调度器案例