IAR新建stm32工程,完美移植stm32标准库(附源码)
- 开发环境: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标准库(附源码)相关推荐
- print python 带回车_python标准库threading源码解读【二】
紧接着上一篇文章继续解析源码 甘蔗:python标准库threading源码解读[一]zhuanlan.zhihu.com 目录 Event的介绍和用法 Event源码解析 以后的内容尽量少一点并且 ...
- [08]ESP32+激光传感器VL53L1x移植与调试(附源码)
文章目录 一.硬件介绍 1. VL53L0X介绍 2. VL53L1X介绍 3. VL53L1X典型电路 4. VL53L0X与VL53L1X区别? 二.移植过程介绍 1. 官方库文件如何使用? 2. ...
- 是谁在Go标准库的源码中植入了色情网站?
昨天,有网友在群里说在GitHub上发现了色情网站! GitHub上怎么会有色情网站呢?网友给出了下面的截图: 这个出现在Go标准库中的Issue里面,有一个url- 该Issue地址:https:/ ...
- 基于stm32单片机的模拟IIC时序(附源码)
我下面要说的是基于stm32单片机的模拟IIC时序,以及是一些要注意的事项:结合自己所做的MMA7455加速度传感器,我把模拟IIC的源代码贴了出来,大家可以参考一下. 1.因为在IIC协议中,当总线 ...
- 【软件】实现STM32软件精确时间的方法(附源码)
欢迎关注[玩转单片机与嵌入式]公号,回复关键字获取更多免费视频和资料 回复[加群],[单片机].[STM32].[硬件知识].[硬件设计].[经典电路].[论文].[毕业设计].[3D封装库].[PC ...
- android 手机壁纸源码,Android工程实现换壁纸功能【附源码】
最近工作要实现换壁纸小功能,将代码做成demo发出来 没有采用zip格式换肤,因为只是更换一张图片背景 1.将三张图放入drawable-hdpi,我放的是480*800的 2.用sharedPref ...
- 基于STM32开源:磁流体蓝牙音箱(包含源码+PCB)
目录 日常·唠嗑 一.视频效果 二.硬件设计 三.程序设计 四.工程获取 五.专利 日常·唠嗑 21年6月的时候,那会刚开始创业,跟着合伙人园丁(笔名)在创业的道路上,瞎灯黑火乱摸索,基本上是能跟开发 ...
- STM32闭环步进电机驱动器方案,原理图,源码,PCB
STM32闭环步进电机驱动器方案,原理图,源码,PCB id=664404898534&
- 【qt】qt工程中包含c++标准库头文件,提示找不到。
问题: 在qt工程中包含c++标准库头文件,提示找不到. 如下: #include <vector> using namespace std; 解决办法: 在*.pro文件中增加vecto ...
- 基于stm32单片机的图书馆噪音检测量分贝仪(源码+原理图)
资料编号:080 根据噪音大小,分别不同指示灯,当噪音过大的时候蜂鸣器报警, 具体功能请看下面演示视频 全套资料齐全: 80-基于stm32单片机的图书馆噪音检测量分贝仪(源码+原理图) stm ...
最新文章
- php网课资源百度云盘_安全中国PHP网站开发工程师就业指导班 35课 附课件、源码,全套视频教程学习资料通过百度云网盘下载...
- VS快速注释多行 以及 取消
- 老板:kill -9 的原理都不知道就敢去线上执行?明天不用来了
- 中psr_PSR-SX900测评:雅马哈升级幅度较大的高品质编曲键盘
- JDK14的新特性:Lombok的终结者record
- linux目录操作函数
- linux远程拷贝免手动输入密码,scp远程拷贝避免输入密码
- mybatis多个foreach_mybatis的foreach 删除多条使用汇总
- Java GC机制详解
- 推荐一个用Flutter写的仿网易云音乐项目(已开源)
- ET游戏框架之环境搭建与运行
- HBuilder X如何运行uni-app 项目
- QQ连连看外挂--基于LAScript
- 程序员打造影响力常犯的 3 个错
- iVX开发过程整理的常见问题与回答(二)
- github下载文件时让输入用户名和密码
- FFplay文档解读-16-音频过滤器一
- CUDA/cudnn/CUDA Toolkit/NVCC区别简介
- Python爬虫爬取小说
- python 判断手机号码和正整数