单片机STM32 实验一 工程模板的建立

单片机STM32  实验一  工程模板的建立
单片机STM32  实验一  工程模板的建立

微控制器

综合设计与实训

实验名称: 实验一 工程模板的建立

实验一:工程模板的建立

1 实训任务

(1) 安装Keil MDK5软件,安装芯片软件包,注册软件;

(2) 新建工程文件;

(3) 下载程序,并进行软件仿真,观察程序运行结果。

1.1 实验说明

STM32所有系列的微控制器都可以在Keil MDK5下进行软件开发。K eil MDK,也称MDK-ARM,Realview MDK、I-MDK、uVision4等。目前Keil MDK 由三家国内代理商提供技术支持和相关服务。

MDK-ARM软件为基于Cortex-M、Cortex-R4、ARM7、ARM9处理器设备提供了一个完整的开发环境。MDK-ARM专为微控制器应用而设计,不仅易学易用,而且功能强大,能够满足大多数苛刻的嵌入式应用。

1.2 实验步骤

(1) 安装Keil MDK5软件,安装芯片软件包,注册软件;

(2) 建立工程文件,选择芯片型号,加载系统文件、内核文件、标准外设驱动函数,添加系统启动文件;

(3) 设置头文件加载路径,需要配置一个全局的宏定义变量,定位到c/c++界面,然后填写“STM32F10X_HD,USE_STDPERIPH_DRIVER”到Define输入框里面;

(4) 编译整个工程,根据提示修改语法错误;

(5) 下载程序;(6) 选择仿真模式,利用模拟示波器观察程序运行结果。

2 程序设计

(1) 新建文件夹Template,点击MDK的菜单:Project–>New Uvision Project,然后将路径定位到Template之下,在这个文件夹下面建立子文件夹USER,将工程文件就保存在USER文件夹中。工程命名为Template,点击保存。

图1 新建工程

(2) 接下来会出现一个选择CPU的界面,就是选择芯片型号。如图2.19所示,实训平台所使用的芯片型号为STM32F103ZET6,所以在这里选择STMicroelectronics–>STM32F1 Series–>STM32F103–>STM32F103ZET6。

图2 选择芯片类型

图3 选择芯片型号

(3) 点击OK,MDK会弹出Manage Run-Time Environment对话框,这是MDK5 新增的一个功能,在这个界面,可以添加自己需要的组件,从而方便构建开发环境,由于本实验并没有用到,直接关闭即可。

图4 添加组件对话框

(4) 现在USER目录下面包含两个文件夹和两个文件。Template.uvprojx是工程文件,非常关键,不能删除。Listings和Objects文件夹是MDK自动生成的文件夹,用于存放编译过程产生的中间文件,将其删除即可。

图5 删除Listings和Objects文件夹

(5) 接下来,在Template工程目录下面,新建3个文件夹CORE、OBJ以及TM32F10x_FWLib。CORE用来存放核心文件和启动文件,OBJ是用来存放编译过程文件以及hex文件,STM32F10x_FWLib文件夹用来存放ST官方提供的库函数源码文件。已有的USER目录除了用来放工程文件外,还用来存放主函数文件main.c,以及其他包括system_stm32f10x.c等。

图6 新建文件夹

(6) 将固件库包里面相关的启动文件复制到工程目录CORE文件夹。打开路径STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport,将文件core_cm3.c和文件core_cm3.h复制到CORE文件夹中。然后在路径STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\TM3

2F10x\startup\arm下面,将里面startup_stm32f10x_hd.s文件复制到CORE文件夹中。

将官方的固件库包里的源码文件复制到工程目录文件夹下面。打开官方固件库包,STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver 路径

下,将目录下面的src和inc文件夹复制到STM32F10x_FWLib文件夹下面。src 存放的是固件库的.c文件,inc存放的是对应的.h文件,打开这两个文件目录过目一下里面的文件,每个外设对应一个.c文件和一个.h头文件。

图7 src文件夹

(7)STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\ST M32F10x路径下,将里面的三个文件stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h,复制到USER目录下。

STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template路径下的4个文件main.c、stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h复制到USER目录下面。

图8 USER文件夹

(8) 到此,需要的固件库相关文件已经复制到了工程目录下面,现在需要将这些文件加入到工程中。右键点击Template,选择Manage Components。

图9 Manage Components

(9) 下面往Group里面添加工程需要的文件。先选中FWLIB,然后点击右边的Add Files, 进入STM32F10x_FWLib/src路径下,将里面所有的文件选中(Ctrl+A),然后点击Add,然后点击Close可以看到Files列表下面已经包含添加的文件。这里需要说明一下,在平时的项目工程中,如果只用到了其中的某个外设,是不需要添加没有用到的外设库文件的。本实验中选择全部添加进来是为了后面方便,不用每次添加,当然这样的坏处是工程太大,编译起来速度慢,可以根据需要自行选择。

图10 添加src文件

图11 添加过后的FWLIB

(10) 用同样的方法,将Groups定位到CORE和USER下面,添加需要的文件。CORE下面需要添加的文件为core_cm3.c、core_cm3.h、startup_stm32f10x_hd.s (注意:默认添加的时候文件类型为.c, 也就是添加startup_stm32f10x_hd.s启动文件的时候,需要将选择文件类型更改为All files才能看得到这个文件),USER目录下面需要添加的文件为main.c、stm32f10x_it.c、system_stm32f10x.c。

图12 添加过后的CORE

图13 添加过后的USER

(11) 在编译工程之前要先选择编译中间文件编译后存放目录。方法是点击魔术棒,然后选择Output选项下面的“Select folder for objects…”,然后选择目录为新建的OBJ目录。这里需要注意,如不设置Output路径,那么默认的编译中间文件存放目录就是Keil MDK5自动生成的Objects目录和Listings目录。

图14 更改Output路径

(12) 添加头文件路径。对于任何一个工程,都需要把工程中引用到的所有头文件的路径都包含到进来。回到工程主菜单,点击魔术棒,出来一个弹窗,然后点击c/c++选项。然后点击Include Paths右边的按钮。弹出一个添加path的对话框,然后我们将如图2.33的3个目录添加进去。注意:Keil5只会在一级目录查找,所以如果你的目录下面还有子目录,记得path一定要定位到最后一级目录。然

后点击OK。

图15 添加头文件路径

(13) 编译工程。可以看到出现很多错误。这是因为3.5版本的库函数在配置和选择外设的时候通过宏定义来选择的,所以需要配置一个全局的宏定义变量。打开c/c++界面,然后填写“STM32F10X_HD,USE_STDPERIPH_DRIVER”到Define输入框里面。(注意:实训平台使用的时STM32F103ZET6位大容量芯片,所以填写STM32F10X_HD,如果是中容量那么STM32F10X_HD修改为STM32F10X_MD,小容量修改为STM32F10X_LD。)然后点击OK。

图16 通过宏定义选择外设

(14) 这次在编译之前,打开工程USER下面的main.c,复制下面一段代码到

main.c覆盖已有代码,然后进行编译。(记得在代码的最后面加上一个回车,否则会有警告,这是软件本身的bug,与代码无关)可以看到,这次编译已经成功了。

3 总结

实验心得:这是第一次实验仿真得到的波形图。通过这次试验我熟悉了Keil MDK5工程模板的建立。Keil MDK5使用C语言作为编程语言,学会了使用Keil MDK5的软件进行仿真。建立第一个工程模板的步骤比较复杂也比较繁琐,但之后的工程,就可以直接拿本模板来套用了。除此之外,在Debug仿真时,要首先打开魔术棒,配置一下Debug的参数,之后还要配置一下示波器的参数,尤其是.DLL文件必须要生成才能仿真。在都配置完成后开始仿真,

STM32建工程详细方法步骤

1、首先找到ST官方最新版本的固件库:STM32F10x_StdPeriph_Lib_V3.5.0 STM32F10x_StdPenph_Ub_V3.5. 0 文件实 2、新建一个工程文件夹:比如led工程文件夹 3、在led工程文件夹中新建 5个文件夹:COREHARDWARESTM32F10x_FWL、 SYSTEM USER COR用来存放启动文件等 HARDWARE来存放各种硬件驱动代码 STM32F10x FWLi文件夹顾名思义用来存放ST官方提供的库函数源码文件 SYSTEM文件夹下包含了delay、sys、usart等三个文件夹。分别包含了delay.c、sys.c、usart.c 及其头文件 delay.h、sys.h、usart.h

USER用来存放我们主函数文件 main.c ,以及其他包括system_stm32f10x.c 等 4、将固件库包里面相关的启动文件复制到我们的工程目录COR之下 打开固件库STM32F10x_StdPeriph_Lib_V3.5.0文件夹,定位到目录 STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 下面,将文件core_cm3.c和文件core_cm3.h复制到COR下面去。然后定位到目录 STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\S TM32F10x\startup\arm 下面,将里面 startup_stm32f10x_md.s、 startup_stm32f10x_ld.s 、startup_stm32f10x_hd 复制到 COREF面。这里我们解释一下,其实我们只用到 arm目录下面的startup_stm32f10x_md.s 文件,这个文件是针对中等容量芯片的启动文件。其他两个主要的为 startup_stm32f10x_ld.s 为小容量,startup_stm32f10x_hd.s 为大容量芯片的 启动文件。这里copy进来是方便其他开发者使用小容量或者大容量芯片的用户。现在看看我们的CORE文件夹下面的文件:

一步步建立 STM32 UCOS 模板

uCOS学习随笔 StepbyStep‐1 ——构建模板(基于STM32控制的第四代圆梦小车) 一、序 基于第四代圆梦小车 —— FIRA 设计了一个使用STM32的控制板(详细介绍见项目中的说明: Introduction B ‐ Hardware of the Smart Car.pdf )。 既然硬件从51升级到ARM,软件也应该相应升级,似乎不能再编写那种简单的轮询调度程序,也应该相应升级到基于操作系统编程。 按STM32的规模和性能,以及小车的控制需求,实时多任务操作系统 uCOSII 应该是不二的选择,不论从其性能和功能考虑,还是从学习角度考虑,uCOSII 都很适合。 首先,它是开源的,有丰富的资源。 其次,它是可靠的,符合正式的工业控制、产品设计需求。 小车所面对的是那些学习相关专业的大学生,作为他们学习的辅助工具,趣味性只是为了降低学习的枯燥性,不是目的。他们借助这个平台是为了积攒应付未来工作的能力,所以,学习内容的实用性是必须考虑的。 本人从未基于操作系统编写嵌入式程序。 开始使用 MCU的时候,MCU的内存太小,256字节 RAM ,2K字节 ROM,能勉强把程序装入就不错了,连 C语言都不敢选择。 而且,那时好像也没有 RTOS(Real Time Operation System),或者是由于信息交流渠道匮乏,不知道有 RTOS。 既然我提供了这个平台,也借此机会尝试一下,和大家一起学习使用 uCOSII。(从单片机应用升级为嵌入式应用 ^_^)

二、Step1想要得到什么?(需求分析) 第一步我想得到的是: 1)如何建立一个基于 uCOSII 的编程环境(目录、文件组织); 2)如何基于IDE(IAR或RvMDK)建立一个工程,能够产生可以运行的程序; 3)得到一个“干净的”、可以作为模板的uCOSII程序组(Project); 4)通过上述过程初步理解在 uCOSII 下如何编写应用程序。 之所以要把“如何建立……”作为需求,而不是找一个现成的模板或示例程序修改、添加自己的功能,是因为看了许多这种程序,感觉“极不可靠”!因为程序中有太多的东西不知道为何而存在?不知道为何而被注释掉?似乎这些东西都像“定时炸弹”,早晚会给你的程序带来麻烦。 同时,也给自己理解程序的构成和运行机制带来困扰,既然是学习,就应该知其然、知其所以然,否则也谈不上“掌握”,更不敢在日后的工作中应用(如果是打工,也许还敢试试,如果是用自己的钱做产品、项目,我想你一定不敢用),如此则和做此事的初衷相悖了。 三、如何入手? uCOS的书有很多,也看了许多,但多数都是解析操作系统本身的,或者是如何移植,鲜有书籍、资料教你如何在操作系统下编程。 实际上,对于学习者,特别是初学者,更多需要的是学会如何在一个移植好的系统下编程,等到能基于操作系统实现自己的功能后,才会有心思去探究操作系统是如何在自己的 MCU上运行的(移植),以及那些神秘的系统功能是如何实现的(了解系统函数及运行机制)。 而且这种探究也是有选择性的,首先是自己用到的功能才有兴趣去研究,否则如坠云雾。其次,取决于自己所扮演的角色,如果只是学习一下,那只需泛泛了解,有个定性的认识即

stm32:系统时钟

实验4 系统时钟实验 上一章,我们介绍了STM32 内部系统滴答定时器,该滴答定时器产生的延时非常精确。在本章中,我们将自定义RCC系统时钟,通过改变其倍频与分频实现延时时间变化,实现LED灯闪烁效果。通过本章的学习,你将了解 RCC系统时钟的使用。本章分为以下学习目标: 1、了解 STM32 的系统构架。 2、了解 STM32 的时钟构架。 3、了解 RCC 时钟的操作步骤。 1.1 STM32 的系统构架 STM32 的时钟比较复杂,它可以选择多种时钟源,也可以选择不一样的时钟频率,而且在系统总线上面,每条系统的时钟选择都是有差异的。所以想要清楚的了解 STM32 的时钟分配,我们先来了解一下 STM32 的系统构架是什么样的。 从上图我们知道,RCC 时钟输出时钟出来,然后经过 AHB 系统总线,分别

分配给其他外设时钟,而不一样的外设,是先挂在不一样的桥上的。比如: ADC1、ADC2、 SPI1、GPIO 等都是挂在 APB2 上面,而有些是挂在 APB1上面,所以,虽然它们都是从 RCC 获取的时钟,但是它们的频率有时候是不一样的。 1.2 STM32 的时钟树 STM32 单片机上电之后,系统默认是用的时钟是单片机内部的高速晶振时钟,而这个晶振容易受到温度的影响,所以晶振跳动的时候不是有一定的影响,所以一般开发使用的时候都是使用外部晶振,而且单片机刚启动的时候,它的时钟频率是 8MHZ,而 STM32 时钟的最高频率是 72MHZ,所以单片机一般开机之后运行的程序是切换时钟来源,并设置时钟频率。大家可能有点疑惑,在第一章到第三章之中,我们并没有看到单片机开机之后设置时钟来源和时钟频率的。其实在使用库函数的时候,其实在库函数启动文件里面,是帮助我们把时钟频率设置到 72MHZ 了。大家可以打开一个库函数工程,在 system_stm32f10x.c 的第 106行,它定义了一个 SYSCLK_FREQ_72MHz: #if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL) /* #define SYSCLK_FREQ_HSE HSE_VALUE */ #define SYSCLK_FREQ_24MHz 24000000 #else #define SYSCLK_FREQ_72MHz 72000000 然后在下面的程序中,根据这个 SYSCLK_FREQ_72MHz 定义,它默认设置成 72MHZ。接下来我们来看一下具体的 RCC 时钟树:

STM32外部中断处理流程

STM32 外部中断配置 2009-07-22 14:16 1配置中断 1、分配中断向量表: /* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); 2、设置中断优先级: NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //设置中断优先级 3、初始化外部中断: /*允许EXTI4中断 */ NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQChannel; //中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = PreemptionPriorityValue;//强占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //次优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //通道中断使能 NVIC_Init(&NVIC_InitStructure); //初始化中断 注意:如果我们配置的外部针脚为PA4,或PB4,或PC4,PD4等,那么采用的外部中断也必须是EXTI4,同样,如果外部中断针脚是PA1,PB1,PC1,PD1 那么中断就要用EXTI1,其他类推。 2配置GPIO针脚作为外部中断的触发事件 1、选择IO针脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; 注意,如果的针脚是端口的4号针脚,配置的中断一定是EXTI4 2、配置针脚为输入 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 3、初始化针脚

STM32的Keil工程文件建立过程

固件库采用3.5.0版本 USE_STDPERIPH_DRIVER,STM32F10X_CL 1.首先建立工程文件,将固件库中的文件复制过来 建立工程文件夹project,包含文件夹 user:用户可自己修改的文件 CMSIS:Cortex-M3内核相关文件 startup:启动单片机的汇编文件 driver:外设操作的驱动文件 具体向工程文件夹中添加的文件为: 将路径:固件库文件夹\Project\STM32F10x_StdPeriph_Template中的stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h文件添加到user文件夹,再在其中建立一个main.c主文件 将路径:固件库文件夹\Libraries\CMSIS\CM3\CoreSupport中的core_cm3.c、core_cm3.h 文件,以及固件库文件夹\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x中的stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h文件添加到CMSIS文件夹 将路径:固件库文件夹\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 中的startup_stm32f10x_cl.s(互联型启动文件)文件添加到startup文件夹 将路径:固件库文件夹\Libraries\STM32F10x_StdPeriph_Driver中的src和inc文件夹全部复制到driver文件夹

2.在Keil中建立工程并管理工程文件

STM32工程模板

你是问有官方固件库创建工程吧?我这里给你说说MDK的创建方法,如果你用的时IAR环境也差不多。 1.解压stm32f10x_stdperiph_lib.zip 可以从ST官方网站免费下载。最新标准库版本为3.5.0 2.创建一个Demo文件夹 2.1 新建子文件夹User,用于存放用户源程序 2.2 新建子文件夹Project,用户KEIL工程文件 2.3 在Project下依次创建Obj和List子文件夹,存放编译过程中产生的中间文件。 3. 复制源代码到Demo文件夹 3.1 将stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.1.2Li braries文件整体复制到Demo文件夹下。这就是ST的标准库,是以源代码形式提供的。 3.2 将库中的演示代码IOToggle中的文件复制到Demo\User文件夹. 4. 新建一个Keil MDK工程 4.1 启动Keil MDK,点击菜单New uVision Project,然后按向导进行操作 4.2 选择CPU类型为STM32F103ZE (这是安富莱STM32开发板采用CPU类型) 4.3 当提示是否复制启动代码时,请选择否。(我们用最新的库中的启动代码,不用Keil软件自带的旧版本启动文件) 4.4 根据自己的需要修改Target名字。(名字任意) 4.5 为了便于代码管理,在这个Project下创建几个Group (名字可以任意) User : 存放用户自己写的源代码 RVMDK : 存放启动文件(汇编文件) StdPeriph_Driver : 存放ST标准库文件 CMSIS : 存放CMSIS接口文件(这也是库的一部分) 4.6 创建好Group后,我们开始依次添加文件。 5. 修改源代码。我们将修改main.c 文件,换成我们自己跑马灯程序。 6. 配置工程, 点击“Options”按钮 6.1 切换到Output。 选择Object文件夹。

STM32中EXTI(外部中断)和NVIC(嵌套向量中断)的关系

STM32中EXTI(外部中断)和NVIC(嵌套向量中断)的关 系 NVIC 是Cortex-M3 核心的一部分,关于它的资料不在《STM32 的技术参 考手册》中,应查阅ARM 公司的《Cortex-M3 技术参考手册》Cortex-M3 的向 量中断统一由NVIC 管理EXTI 是ST 公司在其STM32 产品上扩展的外中断控 制。它负责管理映射到GPIO 引脚上的外中断和片内几个集成外设的中断 (PVD,RTC alarm,USB wakeup,ethernet wakeup),以及软件中断。其输出最终被映射到NVIC 的相应通道。因此,配置EXTI 中断的过程必然包含对 NVIC 的配置,例如下面配置EXTI0 的过程,就要首先配置EXTI 控制器(使 能相应的中断线,选择中断/事件模式,触发边沿极性),然后再配置NVIC 控 制器(EXTI0 映射在NVIC 上的通道号,中断优先级,中断屏蔽状态): GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0); EXTI_InitStructure.EXTI_Line = EXTI_Line0;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; // or RisingEXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;// EXTI0_IRQn is defined in stm32f10x.hNVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure); EXTI0_IRQn 的值,其实就是EXTI0 中断向量在中断向量表中的位置 (STM32 技术参考手册中断向量表Position 栏中的数值)

STM32工程建立(F4系列)

使用MDK(Keil)建立一个STM32工程模板的流程如图所示: 一.获取ST库源码。到ST公司的官网进行查找并下载,如图所示: 1.新建工程文件夹——《STM32工程模板》。首先,新建工程文件夹《STM32工程模板》,然后再在该文件夹下新建6个文件夹,分 别:《Doc》、《BSP 》、《Listing》、《Output》、《Project》和《User》。其中, 2.《Doc》用于存放各种说明文档; 《BSP 》用于存放各种库文件; 《Listing》用于存放编译时产生的中间文件; 《Output》用于存放生成的下载所需的文件; 《Project》用于存放工程文件; 《User》用于存放用户文件,即我们自己编写的各种源文件。具体情况如下图所示: 具体步骤,以KEIL5 MDK5.18中建立STM32F417工程为例: 二.STM32工程建立(F4系列) 2016年4月13日16:57

将下载的stm32f4_dsp_stdperiph_lib_zip 压缩包中的文件复制到工程模板文件 夹下的STM32F4XX_StdPeriph_Driver 文件夹。如下图: 1)将stm32f4_dsp_stdperiph_lib\STM32F4xx_DSP_StdPeriph_Lib_V1.6.1 \Libraries\CMSIS\Include 文件夹中对应的core_cm 文件复制到工程模板文件夹下的CMSIS文件夹。具体操作情况如下图: 2)向建立的工程文件夹中添加库文件。 3.

将stm32f4_dsp_stdperiph_lib\STM32F4xx_DSP_StdPeriph_Lib_V1.6.1 \Libraries\CMSIS\Device\ST\STM32F4xx\Include 文件夹中文件复制到工程模板文件夹下的CMSIS 文件夹。具体操作情况如下图: 3)将stm32f4_dsp_stdperiph_lib\STM32F4xx_DSP_StdPeriph_Lib_V1.6.1 \Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm 文件夹中对应芯片的startup 文件复制到工程模板文件夹下的CMSIS 文件夹。具体操作情况如下图: 4)将库文件中Project文件夹下的相关文件复制到工程模板文件夹下的User文件 夹中。具体操作情况如下图: 5)

stm32工程模板建立

STM32工程建立步骤 Stm32的工程建立稍微有点复杂,所以写一个教程也是为了防止自己以后忘记了步骤而再次繁琐办事。 首先新建一个工程文件夹 改名字 打开Domo新建文件夹 打开Libraries文件夹新建如下文件夹 其实你会发现这都是官方库里面的文件夹,事实上就是拷贝过来的啦。 这是官方3.5版本库 首先我们凑齐Libraries 文件夹里的四个子文件夹 从官方库这个位置STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\Core Support\找到下面两个放到core文件夹内 从官方库这个位置STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ ST\ STM32F10x

把startup文件夹直接复制过来放在Libraries里,另外三个文件放在刚刚建的Devices文件夹里 然后把startup打开再把arm文件夹里的文件都剪切出来放在startup文件夹里,其余文件删除。 从官方库的这个位置STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\ STM32F10x_StdPeriph_Driver拷贝inc、src这两个文件夹 到这里我们新建的Libraries文件夹里的四个子文件夹就凑齐了,可见都是官方的库。 然后我们往Devices文件夹里添加一些文件 从官方库的这个位置STM32F10x_StdPeriph_Lib_V3.5.0\ Project\ STM32F10x_StdPeriph_Template 复制这五个文件放到Devices文件夹里 你会发现这个文件重复了,是因为我们刚才已经放了三个文件其中一个就是它,一模一样随便处理了。 这个时候我们就可以打开Keil了

STM32简记之NVIC和外部中断

STM32简记之NVIC和外部中断 Posted on 2013/06/20 by M 1 之前用stm32也就是用些内部资源或者耍耍前辈留下来的库,最近在写SPWM波的时候才知道自己对于中断这方面的欠缺,更暴漏了我学东西不打基础的恶习,所以打算重新整理下资料,原因有二:1、通过这种方式能加深记忆。2、方便以后查看。因为只追求自己看得懂所以总结的比较简洁,所以称之为简记。 步骤如下: 1、系统初始化,如系统时钟初始化,使之进入72MHZ主频; 程序启动时已调用SystemInit()函数将主频改为72MHZ。 2、 GPIO配置,务必注意打开GPIO时钟时,一定打开AFIO时钟。 在使用引脚的重映射功能和外部中断时需要使用AFIO时钟。 3、 EXTI配置,在这里配置需要选择哪个引脚作为中断引脚。 EXTI_InitTypeDef EXTI_InitStructure; 定义一个EXTI初始化结构体 EXTI_InitStructure.EXTI_Line = EXTI_Line1; 设置中断线:EXTIL_Line1为中断线1 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; 模式:这里有两个模式,一个是中断模式,也就是事件,具体区别如下: “事件:是表示检测有一某件触发事件发生了。中断:有某个事件发生并产生中断,并跳转到对应的中断处理程序中。事件可以触发中断,也可以不触发中断有可能被更优先的中断屏蔽,事件不会事件本质上就是一个触发信号,是用来触发特定的外设模块或核心本身(唤醒).事件只是一个触发信号(脉冲),而中断则是一个固定的电平信号” EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; 设置触发中断方式: EXTI_Trigger_Falling 设置输入线路下降沿为中断请求 EXTI_Trigger_Rising 设置输入线路上升沿为中断请求 EXTI_Trigger_Rising_Falling 设置输入线路上升沿和下降沿为中断请求 EXTI_InitStructure.EXTI_LineCmd = ENABLE; 定义选择中断线的新状态

Keil4 建立STM32工程详解

Keil4 建立STM32工程详解 1:安装mdk412,用注册机注册,这个过程不详细叙述了。 2:在本地某个路径下建立STM32工程文件夹,命名:my_STM32,并在my_STM32下建立rvmdk文件夹,并在rvmdk文件夹内建立 obj,list两个文件夹。 3: 打开Keil4. 4: 选择Project菜单->New uVision Project...,选择.../my_STM32/rvmdk文件夹的路径,并命名工程文件:my_STM32,回车 5:选择器件名称,见图1

图1 单击OK。 6:如图2所示:选择否,不添加Startup.s,以后自己添加。 图2 7:如图3,建立几个Group:startup(即将装入启动文件等),usr(即将装入应用程序文件),FWlib(即将装入库文件的.c文件),doc(即将装入说明文档)

图3 8:右键单击FWlib,Add Files to Group 'FWlib',选择库文件的路径下的src 文件内的所有文件,并点击Add,如图4所示:

图4 9:将cortexm3_macro.s,stm32f10x_vector.s,stm32f10x_it.c, stm32f10x_it.h,stm32f10x_conf.h,main.c,readme.txt拷贝到my_STM32文件夹内。 10:右键单击usr,Add Files to Group 'usr',选择main.c,stm32f10x_it.c,stm32f10x_it.h,stm32f10x_conf.h,并Add,如图5所示

用KEIL5新建工程模版

第1章用KEIL5新建工程模版 版本说明:MDK5.15 1.1新建工程 1.1.1新建本地工程文件夹 为了工程目录更加清晰,我们在本地电脑上新建6个文件夹,具体如下: 表格1工程目录文件夹清单 名称作用 Doc用来放对程序说明的文件,由写程序的人添加 Libraries存放是库文件 Listing存放编译器编译时候产生的c/汇编/链接的列表清单Output存放编译产生的调试信息、hex文件、预览信息、封装库等Project用来存放工程 User用户编写的驱动文件 图10工程文件夹目录 在本地新建好文件夹后,把准备好的库文件添加到相应的文件夹下: 表格2工程目录文件夹内容清单 名称作用 Doc readme.txt Libraries CMSIS:里面放着跟CM3内核有关的库文件

FWlib:STM32外设库文件 Listing暂时为空 Output暂时为空 Project暂时为空 User stm32f10x_conf.h:用来配置库的头文件 stm32f10x_it.h stm32f10x_it.c:中断相关的函数都在这个文件编写,暂时为空 main.c:main函数文件 1.1.2新建工程 打开KEIL5,新建一个工程,工程名根据喜好命名,我这里取LED-LIB,保存在Project\RVMDK(uv4)文件夹下。 1.选择CPU型号 这个根据你开发板使用的CPU具体的型号来选择,MINI选STM32F103VE,ISO选STM32F103ZE。如果这里没有出现你想要的CPU型号,或者一个型号都没有,那么肯定是你的KEIL5没有添加device库,KEI5不像KEIL4那样自带了很多MCU的型号,KEIL5需要自己添加,关于如何添加请参考《如何安装KEIL5》这一章。

STM32中断

STM32外部中断详解 2012-07-02 21:59:24| 分类:嵌入式相关| 标签:|举报|字号大中小订阅 一、基本概念 ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置。STM32目前支持的中断共84个(16个内部+68个外部),还有16级可编程的中断优先级的设置,仅使用中断优先级设置8bit中的高4位。 STM32可支持68个中断通道,已经固定分配给相应的外部设备,每个中断通道都具备自己的中断优先级控制字节PRI_n(8位,但是STM32中只使用4位,高4位有效),每4个通道的8位中断优先级控制字构成一个32位的优先级寄存器。68个通道的优先级控制字至少构成17个32位的优先级寄存器。 4bit的中断优先级可以分成2组,从高位看,前面定义的是抢占式优先级,后面是响应优先级。按照这种分组,4bit一共可以分成5组 第0组:所有4bit用于指定响应优先级; 第1组:最高1位用于指定抢占式优先级,后面3位用于指定响应优先级; 第2组:最高2位用于指定抢占式优先级,后面2位用于指定响应优先级; 第3组:最高3位用于指定抢占式优先级,后面1位用于指定响应优先级; 第4组:所有4位用于指定抢占式优先级。 所谓抢占式优先级和响应优先级,他们之间的关系是:具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套。 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。每一个中断源都必须定义2个优先级。 有几点需要注意的是: 1)如果指定的抢占式优先级别或响应优先级别超出了选定的优先级分组所限定的范围,将可能得到意想不到的结果; 2)抢占式优先级别相同的中断源之间没有嵌套关系; 3)如果某个中断源被指定为某个抢占式优先级别,又没有其它中断源处于同一个抢占式优先级别,则可以为这个中断源指定任意有效的响应优先级别。 二、 GPIO外部中断 STM32中,每一个GPIO都可以触发一个外部中断,但是,GPIO的中断是以组位一个单位的,同组间的外部中断同一时间只能使用一个。比如说,PA0,PB0,PC0,PD0,PE0,PF0,PG0这些为1组,如果我们使用PA0作为外部中断源,那么别的就不能够再使用了,在此情况下,我们智能使用类似于PB1,PC2这种末端序号不同的外部中断源。每一组使用一个中断标志EXTIx。EXTI0 –EXTI4这5个外部中断有着自己的单独的中断响应函数,EXTI5-9共用一个中断响应函数,EXTI10-15共用一个中断响应函数。对于中断的控制,STM32有一个专用的管理机构:NVIC。 三、程序实现

STM32单片机实习,第一课,工程模板建立篇

第一天学习笔记 序号:06 班级:232183 姓名:王猛一、实训项目 基于STM32的智能小车。 二、基本原理 1、嵌入式与STM32 A.什么是嵌入式? 简单的说,除了PC和服务器之外,所有的控制类设备都是嵌入式。 B.嵌入式的特点 硬件特点: ◆体积小、集成效率高; ◆面向特定的应用; ◆功耗低、电磁兼容性好; 如图:

软件特点: 嵌入式软件的开发和硬件紧密相连;

?软件代码效率高并且可靠性好; ?软件一般固化在FLASH和ROM中; ?软件系统要有高实时性; ?一般用c语言开发; 如图: C.主流嵌入式芯片的架构 ARM————英国的一家公司(只设计芯片的IP内核,授权给其他半导体公司)ARM————是一款功耗很低、性能很高的处理器芯片的架构; ARM以前的架构:ARM7、ARM9、ARM11(已经不用); ARM现在的架构:cortex A\R\M; Cortex A系列:开放式操作系统的高处理器(A8\A9\A53\A72); 应用产品:上网本、数字电视、家用网关等

Cortex R系列:面向实时应用; 应用产品:汽车制动系统、航空、动力传输系统等;

Cortex M系列:面向确定性的成本敏感的产品; 应用产品:门禁、扫地机器人、平衡车、无人机、手环等;

D.C51和STM32 51单片机是嵌入式学习中的一款入门级MCU,51单片机诞生于70年代,属于传统的8位单片机,51单片机不能满足市场需求,所以需要新的MCU,也就是STM32; ARM公司推出了基于ARMv7架构的32位的cortex M3\M4的微控制器内核,ST(意法半导体)公司就推出了基于cortex M3\M4内核的MCU,也就是STM32,性价比很高,成本低,简单易用的库函数开发。 E.STM32的应用领域 STM32属于微控制器,自带了很多常用的通信接口(UART\IIC\SPI),可以接非常多的传感器,可以控制很多的设备。 如:无人机、平衡车、智能水杯等

stm32知识点最终版!

1.*嵌入式系统:以计算机技术为基础,以应用为中心,软件硬件可剪裁,适合应用系统对功能可靠性、成本、体积、功耗严格要求的专业计算机系统。 2.*嵌入式系统与传统系统等所区分的三个特征:微处理器通常由32位以上的RISC组成;软件通常是以嵌入式操作系统为核心,外加用户应用程序;具有明显的可嵌入性。 3.*嵌入式系统的应用:智能消费电子中;工业控制中;医疗设备中;信息家电及家庭智能管理系统;网络与通信系统中;环境工程;机器人。 4.*ARM定义的三大分工明确的系列:“A”系列面向尖端的基于虚拟内存的操作系统和用户应用(针对日益增长的运行包括linux、Windows、CE和Android在内的消费电子和无线产品);“R”系列针对实时系统(针对需要运行实时操作系统来惊醒控制应用的系统,包括汽车电子、网络和影像系统);“M”系列对胃控制器和点成本应用提供优化(针对开发费用低功耗低,同时针对性能要求不断增加的嵌入式应用而设计,如汽车车身控制系统和各种大型家电)。 5.ARM Cortex处理器系列是基于ARMv7构架的产品,既有ARM Cortex-M系列,也有高性能的A系列。 6.NEON技术是64/128位SIMD指令集,用于新一代媒体和信号处理应用加速。NEON支持8位,16位,32位,64位整数及单精度浮点SIMD操作,以进行音频,视频、图像和游戏的处理。 7.ARM Cortex-M3处理器的特点:性能丰富成本低,低功耗,可配置性能强,丰富的链接。 8.*STM32F10x处理器分为:101,102,103,105,107。 9.*STM32的总线速度:USB接口速度12Mb/s;USART接口速度4.5Mb/s;SPI接口速度可达18Mb/s;IC接口速度400kHz。 10.STM32系列处理器的优点:先进的内部结构;三种功耗控制;最大程度集成整合;出众及创新的外设。 11.STM32F10x按性能分为:基本型STM32F101,USB基本型STM32F102,增强型STM32F103,互联网型STM32F105、STM32F107系列。 12.STM32F103RBT6系列的命名规则:R-引脚数量、B-Flash大小、T-封装、6-工作温度。 13.*STM32F103按照引脚功能分为:电源、复位、时钟控制、启动配置、输入输出口。 14.STM32F103总线系统包括:驱动单元、被动单元、总线矩阵。 15.最小系统是指仅包含必须的元器件、仅可运行最基本软件的基本系统。 16.典型的最小系统包括:微控制器芯片、供电电路、时钟电路、复位电路、启动配置电路和程序下载电路。 第三章 1.STM32标准库命名则:PPP_Init:根据PPP_InitTypeDef中指定的参数初始化外设ppp; PPP_DeInit:将外设PPP寄存器重设为缺省值; PPP_StructInit:将PPP_InitTypeDef结构中的参数设为缺省值; PPP_Cmd:使能或失能PPP外设; PPP_ItConfig:使能或失能PPP外设的中断源; PPP_GetITStatus:判断PPP外设中断发生与否; PPP_ClearITPendingBit:清除PPP外设中断待处理标志位; PPP_DMAConfig:使能或者失能PPP外设的DMA接口; PPP_GetFlagStatus:检查PPP外设的标志位; PPP_ClearFiag:清除PPP外设的标志位。 2.文件结构:每个C程序通常分为两个文件,一个文件用于保存程序的声明,成为头文件,以.h为后缀。另一个用于保存程序的实现,称为源文件,以.c后缀。 3.C语言的关键字有32个,根据作用分为数据类型、控语言、储存类型、其他关键字。 4.指针:是C语言中广泛使用的一种数据类型. 5.指向数组元素的指针 定义一个整形数组和一个指向整型的指针变量: Int a [10]; Int*p=NULL;//定义指针式要初始化 P=a;//数组名a为数组第0个元素的地址 //与p=&a[0]等价 P+i和a+i表示a[i]的地址;*(p+i)和*(a+i)表示P+i和a+i内容。 6.结构体:是由基本数据类型构成的,并并一个标识符来命名的各种变量的组合。

(仅供参考)STM32F105RBT6最小系统原理及工程的建立

市面上的许多stm32开发板都是使用ULINK2作为调试仿真工具,鉴于ULINK2所需引脚过多在学习时还可以,但应用于实际电路设计生产会造成许多硬件资源的浪费。鉴于此,本人经实验得出利用ST-LINK作为仿真下载工具的实验最小系统电路。希望给大家作为参考。 一、最小系统原理图 二、建立工程的步骤 1、先在一个文件夹内建6个子文件夹: DOC:放说明文件 Libraries:放库文件(CMSIS、FWlib) Listing:放编译器的中间文件 Output:放编译器的输出文件 Project:放项目工程 User:放自己编写的程序、main、stm32f10x_conf、stm32f10x_it.C、stm32f10x_it.h

2、双击桌面UV4图标启动软件,,---NWE uVision Project--选择保存地方----选择芯片型号------在左边处建立5个GOP(STARTUP放启动文件)、(CMSIS放内核文件)、(FWLIB放库里面的src的.C文件)、(USER 放自己写的程序文件及stm32f10x_conf.h、stm32f10x_it.h、stm32f10x_it.c、main.c)

3、将Output重置到一开始时所建的“Output”文件夹中。 4、将Listing重置到一开始时所建的“Listing”文件夹中。 5、在C、C++处的“Define”输入:STM32F10X_HD,USE_STDPERIPH_DRIVER。对于不同的芯片容量,可对HD进行更改(LD、MD、HD、XL、XC)。然后在“Include Paths”处指定相关的搜库位置。 6、Debug处选好下载器

STM32基于固件库V3.5版本的工程模板建立

STM32基于固件库V3.5版本的工程模板建立 1、建立工程文件夹 2、Project->New uVision Project…,目录定位至工程文件夹,在工程文件夹下新建USER文件 夹(存放代码工程文件),命名工程,点击保存。 3、出现选择芯片界面(Select Device for Target ’Target 1’),由于开发板使用的是 STM32F103RCT6,选择对应芯片。出现Manage Run-Time Environment对话框,在此可以添加自己需要的组件,从而方便构建开放环境,不过这里不用,直接点Cancel即可。 4、在工程文件夹下新建3个文件夹CORE,OBJ以及STM32F10x_FWLib。 CORE:存放核心文件和启动文件; OBJ:存放编译过程文件以及hex文件; STM32F10x_FWLib:存放ST官方提供的库函数源码文件。 USER:除用来放工程文件外,还用来存放主函数文件main.c,以及其他包括system_stm32f10x.c等等。 5、将官方的固件库包里的源码文件复制到工程目录文件夹下面。打开官方固件库包,定位 到STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver,将src,inc 文件夹复制到刚才建立的STM32F10x_FWLib文件夹下。

STM32F10x_StdPeriph_Driver:存放的是STM32固件库源码文件 inc:存放的是stm32f10x_xxx.h头文件 src:存放的是stm32f10x_xxx.c格式的固件库文件 每一个.c文件和一个相应的.h文件对应。这里的文件也是固件库的核心文件,每个外设对应一组文件。Libraries文件夹里面的文件在建立工程的时候都会使用到。 STM32F10x_FWLib里面的函数可以根据需要添加和删除,但是一定要注意在头文件stm32f10x_conf.h文件中注释掉删除的源文件对应的头文件,这里面的文件内容用户不需要修改。 src存放的是固件库的.c文件,inc存放的是对应的.h文件。 6、将官方的固件库包里相关的启动文件复制到工程目录CORE之下。打开官方固件库包, 定位到STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport,将core_cm3.c和core_cm3.h复制到CORE下面。然后定位到STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\star tup\arm,由于使用的芯片为大容量芯片,所以使用startup_stm32f10x_hd.s这个启动文件,将其复制到CORE下面。 Coresupport:core_cm3.c和core_cm3.h是CMSIS核心文件,提供进入Cortex-M3内核接口,这是ARM公司提供的,对所有Cortex-M3内核的芯片都一样。用户永远都不需要修改这个文件。 arm:存放启动文件 startup_stm32f10x_ld.s:适用于小容量产品 startup_stm32f10x_md.s:适用于中等容量产品 startup_stm32f10x_hd.s:适用于大容量产品 启动文件主要是进行堆栈之类的初始化、中断向量表以及中断函数定义。启动文件要引导进入main函数。 7、将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 下面的三个文件stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h复制到USER目录之下。然后将STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template 下面的四个文件main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h复制到USER 目录下。 STM32F10x:主要存放一些启动文件以及比较基础的寄存器定义以及中断向量定义的文件。 system_stm32f10x.c和system_stm32f10x.h:设置系统以及时钟总线,这里面有一

keil_MDK建立工程步骤方法

KEIL工程建立步骤点击Next,勾选安装协议:

下一步,选择安装路径(笔者因硬盘空间不足安装在E盘,但若读者硬盘资源充裕,则建议安装在C盘,跑起来快些): 下一步,填写用户信息,个人用户随意填入即可:

点击Next 就进入实质的安装过程啦,Wait for a Whle…… 很快安装完毕,看到2 个可选项: 1、保持当前uVision 的设置。 2、载入以下选择的工程实例,默认即可。

点击Next,来到最后一个安装界面: 1.是否安装ULINK Pro Driver V1.0驱动? 2.是否显示软件发布说明? 读者可以按照自己的需求勾选。 点击Finish,KEIL MDK就完成安装了,可以发现桌面上生成了名为“Keil uVision4”的可执行文件快捷方式。双击“Keil uVision4”图标打开Keil uVision4开发环境,此时Keil uVision4会自动载入一个工程项目(依安装的倒数第二步勾选而定),我们就此可以简单地看看KEIL MDK 的用户界面。

如图所示,KEIL MDK的基本用户界面也是很简洁的,也是由一些菜单栏,工具栏,状态栏等区域构成。当然KEIL MDK的软件界面远远不止这么简单,读者可以在日后漫长的工程师生涯逐一熟悉。 至此,KEIL MDK的安装工作已经完毕了。接下来我们要开始建立我们的第一个工程。在开始之前,请读者先从网上获取ST公司提供的STM32固件库“stm32f10x_fw_archive v2.0 (May 2009)”,然后将其解压。 首先请读者在任意一个地方建立一个空文件夹,并将其命名为“STM32_FW”。然后在STM32_FW 里新建6个文件夹,分别命名为“boot”、“library”、“src”、“obj”、“list”、“library”。 如下图所示: 接下来请执行如下操作:

相关文档
最新文档