在keil_mdk环境下使用stm32_v3.4库

上传人:j****9 文档编号:47847748 上传时间:2018-07-05 格式:PDF 页数:16 大小:815.29KB
返回 下载 相关 举报
在keil_mdk环境下使用stm32_v3.4库_第1页
第1页 / 共16页
在keil_mdk环境下使用stm32_v3.4库_第2页
第2页 / 共16页
在keil_mdk环境下使用stm32_v3.4库_第3页
第3页 / 共16页
在keil_mdk环境下使用stm32_v3.4库_第4页
第4页 / 共16页
在keil_mdk环境下使用stm32_v3.4库_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《在keil_mdk环境下使用stm32_v3.4库》由会员分享,可在线阅读,更多相关《在keil_mdk环境下使用stm32_v3.4库(16页珍藏版)》请在金锄头文库上搜索。

1、简介简介 写这篇“小”教程主要是和大家分享使用 STM32 的基本方法。在一年以前,我开 始接触并开始使用 STM32。STM32 价格便宜,外设丰富,开发和仿真环境使用方 便,一下子便爱上了它。我当时使用了 IAR 编译环境,固件库也是以前的 V2 版 本。由于 ST 公司更新了 STM32 的固件库,所以想试着使用新固件库。刚开始使 用新库时也遇到了一些问题,但是慢慢熟悉不但觉得不难不烦,反而觉得 V3 比 V2 更好用。在这里我和大家分享一下使用 V3.4 库的方法,希望大家喜欢,如有 错误请指出,在下不慎感激。 这篇“小”教程分以下四步来说, 第一步, 获得库文件, 并进行适当的整理;

2、 第二步,建立工程,并建立条理清晰的 GROUP;第三步,修改工程的 Option 属 性;第四步:使用 JLINK 仿真调试。下面就分这四大步来逐个说明。 第一步第一步 获得库文件获得库文件,并进行适当的整理并进行适当的整理 第一步非常的简单,访问 ST 的官网上就可以获得最新的固件库,在我写 “小”教程的时候最新的固件库是 V3.4。除了获得固件库之外还可以获得和固 件库相关的说明文档。在以前的官网上可以下载到一篇名为如何从 STM32F10xxx 固件库 V2.0.3 升级为 STM32F10xxx 标准外设库 V3.0.0的应用 手册,但是在现在的 ST 官网上却找不到这篇十分有用的应

3、用文档,不过却可以 在百度文库中找到,这篇文档详细说明了新固件库的文件结构,在 Keil 工程建 立之前,值得一看。 图 1 是新固件库改动比较大的部分,ST 称为 CMSIS。在这个文件夹下面出现了一 些 新 的 源 文 件 、 头 文 件 和 启 动 代 码 , 新 的 源 文 件 如core_cm.c system_stm32f10x.c,也有新的启动代码如 start_stm32f10x_h/m/ld.s。在第 二部分会详细介绍这些文件到底有什么作用,以及和 V2 版本的区别。在这里我 也补充一句,V3.4 还是和 V3.0 有点区别,V3.4 又比 V3.0 多出了几个启动代码。 我

4、个人觉得这些文件“埋”的太深,使用起来有点不方便,所以我一般对这 些文件进行一些整理,把相关文件放在一起,并取上一个标准化的名字,这些文 件夹的名字一般和原始固件库文件夹的名字相同,只是把需要的文件放在一起。 例如我把启动代码 (startup) 放在一个文件夹下面, 而在这个文件下面只放 Keil MDK 有关的启动代码,把 IAR 和 GCC 的文件全部给去除了,这样做不但使得文件 夹内容“清爽”也可以避免不必要的错误。 一般在工程目录下面我会建立以下几 个文件夹, 如图 2 所示。 当然还会建立两个很有用的文件夹, 一个取名为 Listing, 另一个取名为 Object。这两个文件夹会

5、保存 Keil 编译连接过程中产生的一些文 件,虽然是一个不起眼的细节但是也请大家关注,不然在工程目录下面“邋遢” 的很! 下面来简单说说这些文件各有什么作用。在下重在应用,对里面的内容也知之甚 少。 core_cm3.c/core_cm3.h 该文件是内核访问层的源文件和头文件, 查看其中的代码多半是使用汇编语言编 写的。在线不甚了解。 stm32f10x.h 该文件是外设访问层的头文件,该文件是最重要的头文件之一。例如定义了 CPU 是哪种容量的 CPU,中断向量等等。除了这些该头文件还定义了和外设寄存器相 关的结构体,例如: typedef struct _IO uint32_t CRL

6、; _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; 包含了那么多寄存器的定义,那么在应用文件中那么在应用文件中(例如自己编写的例如自己编写的 mainmain 源源 文件文件)只需要包含只需要包含 stm32f10x.hstm32f10x.h 即可即可,而不是以前固件库的需要包含 stm32f10x_conf.h 这个头文件。 system_stm32f10x.c/h 该头文件也可以称为外设访问层

7、的头文件和源文件。 在该文件中可以定义系统的 时钟频率,定义低速时钟总线和高速时钟总线的频率,其中最关键的函数就是 SystemInit()了,这个后面会详细介绍。总之这两个文件是新固件库的重点,有 了它粮也大大简化了使用 stm32 的初始化工作。 stm32f10x_conf.h 这个文件和 V2 版本的库的内容是一样的,需要使用哪些外设就取消哪些外设的 注释。例如需要使用 GPIO 功能,但不使用 SPI 功能,就可以这样操作。 #include “stm32f10x_gpio.h“ /* #include “stm32f10x_spi.h“ */ main.c 这个文件就不用多说了,自

8、己编写。 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

9、 handlers name please refer to the startup */ /* file (startup_stm32f10x_xx.s). */ /* */ /* * brief This function handles PPP interrupt request. * param None * retval None */ /*void PPP_IRQHandler(void) */ 从注释中的英文提示可以看出,中断向量的名称可以从相应的启动代码中找出, 例 如 可 以 在 startup_stm32f10x_md.s 中 找 到 USART1 中 断 函 数 的 名

10、称 USART1_IRQHandler。其他的中断函数名可以以此类推,一一获得,在这里 我就不一一复述了。 StdPeriph_Driver 文件夹 该文件夹有包含两个文件夹,一个是 src 文件夹,另一个是 inc 文件夹,顾名思义,一个 里面放的是元件一个里面放的是头文件。这两个文件夹包含了所有的 STM32 的外设驱动函 数,其实和 V2 版本也没有太大的变化。简单来说,外设的驱动相当于 windows 的驱动函数 API,这些驱动函数看到函数名基本就可以明白这个函数的作用,例如:GPIO_SetBits 可以 置位某个 IO 口,相反 GPIO_ResetBits 则可以复位某个 IO

11、 口。我个人认为熟练使用库可以 大大提高编程的效率, 同时规范使用库函数也可以提高程序的可读性, 让团队中的其他程序 员可以快速的明白代码的作用。 第二步第二步,建立工程建立工程,并建立条理清晰的并建立条理清晰的 GROUPGROUP 从这一步开始就开始和 Keil MDK 打交道了。首先建立一个 Keil 工程,这一 小步再简单不过了,Project 菜单项中点击 New uVision Project,然后保存工 程文件,路径自由设定并可以包含中文。 然后选择指定的 CPU 型号,如图 3 所示。例如选择 STM32F103RB。接着弹出一个添加启动代码的窗口, 在这里请大家点击否在这里请

12、大家点击否。 因为这个启动代码是 旧版本库的启动代码,新版的启动代码和这个不同,需要自己添加。所谓启动代 码就是在 main 函数之前运行的代码。 以上的几个步骤和在 Keil 环境下使用 51 很相似,所以也不必多说。 选择 CPU 型号后就需要建立一个条理清晰的 Group,在这里我强调的是一个 “条理性”。我尽可能的把同类的文件放在一起,并取名和工程文件目录中相同 的名字,这样便于管理也避免不必要的错误。在 Target 1 选项上右击,在弹出 菜单上选择manage components,如图5所示。建立相应的 Group。 例如 User, CMSIS, StdPeriph_Driv

13、er 和 StartUP, 这些 Group 的名称和工程文件夹的名称保持一致,如图 6 所示。为每个 Group 添加同名文件 夹下的源文件或者头文件,为了便于查看代码,我把源文件和头文件都添加进 Group 中 ( 除 StdPeriph_Driver ) , 在 这 里 注 意 过 滤 文 件 的 类 型在 这 里 注 意 过 滤 文 件 的 类 型 。 StdPeriph_Driver 中只添加需要的源文件,例如建立一个 LED 闪烁的工程,那 么这个工程除了进行必要的初始化之外,只需要包含 GPIO 的操作函数,当然需 要使用 GPIO 就必须要使能 GPIO 的时钟,RCC 是绝对

14、少不了的。所以只需要包含 misc.c,stm32f10x_gpio.c 和 stm32f10x_rcc.c。需要说明的是,虽然在有些 Group 中包含了一些头文件,但是 Keil 在编译连接的时却不知道头文件在什么 地方,所以一定要指定头文件的路径一定要指定头文件的路径。添加需要的文件之后,工程目录如图 7 所示。 三步三步 修改工程的修改工程的 OptionOption 属性属性 修改工程属主要目的是指定相关头文件的路径。 接着上面说就是右击工程目 录的 LED Toggle 则会出现 Option 选项卡,当然右击 User 或者其他的 Group 就 不 会 出 现Option选 项

15、 卡 , 初 学 者 极 容 易 犯 这 个 错 误 。给 Output 选择一个名为 Object 的文件夹,当然文件夹也可以是其他任何名称。 给 Listing 选择一个名为 Listing 的文件夹, 当然这个文件夹也可以是其他的名 称。 在C/C+ 选 项 卡 下 , 需 要 输 入 两 个 非 常 重 要 的 宏 , 一 个 宏 是 USE_STDPERIPH_DRIVER,定义了这个宏和外设有关的函数才会包括进来,还有一 个宏是 STM32F10X_MD,这个宏指定了 CPU 的容量,即中等容量的 STM32。除了设 定两个宏之外,还要确定和工程有关的头文件的路径。在工程目录下面除了 StartUP 中没有相关头文件,而其他的文件中都有头文件,所以需要逐个指定。 写到这里除了仿真的选项没有设置之外,其他的参数都设定好了,此时如果 编译连接工程的话,就应该显示没有错误和没有警告。当然也会遇到有错误和有 警告的情况,根据错误提示耐心地寻找错误,总可以把问题迎刃而解。第四步第四步 使用使用 JLINKJLINK 仿真调试仿真调试 在说 JLINK 仿真调试之前,我先说说我在 main.c 中写了点什么,为什么这 样写,还有一个比较要命的问题的是如

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 初中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号