STM32固件库V3.4移值到Keil_MDK_v4.12_图文详解
STM32 LL 库使用指南说明书
![STM32 LL 库使用指南说明书](https://img.taocdn.com/s3/m/142a8c1476232f60ddccda38376baf1ffc4fe3d9.png)
STM32 LL库使用指南---By Fengzi熟悉STM32的都知道ST官方提供了非常方便好用的库函数供用户使用,多数人都使用过STM32标准外设库,STM32Cube库(即HAL库),这个LL库是什么鬼,却从来没听说过。
好吧,我承认这个名字是我自己XJB取的。
目录一、初识LL 库 (1)二、怎么使用LL库 (3)三、新建STM32LL库工程模板 (5)四、第一个程序——点亮LED (8)五、添加其他程序功能 (10)………………………………………………………………………………………………………………………………………………….一、初识LL 库最近论坛发的STM32L476RG Nucleo开发板到手了,准备学习玩耍,当然第一步就是下载资料,于是我下载STM32L4Cube 1.1.0版本,打开逐个查看,好像和以前一样的,没什么特别嘛,于是准备开始开发。
等等,好像还真发现了有点不一样:熟悉HAL库的都知道,该库的文件几乎都是以stm32xxx_hal_xxx.h/.c命名的,为了和以前的标准库有个区分,上图中那些是什么鬼前辈说,遇到问题赶紧查手册,于是我果断打开STM32L4Cube库的说明手册(UM1884):原来这个东西叫做Low Layer APIs,作为英文渣渣表示实在不习惯洋里洋气的高大上名字,于是擅自把他叫做【STM32LL库】了(不服的你咬我啊)。
从这里看好像是说这个东东比HAL库更接近硬件,到底什么鬼,还不清楚。
但是以前好像没见过这个东西啊,就算是STM32L4Cube的1.0.0版本中都没有。
看看Cube发行历史:原来LL库是在1.1.0版本才加上的,大概意思就是:1.LL APIs是寄存器级的编程,嗯,也就是说我们常说的直接操作寄存器吧。
2.LL APIs适用于xxx等一大堆外设3.LL APIs函数全部定义为static inline函数,放在对应的头文件中,用户使用需要包含相关头文件4.参考这两个文档看看LL库文件在Cube库中的位置,有20多个文件,全部以stm32l4xx_ll_xxx.h命名:STM32Cube_FW_L4_V1.1.0\Drivers\STM32L4xx_HAL_Driver\IncSTM32L4是面向低功耗市场的,同时不失高性能,功耗和性能往往是两个矛盾的东西,ST在硬件设计上想了各种办法来实现兼顾低功耗高性能(例如各种低功耗模式,LP外设等),而在软件层面,程序也讲求效率,LL库全是直接操作寄存器,直接操作寄存器往往效率较高,而且函数定义为内联函数,调用函数时不是堆栈调用,而是直接把函数的代码嵌入到调用的地方,利于提高代码相率,我想这也是ST在STM32L4系列中推出这个直接操作寄存器的LL库的原因之一吧。
STM32固件库使用手册
![STM32固件库使用手册](https://img.taocdn.com/s3/m/815249f60408763231126edb6f1aff00bfd5704c.png)
STM32固件库使用手册随着嵌入式系统在各个领域的越来越广泛的应用,各种芯片和处理器的类型也逐渐增多。
在这些芯片中,ST公司的STM32系列尤其受到了大量开发者们的追捧,其功能强大、性能优越、可编程性高等优点使得其成为了嵌入式系统设计的首选。
在STM32系列芯片中,固件库是其重要的组成部分,提供了独立的硬件抽象层和应用程序接口。
这些功能丰富的API库可用于快速搭建程序架构,以及简便地实现一些常见的操作。
节省开发人员大量的开发时间。
对于初学者,欲了解STM32芯片开发的话,学习STM32固件库的使用是第一步,因此在这里我将分享一些该库的基础内容。
一、固件库的启用在使用STM32固件库之前,我们需要先了解如何启用它。
首先,在安装Keil或IAR等IDE环境后,我们需要将官方提供的固件库下载到本地,并将其解压。
解压后,将库文件夹中的 inc 和src 文件夹添加至Keil或IAR的相关项目目录中,从而ermöglichen 制定了。
接下来,在IDE环境中选择对应的芯片,我们需要设置相关的固件库路径。
具体来说,我们打开Keil或IAR的属性管理器,设置 C/C++ -> Directories 中的 Include Paths 为stm32f10x_stdPeriph_driver/inc,设置配置管理器中的包含路径为上述inc文件夹的全路径。
这样就可以启用了 STM32 固件库,开始进行我们的嵌入式系统开发。
二、基础应用程序在信息时代的今天,眼前各种各样的计算机系统和程序都涌现在眼前。
但是无论是最基础的窗口显示,还是复杂的人脸识别技术,都需要一些基本的芯片和系统支持,而 STM32 芯片就是这一系统之一。
其基础应用程序包括了:GPIO 端口配置:GPIO(PIN)模式配置、输出配置、输入配置。
其中GPIO(PIN)模式配置是对GPIO端口输出模式进行设置,包括推挽、开漏等多种模式,GPIO口的作用是用于输入/输出操作。
Keil uVision5中建Stm32工程(教程)
![Keil uVision5中建Stm32工程(教程)](https://img.taocdn.com/s3/m/ff50282f580216fc700afde2.png)
Keil uVision5中建Stm32工程教程本教程中,介绍在Keil uVision5中建STM32工程的两种方法:一种是利用固件库建立工程,另一种是通过建工程时软件给的引导直接完成。
软件的安装和破解网上教程很多,这里就不赘述了,直接从建立工程开始。
首先介绍第一种:利用固件库建立STM32工程1.在你电脑中想要建立工程的地方先新建一个文件夹。
这里我在E盘下新建了一个文件夹,命名为STM32Project。
2.在新建的STM32Project文件夹下再新建一个文件夹,命名为STM32固件库,然后把事先下载的固件库放在文件夹中,方便查找进行复制。
3.打开Keil uVision5软件,在软件的菜单栏中找到Project——>New uVisionProject…,单击,找到上述新建的文件夹,对新建的工程进行命名,这里命名为test,点击保存。
4.此时软件弹出一个选择芯片的窗口:“Select Device for Target ‘Target 1’…”,在左侧的芯片库中找到你要使用的STM32系列的芯片,这里选择的是STMicroelectronics——>STM32F1 Series——>STM32F103——>STM32F103RC,单击OK。
5.此时弹出一个窗口:“Manage Run-Time Environment”,这个窗口在第二个建工程的方法中会使用到,这里先直接点击OK,跳过。
6.现在开始添加相关文件。
在STM32Project文件夹中新建以下四个文件夹:user:放置用户自己编写的相关文件CMSIS:放置与内核相关的文件startup:放置启动单片机的汇编文件driver:放置外设操作的驱动文件再向这四个文件夹中添加固件库中的相关文件:user:STM32Project\STM32固件库\STM32F10x_StdPeriph_Lib_V3.5.0 \Project\STM32F10x_StdPeriph_Template中的stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h一共3个文件复制粘贴到user文件夹中,同时新建一个文本文档,重命名为main.c。
介绍如何使用RVMDK——keil
![介绍如何使用RVMDK——keil](https://img.taocdn.com/s3/m/2a2b63858762caaedd33d4a2.png)
介绍RVMDK开发板拿到手之后,不要浪费时间,第一步就要建立一个学习平台。
一个好学习平台很重要,在不同程度上提高了我们的学习效率。
此外,养成良好的资料整理能力,让工程构造,文档资料清晰明了。
编译软件:RealView MDK-ARM 4.12,简称MDK或KEIL相信大多数读者是从51单片机那接着学过来的,对于KEIL C51的熟悉程序就不用说了。
刚接触新的事物,找点熟悉的来增强信心很重要。
用IAR的人也不少,两者的区别不大。
在这里,我们建议你先熟悉使用MDK.调试软件:JLINK V8拥有一个调试软件来学习,效率会快很多。
除了让我们更容易地找出代码的错误之处,还能让我们越来越熟悉STM32的内部寄存器。
有ST LINK的同学用ST LINK也行。
这里我们选择SEGGER公司JLINK,理由很简单:便宜。
接着我们用MDK来构建一个工程,貌似一些新手会觉得麻烦。
在后面的程序中,我们将一直沿用这种结构的工程,但不必每次都经历繁琐的建立过程。
在你想要的位置建立以下文件夹:Code(文件夹)Libraries(文件夹)-CMSIS(文件夹)-STM32F10x_StdPeriph_Driver(文件夹)Obj(文件夹)Utilities(文件夹)-Common-STM3Fire_Bull打开MDK, New Vision Project, 选择工程模板文件夹中,输入Project,CPU的选型STMicroelectronics—>STM32F103VC(按实际芯片类型来选,你不是这个就选别的)接着会弹出如下对话框:启动代码是一段和硬件相关的汇编代码.是必不可少的!这代码具体如何工作的,这个我们不必太关心,感兴趣的朋友可以去研究下。
在弹出的选择是否添加启动代码的窗口,我们选否,因为我们在后面会选择使用ST官方提供的启动代码。
启动代码是根据芯片类型来决定的,工程里包含了两个启动代码的话,编译会出事。
Keil MDK转换详解“-STM32 IAR工程--Keil MDK转换详解
![Keil MDK转换详解“-STM32 IAR工程--Keil MDK转换详解](https://img.taocdn.com/s3/m/e06376926f1aff00bed51ebf.png)
Keil MDK 转换详解“>STM32 IAR 工程->Keil MDK 转换详解我在STM32 的学习中发现,大部分的STM32 示例程序都是基于IAR 开发环境的,但我认为使用Keil MDK 开发环境更加方便,可以利用RVMDK 强大的外设仿真功能加速STM32 的开发。
我在以前的Blog 文章里介绍过如何在RVMDK 中建立STM32 工程,以及如何使用RVMDK 的软件仿真功能,下面我将详细说明怎样将已有的IAR 工程移植到RVMDK。
不管是IAR 还是RVMDK,编程时使用的都是STM32 的固件函数库,唯一不同的是启动文件。
RVMDK 在建立STM32 工程时会自动创建启动文件STM32F10x.s,而IAR 使用的启动文件是cortexm3_macro.s。
此外,两者对中断向量表的管理也不一样。
在移植STM32 工程时首先要检查IAR 工程中是否使用了中断。
方法是要看工程中stm32f10x_it.c 文件内的各中断函数是否为空函数,中断函数为空说明没有使用中断;否则若中断函数有修改并且在main 函数中对NVIC 进行了设置,则说明使用了中断。
下面分没有使用中断和使用了中断这两种情况分别介绍移植方法。
无中断:没使用中断时的移植较为简单,此时还可以使用RVMDK 自动创建的启动文件STM32F10x.s,只要把IAR 工程project 文件夹中的stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h 和main.c 等文件复制到建立好的RVMDK 工程文件夹下,然后为RVMDK 工程添加使用到的库函数文件即可。
有中断:如果IAR 工程中使用了NVIC 时,在RVMDK 下就不能再使用自动生成的STM32F10x.s 启动文件了,但可以用IAR 工程中的启动文件cortexm3_macro.s 和stm32f10x_vector.s 来替换。
使用keil进行stm32单片机开发的流程 -回复
![使用keil进行stm32单片机开发的流程 -回复](https://img.taocdn.com/s3/m/34f52dfbc67da26925c52cc58bd63186bceb9226.png)
使用keil进行stm32单片机开发的流程-回复keil作为一款嵌入式系统开发工具,广泛应用于STM32单片机的开发过程中。
它具有强大的编译、调试和仿真功能,可以帮助开发者更高效地进行单片机的开发工作。
本文将以“使用keil进行STM32单片机开发的流程”为主题,为读者详细介绍使用keil进行STM32开发的步骤和注意事项,帮助读者轻松入门STM32开发。
一、准备工作1. 软件安装:首先需要安装keil嵌入式开发环境。
你可以从官方网站上下载到keil的安装包,然后按照安装向导进行安装即可。
2. 硬件准备:除了软件准备外,还需要购买一块支持STM32开发的开发板,例如ST公司的ST-LINK开发板。
将开发板连接至电脑。
二、创建项目1. 打开keil:双击桌面上的keil图标,进入keil开发环境。
2. 创建新项目:点击“Project”->“New Project”,选择合适的存储路径和项目名称,并选择你所使用的STM32单片机型号。
单击“OK”完成新项目的创建。
三、配置开发环境1. 配置芯片参数:在左侧的“Project”窗口中,右键点击“Target 1”,选择“Options for Target”。
2. 配置目标选项:在“Debug”选项卡中,选择正确的调试接口,并将“Use Simulator”选项取消勾选。
在“Settings”选项卡中填写正确的时钟频率和连接方式,并启用Flash编程。
3. 配置编译器:在左侧的“Project”窗口中,右键点击“Target 1”,选择“Options for Target”。
在“C/C++”选项卡中,配置编译器的优化级别和其他相关参数。
四、编写代码1. 添加源文件:在“Project”窗口中右键点击“Source Group 1”,选择“Add New Item”,然后添加你的源代码文件,编写代码内容。
注意,为了方便管理,可以按功能将代码分割成多个源代码文件。
【自写】如何使用STM32_V3.5版本固件库在Keil4下建立工程模板
![【自写】如何使用STM32_V3.5版本固件库在Keil4下建立工程模板](https://img.taocdn.com/s3/m/92e36fe0e009581b6bd9ebab.png)
如何使用STM32_V3.5版本固件库在Keil4下建立工程模板By 呼延靖国准备工作如下:1.下载STM32F10x_StdPeriph_Lib_V3.5.0固件库。
2.下载并安装好Keil uVision V4.10(MDK4)开始:1.首先解压STM32F10x_StdPeriph_Lib_V3.5.0固件库。
PS:保留一个备份,你懂的。
解压得到如图1所示的几个文件夹。
其中_htmresc文件夹:里面是ST的Logo图片,没有多大用,可以删除。
Libraries文件夹:是比较重要的文件包含STM32的系统文件和大量头文件,即库文件。
Project文件夹:里面为STM32F10x的例程和工程模板。
Keil对应的就是 MDK-ARM 文件下的工程模板。
也可以利用这个工程模板为原型建立自己的工程模板本文不用此法。
Utilities文件夹:里面有一些实用程序,也没多大用,可删除。
Release_Notes.html:版本注视,可删除。
stm32f10x_stdperiph_lib_um.chm:帮助文件,你懂的。
2.为了项目程序中的各部分条理清晰,我们建议工程文件夹时对其子目录子下归类建立子文件夹,例建立一个工程文件夹My Project,在其下在创建五个子文件夹如图2所示:其中:CMSIS文件夹:此文件夹从STM32F10x_StdPeriph_Lib_V3.5.0固件库中的CMSIS文件夹直接复制过来。
Libraries文件夹:此文件夹从STM32F10x_StdPeriph_Lib_V3.5.0固件库中的Libraries文件夹复制过来。
只保留当中的inc和src文件夹。
即只包含头文件。
Startup文件夹:此文件夹从CMSIS\CM3\DeviceSupport\ST\STM32F10x\Startup目录下直接将Startup文件剪切出来。
其中放置的是启动代码,具体的代码根据所用芯片的容量选择,我们用的STM32F103C8为中等容量芯片,故选择其中的startup_stm32f10x_md.s启动代码,其他不用的可以删除User文件夹:User文件夹为用户的应用程序,其中包括main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h四个文件,这四个文件可从V3.5.0固件库Project\STM32F10x_StdPeriph_Template目录下复制过来,当然main.c文件中的内容可删除。
关于STM32F103 V3.5.0固件库stm32f10x_conf.h文件
![关于STM32F103 V3.5.0固件库stm32f10x_conf.h文件](https://img.taocdn.com/s3/m/91caca62a32d7375a517803a.png)
关于STM32F103 V3.5.0 固件库stm32f10x_conf.h 文件最近项目使用STM32,又重新熟悉了一下STM32 的工程建立与程序设计,总结了一下,发现了之前没有发现的技巧与设置。
关于STM32F103 的V3.5.0固件库,使用起来,挺方便,移植性也不错,当然,如果使用Keil uVesion4 开始的话,首先需要设置好工作环境,才可以正常的编译。
为什么会有:main.c里面怎么来的stm32f10x_conf.h 文件?我搜索了一下代码,发现来自:主头文件#include “stm32f10x.h”若是使用ST 公司为STM32 开发的固件库,就会包括头文件:stm32f10x_conf.h。
打开stm32f10x_conf.h 文件一看,原来,只有:#include “stm32f10x.h”还不够,如果要使用外设什么的,还要在这里打开配置开关,不用的外设可以不加入头文件,看来设计的挺巧妙的。
这样使用外设库时,只要配置好就行了,在main.c 里只使用一个:#include “stm32f10x.h”就可以了。
看来如果不配置好stm32f10x_conf.h,当使用外设如ADC TIM USART 时,根据无法编译通过。
因为没有在项目里加入头文件调用,这里若全不选,根本不能调用固件外设库,即使你把固件库文件加入了工程里。
当然,你可以在main.c 里面全部加入需要的头文件来解决,不过我觉得配置stm32f10x_conf.h 简单方便,有组织。
在这里,加入了需要使用的固件库外设文件,但还不够,还需要设置如下:还加入头文件路径:根据使用的外设固件库配置一下:stm32f10x_conf.h,如果使用systick 系统滴答定时器等,只要在stm32f10x_conf.h 里,取消#include “misc.h”前面的注释,即包含这个misc.h 文件即可,否则,滴答定时器不工作。
MDK中使用STM32官方固件库
![MDK中使用STM32官方固件库](https://img.taocdn.com/s3/m/3e92664079563c1ec5da7171.png)
MDK中使用STM32官方固件库
首先STM32 官方固件库在Keil 中的位置是:.h 文件在
\Keil\ARM\INC\ST\STM32F10x
.c 文件在\Keil\ARM\RV31\LIB\ST\STM32F10x
要使用官方固件库,首先要在MDK 的工程建立以后将需要用到的相应的.c 文件复制到工程下,例如在工程目录下新建一个FWLib 的文件夹,然后复制到这里。
STM32 官方固件库的结构如下:
在stm32f10x_conf.h 中类似如下的定义:#define _SPI2#define _SPI3
在stm32f10x_map.h 中
#ifdef _SPI2#define SPI2((SPI_TypeDef *) SPI2_BASE)#endif
#ifdef _SPI3#define SPI3((SPI_TypeDef *) SPI3_BASE)#endif
就是说只有在stm32f10x_conf.h 中定义了外设的标签(如_SPI2),才能访问SPI2 的寄存器。
因此用户希望访问某外设,必须在stm32f10x_conf.h 中定义标签。
tips:感谢大家的阅读,本文由我司收集整编。
仅供参阅!。
解决keil51和stm32兼容问题
![解决keil51和stm32兼容问题](https://img.taocdn.com/s3/m/58261a296d175f0e7cd184254b35eefdc8d315b5.png)
解决keil51和stm32兼容问题
预览说明:预览图片所展示的格式为文档的源格式展示,下载源文件没有水印,内容可编辑和复制
可以兼容51,不过要事先做一下处理.
1 首先,准备好两个软件的安装文件,建议你用以下两个版本
Keil Realview MDK 4.12版本或更高版本,Keil C51 V9.00 版本或更高版本
2 先安装Keil C51,安装目录改为:"D:\\Keil2"(我的是安装在D盘的)
3 再安装MDK,目录:"D:\\Keil"
4 把Keil2文件夹下的C51文件夹全部复制到Keil文件夹下
5 把Keil2文件夹下的UV4下的所有文件复制,粘贴到Keil文件夹下的UV4文件夹里
注意,如果提示有重复的文件,是否覆盖时,一律选择否,即不覆盖,千万不要选择是.
6 把Keil2下的T ools.ini文件内容复制,粘贴到Keil下的Tools.ini 文件的尾部,并将里面所有
的"Keil2"替换成"Keil",保存
7 至此就OK啦,两者就兼容了,既可以编译ARM系列,又可以编写51系列了.。
用STM32标准外设库StdPeriph_Lib V3.5在Keil上创建一个STM32工程
![用STM32标准外设库StdPeriph_Lib V3.5在Keil上创建一个STM32工程](https://img.taocdn.com/s3/m/85c1d3e45ef7ba0d4a733b58.png)
用固件库STM32F10x_StdPeriph_Lib_V3.50在Keil上创建STM32工程STM32标准外设库结构步骤:一、建立一个空的STM32工程,选好芯片类型(STM32F103ZE)。
选好芯片类型后点击“OK”,如果选择自己加载启动文件,则在弹出的对话框中点击“否(N)”。
二、在Project栏中添加子类,并加载STM32固件库中的相关文件到相应的子类中。
1.向User子类中加载文件○1加载自己建立的Application.c(如main.c) ;○2加载stm32f10x_it.c文件路径STM32F10x_StdPeriph_Lib_V3.5.0\Project\Example2\User注:User文件夹中有main.c(自己建立的)及stm32f10x_conf.h、stm32f10x_it.h、stm32f10x_it.c、system_stm32f10x.c(来源于STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template) 2.向Startup子类中加载启动文件startup_stm32f10x_hd.s(STM32F103ZE属于High density devices系列)文件路径STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 3.向StdPeriph_Driver子类中加载misc.c及需要使用的外设的驱动文件stm32f10x_ppp.c文件路径STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src4.向CMSIS子类中加载core_cm3.c及system_stm32f10x.c文件路径STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport及STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x(或User文件夹)成功加载完所有相关文件后Project栏显示结果如下:三、配置路径点击进入界面后配置“Include Paths”,具体情况要以Project栏中的文件为依据。
STM32 在KEIL MDK环境下使用V3.4库
![STM32 在KEIL MDK环境下使用V3.4库](https://img.taocdn.com/s3/m/a6d7673b83c4bb4cf7ecd187.png)
在Keil MDK环境下使用STM32 V3.4库“小”教程简介写这篇“小”教程主要是和大家分享使用STM32的基本方法。
在一年以前,我开始接触并开始使用STM32。
STM32价格便宜,外设丰富,开发和仿真环境使用方便,一下子便爱上了它。
我当时使用了IAR 编译环境,固件库也是以前的V2版本。
由于ST公司更新了STM32的固件库,所以想试着使用新固件库。
刚开始使用新库时也遇到了一些问题,但是慢慢熟悉不但觉得不难不烦,反而觉得V3比V2更好用。
在这里我和大家分享一下使用V3.4库的方法,希望大家喜欢,如有错误请指出,在下不慎感激。
这篇“小”教程分以下四步来说,第一步,获得库文件,并进行适当的整理;第二步,建立工程,并建立条理清晰的GROUP;第三步,修改工程的Option属性;第四步:使用JLINK仿真调试。
下面就分这四大步来逐个说明。
第一步 获得库文件,并进行适当的整理第一步非常的简单,访问ST的官网上就可以获得最新的固件库,在我写“小”教程的时候最新的固件库是V3.4。
除了获得固件库之外还可以获得和固件库相关的说明文档。
在以前的官网上可以下载到一篇名为《如何从 STM32F10xxx固件库 V2.0.3 升级为 STM32F10xxx标准外设库 V3.0.0》的应用手册,但是在现在的ST官网上却找不到这篇十分有用的应用文档,不过却可以在百度文库中找到,这篇文档详细说明了新固件库的文件结构,在Keil工程建立之前,值得一看。
图1 CMSIS文件夹包含内容图1是新固件库改动比较大的部分,ST称为CMSIS。
在这个文件夹下面出现了一些新的源文件、头文件和启动代码,新的源文件如core_cm.c system_stm32f10x.c,也有新的启动代码如start_stm32f10x_h/m/ld.s。
在第二部分会详细介绍这些文件到底有什么作用,以及和V2版本的区别。
在这里我也补充一句,V3.4还是和V3.0有点区别,V3.4又比V3.0多出了几个启动代码。
Keil 下配置stm32库开发环境
![Keil 下配置stm32库开发环境](https://img.taocdn.com/s3/m/5e2f10abfd0a79563c1e72f8.png)
Keil MDK下配置stm32库开发环境(包括J-Link调试环境设置)准备:1.stm32官方固件库2.Keil MDK一、建立stm32工程当出现提示是否要添加启动文件时,选择否(因为在官方固件库中包含有启动文件)工程建立完成!二、添加官方固件库右键工程目录,选择Manage Components..第一栏表示工程名称,第二栏表示工程包含的文件夹,第三栏表示各个文件夹中包含的文件通过Add Files将固件库中的文件添加进工程中,添加过后如下这么整理是为了让工程开起来层次清晰,对于工程编译没有影响,也就是说即使工程里文件不是按照目录这么整理的,也可以正常编译,只是习惯上如此整理。
三、工程设置右键工程,选择Options for Target…需要设置的有C/C++标签页中的Include Paths,如下:点击最右边的三个点按钮,这里设置的意思是把整个工程中所有.h文件所在的目录添加进来,只有这样,编译器在编译程序时才会从这些路径中寻找头文件。
点击这个方框按钮,添加目录,本例中将./sys ./inc ./src ./usr都添加进来四、J-Link调试器在keil中的设置接着第三步,在Debug标签中选择J-Link调试器选择完成后,点击右侧Setting按钮,如下:提示:必须正确连接J-Link后才会显示这样选择Flash Downlade标签页,点击Add按钮,将对应CPU型号的flash点击ok在Utilities标签页中,选择J-Link后点击ok即完成所有工程设置在main.c中写入main函数后编译未提示错误可以直接使用下图中红色标记按钮直接下载程序,不用再打开J-Flash下载程序了。
Keil移植stm32的usb及usb+massStorage步骤
![Keil移植stm32的usb及usb+massStorage步骤](https://img.taocdn.com/s3/m/b053f07331b765ce05081449.png)
Keil移植stm32的usb及usb massStorage步骤1.将STM32的usb的库文件拷贝到Src\Libraries下并在工程中添加STM32_USB-FS-Device_Driver全部源文件;在工程属性c++选项include Path 添加STM32_USB-FS-Device_Driver\inc路径2.将本目录的Mass_Storage文件夹拷贝到Src\Usr文件下并在工程中添加Mass_Storage\src全部源文件;在工程属性c++选项include Path 添加Mass_Storage\inc路径3.将下面三个头文件和两个函数加到stm32f10x_it.c中#include "usb_lib.h"#include "usb_istr.h"#include "usb_pwr.h"void USB_HP_CAN1_TX_IRQHandler(void){CTR_HP();}void USB_LP_CAN1_RX0_IRQHandler(void){USB_Istr();}6.对Mass_Storage\src下的usb_hw_config.c文件下其中2个函数void USB_Disconnect_Config(void) [注意:此处的IO口设置为推挽输出]void USB_Cable_Config (FunctionalState NewState)重新按照自己硬件改写Mass_Storage\inc下的usb_hw_config.h文件三个定义#define USB_DISCONNECT GPIOA#define USB_DISCONNECT_PIN GPIO_Pin_8#define RCC_APB2Periph_GPIO_DISCONNECT RCC_APB2Periph_GPIOA关于usb的使能IO 按照自己硬件改写7.在\Src\Usr\Mass_Storage\mass_mal.c文件中A:添加存储器驱动文件相关函数的头文件B:填写四个函数,均为存储器的相关驱动函数在unsigned short int MAL_Init(unsigned char lun)中添加存储器初始化函数在unsigned short int MAL_Write(unsigned char lun, unsigned int Memory_Offset, unsigned int *Writebuff, unsigned short int Transfer_Length) 中添加存储器写缓存函数在unsigned short int MAL_Read(unsigned char lun, unsigned int Memory_Offset, unsigned int *Readbuff, unsigned short int Transfer_Length) 中添加存储器读缓存函数在unsigned short int MAL_GetStatus (unsigned char lun)中添加存储器容量的函数8.使用方法:包含头文件#include "usb_lib.h"#include "usb_hw_config.h"#include "usb_pwr.h"调用函数:MassStorageInit(); //IO相关初始化Set_USBClock(); //USB时钟初始化USB_Interrupts_Config(); //USB通信中断配置USB_Init(); //USB初始化9.吴青松2012-3-15。
STM32固件库使用手册【中文】
![STM32固件库使用手册【中文】](https://img.taocdn.com/s3/m/55510190daef5ef7ba0d3ca0.png)
所有的驱动源代码都符合“Strict ANSI-C”标准(项目于范例文件符合扩充 ANSI-C 标准)。我们已经把驱动 源代码文档化,他们同时兼容 MISRA-C 2004 标准(根据需要,我们可以提供兼容矩阵)。由于整个固态 函数库按照“Strict ANSI-C”标准编写,它不受不同开发环境的影响。仅对话启动文件取决于开发环境。
1.3.1 变量 ................................................................................................................................................ 28 1.3.2 布尔型 ............................................................................................................................................ 28 1.3.3 标志位状态类型 ........................................................................................................................... 29 1.3.4 功能状态类型 ...............................................
STM32固件库介绍
![STM32固件库介绍](https://img.taocdn.com/s3/m/e9732926ef06eff9aef8941ea76e58fafab04597.png)
STM32固件库介绍前⾔本⽂以STM32F1固件库包为例,其他的⽂件夹⽬录结构⼀样的。
从官⽹下载的压缩包原名称:STM32F10x_StdPeriph_Lib_V3.5.0固件库的获取,参考⽂章:解压后出现四个⽂件夹,⼀个帮助⽂档,⼀个⽹页链接。
主要内容_htmresc⽂件夹ST公司的 LOGO 图标等,这个⽂件夹在建⽴库函数模板时⽤不上。
Libraries⽂件夹存放驱动库的源代码与启动⽂件。
这个⽂件夹很重要,我们将会⽤到⾥⾯的部分⽂件。
该⽂件夹下还有两个⼦⽂件夹:CMSIS 和STM32F10x_StdPeriph_Driver ,这两个⼦⽂件夹包含固件库核⼼的所有⼦⽂件夹和⽂件,主要包含⼤量的头⽂件、源⽂件和系统⽂件,是开发必须使⽤到的。
其中的 inc ⽂件夹和 src ⽂件夹⾥的⽂件是相互对应的。
其中,在 CM3 ⽂件夹中的 CoreSupport ⽂件夹存放的是内核访问层的源⽂件和头⽂件,它们提供进⼊ M3 内核的接⼝。
这是由 Arm 公司提供的 CMSIS 核⼼⽂件,所有 M3 内核的芯⽚都是⼀样的,永远都不需要修改。
DeviceSupport 存放⼀些启动⽂件、⽐较基础的寄存器定义以及中断向量定义的⽂件。
Project⽂件夹存放了ST官⽅⽤驱动库写的例程和⼀个⼯程模板。
STM32F10x_StdPeriph_Examples存放ST 官⽅提供的固件实例源码,⾥⾯详细介绍了 STM32F10x 外设的使⽤源代码,在以后的开发过程中,可以修改这个官⽅提供的参考实例,以快速驱动⾃⼰的外设。
我们也可以学习⼀下⾥⾯的源码。
STM32F10x_StdPeriph_Template ⼦⽬录存放的是⼯程模板。
Utilities⽂件夹存放ST公司的评估板的相关例程代码。
这个⽂件夹对于我们建⽴库函数模板没有帮助。
stm32f10x_stdperiph_lib_um.chm这个是编译过的html⽂件,在后⾯的开发中都要⽤到,⾥⾯有很多规范,其重要性和作⽤不亚于PDF版的参考⼿册。
Keil4下使用STM32库V3.5
![Keil4下使用STM32库V3.5](https://img.taocdn.com/s3/m/bdda51de7f1922791688e8cc.png)
Keil4下使用固件库V3.5关联到建立自己工程第一步:下载一个固件库V3.5第二步:提取压缩包中的Librarie s放到你需要经常存放Keil4工程的地方,方便关联。
例如放在F盘,新建的STM32文件夹下。
第三步:打开Keil4,开始新建工程吧。
1.新建一个存放工程的文件夹,再将新建的工程放到此文件夹下。
2.输入文件名后“保存”3.选取您使用的芯片型号点“OK”,进入下一环节4.接着会出现这样的一个提示框,此处是选择是启动文件,但要使用库V3.5,此处点“否”5.此时Project中出现的是这样6.重点来了:选择工具条上的Manage Components, 下图圈中7.接着我们会在此完成文件添加在”Groups”中新建3个文件夹1.StartUp2.Libraryer用于分类存放相关文件8.选中“Groups”中的“StartUp”文件,然后再在Files框下,点击“Add File”找到目录下刚才存放的Libraries文件并打开,找到路径如下,并选中startup_stm32f10x_md.s"F:\STM32\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\start up\arm\startup_stm32f10x_md.s"同理,我们添加Library文件夹添加:stm32f10x_GPIO.c stm32f10x_rcc.c stm32f10x_tim.c"F:\STM32\Libraries\STM32F10x_StdPeriph_Driver\src\stm32f10x_gpio.c"最后添加我们的“User”文件夹此处需要添加一个系统文件system_stm32f10x.c 路径如下:"F:\STM32\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c"添加完成这个文件后,可以点“OK”结束了现在我们的Project中有如图文件:9.新建我们的main.c点红框处新建一个Txet1文件,保存为“main.c”记得加“.c”后缀10.右击Project中的“User”出现有图菜单点击“Add Files to Group ‘User’…”将保存的main.c 文件添加到“User”中至此文件添加完成,如果还需要添加文件,可重复步骤8.911.将我们添加的文件与固件库关联起来点击工具条的“Target Options”弹出右图框12.按蓝色标记步骤,一步一步设置第一步:点击“Include Parts”的浏览按钮出现“Folder Setup ”新建链接如右图步骤一直浏览到右图文件夹,并选中“确定”:第二步:重复第一步骤新建找到路径,选中“inc”文件夹至此,关联固件库完成:如果需要添加自己的库可以采用此类方式,将“.h头文件”关联进来13.接下来是让自己的文件夹更合理,分类更细致的步骤第一步:点击“Output”下“SelectFolder Objects”,并新建一个“Output”文件夹双击打开点“OK”完成第二步:点击“Listing”下“Select Folderfor Listing..”后新建一个listing文件夹,双击打开,点“OK”完成14.选择适合自己开发板的下载器第一步:点击“Debug”,出现如右图选择自己的调试器。
在Keil MDK环境下使用STM32固件库
![在Keil MDK环境下使用STM32固件库](https://img.taocdn.com/s3/m/39edb3ef941ea76e58fa042e.png)
在Keil MDK环境下使用STM32固件库简介写这篇教程主要是和大家分享使用STM32的基本方法,也是给自己学习过程的总结、记录和备忘,避免重复学习之前明白但又忘记的知识和操作。
我现在也是刚开始接触学习STM32,我是在STM32的固件库V3基础上进行学习。
在这里我和大家分享一下使用V3.x库的方法,希望大家喜欢,如有错误请指出。
这篇教程分以下几个方面,一:建立工程,设置工程属性。
二:建立条理清晰的GROUP;三:使用JLINK仿真调试。
下面就分别逐个说明。
一、新建MDK工程1、首先,打开MDK软件,再点击Project->New uVision Project…,如下图所示:弹出如下对话框:新建一个文件夹MDK工程,然后把工程名字设为test,点击保存。
弹出选择器件的对话框,我们使用的是stm32单片机,所以选择STMicroelectronics下面的器件,如STM32F107VCT6,如图所示:点击OK,MDK会弹出一个对话框,如图所示:问是否加载启动代码到当前工程下面,如果选择是,则这个启动代码是旧版本库的启动代码,新版本的启动代码和这个不同,需要自己添加。
在这里我们使用的是新版本的库,所以点击否,自己添加启动代码。
启动代码是一段和硬件相关的汇编代码,是必不可少的!这个代码具体如何工作,感兴趣可以研究一下,现在可以不必关心它。
2、接下来我们需要对工程进行一些设置。
在工程区,右键点击Target1,选择Options for Target…Target1‟ 如图所示:弹出如下窗口,选择Output标签,设置目标文件的生成路径及其他相关参数。
如图点击Select Folder for Objects 在弹出的窗口中点空白处新建“Obj”文件夹,然后双击“Obj”文件夹,如图中所示的Path后,点击OK.点击Listing标签,新建“list”文件夹,设置链接文件的生成路径,及相关参数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STM32固件库V3.4移值到Keil MDK v4.12 图文详解
1、本例所用到的MCU是STM32F103VET6,已经过测试,如果是其它MCU的
话,只需作小许修改即可
2、首先按下图所示建立相应用的文件夹,注意层次关系:
3、下图是工程文件夹里相应的文件:
接照上图所示,在相应的文件夹里放放相关的“.C”文件,在startup里放入相应的".s文件",对于Keil 其文件在“\Libraries\startup\arm”里面可找到。
4、接着就打开Keil MDK V4.12,新建一个工程并选择好器件:
点击“品”字形的图标,建好组:
5、下图是建好组后的图并在CoreSupport组里“Add Files”了一个文件:
6、下图是startup组里“Add Files”后的图:
7、下图是StdPeriph_Driver组里“Add Files”后的图,由于文件比较多
一张图并不能完全显示出来,我是将所有在“\Libraries\StdPeriph_Driver\src”所有的文件都添了进去,在实际应用时要按实际情况添加:
8、下图是STMF10x组里“Add Files”后的图:
9、下图是User组里“Add Files”后的图:
10、单击“OK”,终于添加文件完毕,之后就到设置了,单击右图所示的图标:
,按下图所示设置好,点"Output"标签页:
11、“Output”文件夹用以存放你所勾选项目产生的“Debug Information”、
"Create HEX File"和“Brower library”信息或文件。
接着就是点"Listing"标签页,设置方法和上图相同
12、点标签页“C/C++”,这页的设置很重要,首先加入这个宏:
13、接着,点击如图所示有黑色圈的按钮
接着按下图所示设置,也就是所用到固件库头文件的路径:
好了。
编译一次吧,看是否有错?
14、这时在“Output”和“Listing”文件夹里就有了许多文件:
如果不要这些信息或为为发加快编译速度,可以去掉在第十步所示的“Debug Information”和“Brower library”前面的钩即可。
15、最后到了J-LINK仿真下载器相关项的设置。
下图主要是右半部分的设置:
紧接着就是点上图蓝色背景右边的"Settings"按钮,不要忘了接上STM32开发板的电源和J-LINK,还要装好J-LINK的驱动,按下图设置好:
先点击“Scan”按钮,接着就是"Auto Clk"按钮,哈,我板子的JTAG时钟能达到10MHZ!
16、接着上图所示点“Flash Download”标签页并按实际况设置好:
17、还有最后一步,看下图:
全部完成了,设置了那么久为的就是能看到下图:
18、给大家一点设置的参考吧:
需在工程项目C/C++里面Define 添加:USE_STDPERIPH_DRIVER,STM32F10X_HD STM32F10X_LD---STM32小容量芯片
STM32F10X_MD---STM32中容量芯片
STM32F10X_MD---STM32中容量芯片
STM32F10X_CL---STM32互联网型芯片105/107等
USE_STDPERIPH_DRIVER---使用库里面的API函数
在工程里面添加相应芯片的启动文件:
STM32F10X_LD.S
STM32F10X_MD.S
STM32F10X_HD.S
STM32F10X_CL.S
在system_stm32f10x.c修改工作频率,默认为72MHz,在外部晶振为8MHz的情况下。
STM32 Keil-MDK工程模板 V3.5 固件库
创建一个工程模板:
1. 解压STM32库文件然后拷贝
2. 目录结构:
Main
-> stm32f10x_it.c 此三个文件在同一个目录,用户编写。
-> stm32f10x_conf.h
-> main.c
_CMSIS
-> core_cm2.c 汇编接口
-> system_stm32f10x.c
_DeviceSupport
-> 所有的s文件启动代码
Select the corresponding startup file depending of the used device:
- startup_stm32f10x_ld_vl.s: for STM32 Low density Value line devices
- startup_stm32f10x_ld.s: for STM32 Low density devices
- startup_stm32f10x_md_vl.s: for STM32 Medium density Value line devices
- startup_stm32f10x_md.s: for STM32 Medium density devices - startup_stm32f10x_hd.s: for STM32 High density devices
- startup_stm32f10x_xl.s: for STM32 XL density devices
- startup_stm32f10x_cl.s: for STM32 Connectivity line devices
_STM32F10x_StdPeriph_Driver
-> 所有的c文件 V3.5.0的官方固件
-------------->
注意事项:
1. Main.c应该放在_CMSIS的前面。
且必须有文件stm32f10x_conf.h ,否则就默认include了keil的stm32f10x_conf.h文件
2. 注意inlcude path的顺序.
3. 在Preprocessor Symbols中定义 USE_STDPERIPH_DRIVER[使用标准外设库驱动], 否则编译出现 assert_param 未找到的错误:
4. 优化等级 00 表示不优化
5. One elf per function. 只编译用到的函数.
拷贝STM32F10x_StdPeriph_Examples 下每个目录的main.c stm32f10x_conf.h stm32f10x_it.c 到 src 目录即是一个范例
-------------->
Copy Keil 范例的 stm32_Init.c 到项目中,编译。
发现一个定义的错误。
是因为keil的头文件和st库的3.50的头文件中定义不一样
keil -> st
USART1_IRQChannel 改为 USART1_IRQn
USART2_IRQChannel 改为 USART2_IRQn
USART3_IRQChannel 改为 USART3_IRQn
编译通过!
--------------->
Copy Keil 范例的RTX_Conf_CM.c 到项目中, 设置options中Operation system 为RTX-Kernel
可以开始使用Keil的RTOS.
用这个模板轻松实现图形化配置懒人有福了,不过stm32_Init.c 现在一直保持1.3 的状态使用的局限性还是比较多的,目前我基本不用。