如何使用STM32_V3.5版本固件库建立工程模板

发布者:sigma28最新更新时间:2016-09-26 来源: eefocus关键字:STM32  V3.5版本  固件库建  工程模板 手机看文章 扫描二维码
随时随地手机看文章

准备工作如下:

1:下载STM32_V3.5的固件库 去论坛上找,很多

 

2:准备Keil uVision4 软件,并安装到电脑上。

 

3:不要带板凳了,带上你的脑袋就行,因为板凳不会思考。

 

开始:

1:首先解压缩下载的固件库(保留一个备份,你懂的)

   里面有,

   _htmresc :  ST的 logo完全无用,不用理会,

Libraries:  比较重要的文件 包含STM32的系统文件和大量头文件,也就是库文件了。  

Project:   包含大量外设的例程,和各个软件版本的评估版工程模板。

      KEIL对应的就是 MDK-ARM 文件下的工程模板。你也可以利用这个工程模板来修改,得到你自己的工程模块,本文不用此法 。

Utilities: 就是评估版的相关文件:本文也不会用到,无视既可。

这四个文件,(先去掉文件的只读属性吧,相信你会的)

 

2:安照一般的方法,建立工程模板先建立一些文件夹,比如工程模板要建在D盘,下面的

   D:\STM32\PRO1(项目名字,自己随便定) 再该文件夹下面新建以下文件夹

   Libraries:直接复制上述的的Libraries文件夹,把其中的CMSIS剪切出来,放到PRO1目录下,直接成为另一个文件夹。另外把STM32F10x_StdPeriph_Driver下的inc和src文件夹剪切出来,放在Libraries目录下,STM32F10x_StdPeriph_Driver文件夹就可以删除了。会发现里面就只剩下头文件了。   

   CMSIS:就是从上面粘贴来的。在CMSIS\CM3\DeviceSupport\ST\STM32F10x目录下直接将Startup文件剪切出来,放在Libraries目录下,其他的不需要动。里面存放的就是重要的系统文件,先不要理会是什么作用吧,慢慢就明白了。

   Startup 就是从上面粘贴来的。我们要用的比如是:STM32F103VC,只要把startup\arm目录下的startup_stm32f10x_hd.s文件剪切出来,放到Startup 下面就好。Startup只要这个文件,其它全删吧。这个就是启动文件,根据芯片存储容量来选择。

   USER:请在里面放个main.c的文件,里面就一个WHILE(1)循环就好,但请加上这个头文件:#i nclude "stm32f10x.h"。  另外从固件库的Project\STM32F10x_StdPeriph_Template目录下复制 stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h。这四个h文件是Libraries里面没有的,理论上要自己写好的,但是固件库里有就直接复制吧,呵呵。另外你还发现那个目录下有个system_stm32f10x.c文件,有人问,这个怎么不一起复制了,很简单,因为CMSIS这个文件夹里面已经有了,个人认为还是放在这里比较好,因为是系统文件。   

   Project :这个文件夹用来存放项目文件。比如你等下要建立的工程名字TEST.uvproj,就放在这里。 在该文件下存放一些项目的输出信息,OUTPUT,和LISTING信息,可以建立这两个文件夹。等下就可以在OPTIONS FOR TARGET 'PROJECT' 里面进行路径设置。

   文件夹分配到此结束,为什么要这么分配文件夹呢,其实是个人理解的问题,我这样的目的是为了比较清楚,也符合一般程序员的设置方法。等你了解了,随便安排文件下都可以。

下面开始建立工程模板。

 

3:打开KEIL 软件,建立新工程。

比如建TEST.uvproj,保存在刚才的Project 文件夹下面。

选择你使用的STM32芯片,比如我用的是103VC的,就选择那个,确定后,会跳出来个窗口,问你是否复制启动代码,选择否,因为我们已经弄好了,前面的准备工作不是白做的。

 

然后右键TARGET 1,选择Manage Ccmponents,把文件给加进去吧。

来图片了:加好文件后,出现如下的文件架构。(按下图加文件吧,每个文件都在相应的文件夹里,前面的工作不是白做的。)图看不到请看附件

 

图1

接下来要设置编译文件的路径,设置好后如下图:

图2

 

现在编译,还是有错误的。可以先编译下,

因为main.c中有#i nclude "stm32f10x.h"这句,在这个重要的头文件里,并没有定义好一些东西,分别在stm32f10x.h的0070行,取消对 #define STM32F10X_HD  的屏蔽,

0105行   取消对#define USE_STDPERIPH_DRIVER的屏蔽,这两个定义好,才能正常工作,第一个是选择存储容量的型号,每种芯片都不太一样,所以让你选择,第二个是使用标准库文件,因为我们是要用库的,所以必须选择,默认是不用库的,直接进行寄存器的操作。

像初学者是用库比较好,所以肯定选择的。

也可以直接如下图操作。

图3

,作用是一样的。

选择好后,直接编译,恭喜你,成功了。

 

 

4:最后要说明的就是:

图4

 

这个库文件,是必须选择misc.c 和stm32f10x_rcc.c的。

另外就是你选择用什么功能,就把什么功能的c文件加进去,我这里已经加了一个对IO口的应用的一个c文件。

 

5:一些重要文件的说明吧

 

core_cm3.c/core_cm3.h 

该文件是内核访问层的源文件和头文件,查看其中的代码多半是使用汇编语言编写的。

 

stm32f10x.h 

该文件是外设访问层的头文件,该文件是最重要的头文件之一。例如

向量等等。除了这些该头文件还定义了和外设寄存器相关的结构体,如:

typedef struct 

  __IO uint32_t CRL; 

  __IO uint32_t CRH; 

  __IO uint32_t IDR; 

  __IO uint32_t ODR; 

  __IO uint32_t BSRR; 

  __IO uint32_t BRR; 

  __IO uint32_t LCKR; 

} GPIO_TypeDef; 

  包含了那么多寄存器的定义,那么在应用文件中(例如自己编写的 main 源文件)只需要包含

stm32f10x.h即可。

 

 

在stm32f10x.h  8296行

#ifdef USE_STDPERIPH_DRIVER

  #i nclude "stm32f10x_conf.h"

#endif

这里定义了 #i nclude "stm32f10x_conf.h"

 

 

system_stm32f10x.c/h 

该头文件也可以称为外设访问层的头文件和源文件。在该文件中可以定义系统的时钟频率,定义低速时钟总线和高速时钟总线的频率,其中最关键的函数就是 SystemInit()了,这个后面会详细介绍。总之这两个文件是新固件库V3.5的重点,有了它粮也大大简化了使用 stm32的初始化工作。 

 

stm32f10x_conf.h 

这个文件和 V2 版本的库的内容是一样的,需要使用哪些外设就取消哪些外设的注释。

 

stm32f10x_it.c/h 

  这两个文件包含了 stm32中断函数,在源文件和头文件中并没有把所有的中断入口函数都写出来,而只写了 ARM内核的几个异常中断,其他的中断函数需要用户自己编写。stm32f10x_it.c的最后给了这样一个模板。

/******************************************************************************/ 

/*                 STM32F10x Peripherals Interrupt Handlers          */ 

/*  Add here the Interrupt Handler for the used peripheral(s) (PPP), for the   */ 

/*  available peripheral interrupt handler's name please refer to the startup    */ 

/*  file (startup_stm32f10x_xx.s).                                    */ 

/******************************************************************************/ 

/** 

  * @brief  This  handles PPP interrupt request. 

  * @param  None 

  * @retval None 

  */ 

/*void PPP_IRQHandler(void) 

}*/ 

从注释中的英文提示可以看出,中断向量的名称可以从相应的启动代码中找出,例如可以

startup_stm32f10x_md.s 中找到 USART1 中断函数的名称——USART1_IRQHandler。其他的中断函

名可以以此类推,一一获得,在这里我就不一一复述了。 

 

 

 

Libraries文件夹 

  该文件夹有包含两个文件夹,一个是 src文件夹,另一个是 inc文件夹,顾名思义,一个里面放的是元件一个里面放的是头文件。这两个文件夹包含了所有的 STM32 的外设驱动函数,其实和 V2 版本也没有太大的变化。简单来说,外设的驱动相当于 windows的驱动函数 API,这些驱动函数看到函数名基本就可以明白这个函数的作用,例如:GPIO_SetBits 可以置位某个 IO 口,相反 GPIO_ResetBits 则可以复位某个 IO 口。我个人认为熟练使用库可以大大提高编程的效率,同时规范使用库函数也可以提高程序的可读性,让团队中的其他程序员可以快速的明白代码的作用。

 

如何使用STM32_V3.5版本固件库建立工程模板 -  ╄→风、吹不散 - ╄→风、吹不散
 
如何使用STM32_V3.5版本固件库建立工程模板 -  ╄→风、吹不散 - ╄→风、吹不散
 
如何使用STM32_V3.5版本固件库建立工程模板 -  ╄→风、吹不散 - ╄→风、吹不散
 
如何使用STM32_V3.5版本固件库建立工程模板 -  ╄→风、吹不散 - ╄→风、吹不散
关键字:STM32  V3.5版本  固件库建  工程模板 引用地址:如何使用STM32_V3.5版本固件库建立工程模板

上一篇:STM32 USB-HID通信移植步骤
下一篇:MDK中使用STM32官方固件库

推荐阅读最新更新时间:2024-03-16 15:12

STM32出现HardFault故障的解决方法
问题查找: 1 在stm32f10x_it.c中,添加软件断点,一旦调试时出现Hard Fault则会在停在__breakpoint(0)处。 2 打开Call Stack窗口,在HardFault_Handler中的右键选择“Show Caller Code”
[单片机]
<font color='red'>STM32</font>出现HardFault故障的解决方法
如何用stm32使用LWIP网络协议栈实现DHCP客户端
LWIP是一款开源的嵌入式网络协议栈,支持的功能很多,而且能在多任务环境下和单任务裸机环境下跑,今天说说他的移植过程,芯片为STM32,网卡为ENC28J60,无操作系统 首先下载LWIP的源代码,我下载的是1.4.1的源码,下载后解压,文件结构如图 将这四个目录中的文件全部拷贝到工程中,A PI 是一些socket通讯的接口,需要在多任务的环境下实现,core里面存放的内核源码,我们主要使用IPV4,include目录下是需要包含的目录,lwip只要求我们包含include目录,里面的内层目录会自动找到,最后建立的工程目录如下 好了,此时源码已经做好,还有需要做的,在include目录下新建一个文件夹,必须
[单片机]
如何用<font color='red'>stm32</font>使用LWIP网络协议栈实现DHCP客户端
基于STM32的三种库函数代码效率对比解析
前言 ST已经推出了三种库函数,以方便客户快速开发STM32系列MCU。从最早的标准外设驱动库,到后来的Cube HAL,再到Cube LL以及直接操作寄存器。这几种库的代码效率到底如何呢?本文将针对这个问题进行粗略分析,并提供对比数据供大家参考。 问题分析 我们以GPIO翻转、TIM PWM 输出、ADCDMA 数据采集和DMA M2M这四个常用功能,通过不同的库函数来实现相同功能,最终来对比各个库函数的性能。四个工程代码的内容简述如下: GPIO翻转:切换GPIO的输出电平,其中包含了系统时钟初始化和GPIO翻转的代码。TIM PWM输出:通过TIM1 的通道1输出频率是36KHz的PWM,循环修改其占空比从25%到50%
[单片机]
基于<font color='red'>STM32</font>的三种库函数代码效率对比解析
STM32学习之:外部中断
STM32 GPIO外部中断总结 一、STM32中断分组:   STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是 STM32 的强大之处。STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB0,PC0,PD0,PE0,PF0,PG0为第一组,那么依此类推,我们能得出一共有16 组,STM32 规定,每一组中同时只能有一个中断触发源工作,那么,最多工作的也就是16个外部中断。STM32F103 的中断控制器支持 19 个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。STM32F103 的19 个外部中断为: 线 0~15:对应外部 IO 口的输入中
[单片机]
STM32】HAL库 STM32CubeMX教程五----看门狗
前言: 今天我们来学习看门狗的配置与函数,看门狗可以有效解决程序的跑飞,在使用过程中比较常见,是防止芯片故障的有效外设,我们一起来学习下HAL库 STM32CubeMX的独立看门狗,窗口看门狗的使用。本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1、芯片: STM32F407ZET6 2、STM32CubeMx软件 3、IDE: MDK-Keil软件 4、STM32F1xx/STM32F4xxHAL库 知识概括: 通过本篇博客您将学到: STM32CubeMX创建看门狗例程 独立看门狗,靠窗看门狗 工作原理 看门狗 在由单片机
[单片机]
【<font color='red'>STM32</font>】HAL库 STM32CubeMX教程五----看门狗
STM32单片机通信协议操作步骤及注意事项
STM32单片机通信协议是一种用于在不同设备之间进行数据传输的协议,它可以帮助设备之间进行高效的通信。STM32单片机通信协议可以用于实现多种不同的应用,如智能家居、智能安防、智能交通等。 STM32单片机通信协议的使用方法主要包括以下几个步骤: 1. 首先,需要确定使用的协议类型,如UART、I2C、SPI等,并确定使用的协议的具体参数,如波特率、数据位、停止位等。 2. 然后,需要在STM32单片机上配置相应的通信接口,并将其与外部设备连接起来。 3. 接着,需要编写相应的程序,实现STM32单片机与外部设备之间的数据传输。 4. 最后,需要将程序烧录到STM32单片机上,并运行程序,实现STM32单片机与外部设备之间的数
[单片机]
STM32 学习十 Flash下载与调试
一、启动模式 三、FLASH下载与调试 选择调试模式: 1.RAM调试:0x20000000 2.FLASH调试:0x8000000 CM3的Flash烧写次数:1000次 安装Setup_JLinkARM_V408h 连接j-Link-ARM到电脑。我使用虚拟机做开发,这时候需要把USB连接到虚拟机上。 把开发板连接到jLink并上电。 下载操作: 1.新增下载模式 2.设置Options 这里注意与芯片参数要一致。 下载: 下载结束,操作成功。
[单片机]
<font color='red'>STM32</font> 学习十 Flash下载与调试
STM32-GPIO学习笔记
STM32F103RB有4个IO口(A~D),每个IO口都有7个寄存器控制,他们分别是: 端口配置寄存器(32位,共两个,CRL和CRH) 数据寄存器(32位,共两个,IDR和ODR) 置位/复位寄存器(32位,一个,BSRR) 复位寄存器(16位,一个,BRR) 锁存寄存器(32位,一个,LCKR) 常用的IO寄存器只有四个,即CRL、CRH、IDR、ODR,他们分别是设置IO口工作状态和输入/输出数据的,其中CRL和CRH共2个32位寄存器控制16个IO口的状态(CRL和CRH完全一样,只是CRL控制的是低8位输出口GPIOx(0:7),CRH控制的是高八位GPIOx(8:15)),即每四位控制一个IO口
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved