STM32F4标准外设库模板工程建立与使用

2019-07-19来源: eefocus关键字:STM32F4  标准外设库  模板工程

SW4STM32安装

其实固件库安装过程很简单,在第一次新建工程时会提示选择使用Stdperiph 驱动还是Cube HAL,由于Stm32官方大力推行Cube HAL固件库,所以Cube HAL的固件库直接可以从网上直接一键下载安装。然而对于老的StdPeriph固件库不能一键式下载安装,会提示出错。所以,我们需要自己下载一个.zip固件包,放在C:UsersLYAppDataRoamingAc6SW4STM32firmwares文件夹下,其中的LY就是计算机的用户名。然后新建工程时在选择Stdperiph固件时会自动解压缩,这样就能使用该库进行编译了。界面如下所示:

在这里插入图片描述


工程配置

器件与时钟

在这里插入图片描述

或者,

在这里插入图片描述
在这里插入图片描述


修改晶振与时钟,根据注释可以算得sysclk为168MHz


在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

FSMC和FMC

STM32F4的某些系列是FSMC,有些是FMC


在这里插入图片描述
在这里插入图片描述


浮点处理器FPU

http://www.stmcu.org/module/forum/thread-581903-1-1.html


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

打开 option for target 选择 C/C++ 标签, 在define中添加:USE_HAL_DRIVER,STM32F407xx,__TARGET_FPU_VFP,ARM_MATH_MATRIX_CHECK,ARM_MATH_ROUNDING,ARM_MATH_CM4,__CC_ARM,由于我的是HAL的库,所以前面有USE_HAL_DRIVER的全局宏定义,如果你用的不是HAL库,而是使用固件库的话,一般会有固件库的一个全局宏定义USE_STDPERIPH_DRIVER和STM32F4XXxx在里面,这在固件库中的例子工程中都会有这个的。所以,我这里只需要添加

__TARGET_FPU_VFP,

ARM_MATH_MATRIX_CHECK,

ARM_MATH_ROUNDING,

ARM_MATH_CM4,

__CC_ARM

注意中间用英文逗号分开。其中ARM_MATH_MATRIX_CHECK是库函数的参数检查开关,这里添加后,就打开。ARM_MATH_ROUNDING这个是库函数在运算是是否开启四舍五入的功能,我这里添加,可以根据自己的需要进行配置。ARM_MATH_CM4这个就非常重要,必须要配置进去,否则在编译之后,会默认使用math.h的库函数,而不会用到硬件的FPU的。__CC_ARM是不同编译器的编译配置宏定义,__CC_ARM就是代表MDK开发环境。

打开工程中的 stm32f407xx.h 文件,注意不是 stm32f4xx.h 文件,是和你的芯片型号对应的头文件,比如我用的是STM32F407,所以我这里就选择打开stm32f407xx.h文件,找到

#define __FPU_PRESENT 0 /!< FPU present 这一句,将设置为 1

找到

#include “core_cm4.h” / Cortex-M4 processor and core peripherals */

#include “system_stm32f4xx.h”

#include

这个地方,然后在下面添加

#include “arm_math.h”

然后保存。


ARM_MATH_CM4

ARM_MATH_MATRIX_CHECK

ARM_MATH_ROUNDING

__FPU_PRESENT

__FPU_USED


代码优化

http://www.stmcu.org/module/forum/thread-603791-1-1.html


网线热插拔

http://blog.csdn.net/xukao5671927/article/details/77765464


JTAG引脚复用

STM32f1 中JTAG 引脚作为普通IO口设置方法以及STM32f4中的方法的不同


在stm32f1中,我们对于不用的jtag引脚做io使用时,会使用以下步骤:(下面内容来自网络)

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);


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

1.执行端口重映射时,复用功能时钟得使能:RCC_APB2Periph_AFIO


GPIO_Remap_SWJ_Disable

!< Full SWJ Disabled (JTAG-DP + SW-DP)

此时PA13|PA14|PA15|PB3|PB4都可作为普通IO用了

为了保存某些调试端口,GPIO_Remap_SWJ_Disable也可选择为下面两种模式:


GPIO_Remap_SWJ_JTAGDisable

!< JTAG-DP Disabled and SW-DP Enabled

此时PA15|PB3|PB4可作为普通IO用了

GPIO_Remap_SWJ_NoJTRST

!< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST

此时只有PB4可作为普通IO用了

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

GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE); //使能禁止JTAG

//初始化GPIOB 推挽输出

GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_3|GPIO_Pin_4);

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_SetBits(GPIOB, GPIO_Pin_3|GPIO_Pin_4);

//初始化GPIOA 推挽输出

GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_SetBits(GPIOA, GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);


但是在stm32f4中不是这样的,STM32F4库函数中,已经取消了GPIO_PinRemapConfig()函数,对于复用功能,使用GPIO_PinAFConfig()函数了!

但是在GPIO_PinAFConfig()函数已经没有禁止JTAG/SW等选项了,而是复用到AF0~AF15线上,其中AF0是系统功能,STM32F4复位后JTAG对应的管脚的对应的功能就是AF0,(GPIO_AF_MCO=0) 所以这句可以不用:GPIO_PinAFConfig( , ,GPIO_AF_MCO);

直接配置GPIOx_MODER为输出,或输入模式即可,但是注意:STM32F4复位后JTAG对应的管脚的GPIOx_MODER值是0x02,即 复用功能!

所以直接配置GPIOx_MODER为所需的模式就可以了!


所以f4中,我们使用不用的jtag脚只需像平常使用其他io一样配置就好了。


使用

首先复制模板工程一份,重命名文件夹为新工程,打开工程,更新工程属性配置,

在这里插入图片描述

编译工程,删除工程目录MDK目录下,原工程名开头的文件即可。



关键字:STM32F4  标准外设库  模板工程

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic468596.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于STM32的外设的GPIO外设设置总结
下一篇:STM32高级开发(11)-使用GDB调试你的工程

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

第2章-如何安装KEIL5—零死角玩转STM32-F429系列

。我们这里面KEIL5的版本是MDK5.15,以后有新版本大家可使用更高版本。2.3 开始安装KEIL5双击KEIL5安装包,开始安装,next。Agree,Nest选择安装 路径,路径不能带中文,next填写用户信息,全部填空格(键盘的space键)即可,nextFinish,安装完毕2.4 安装STM32芯片包KEIL5不像KEIL4那样自带了很多厂商的MCU型号,KEIL5需要自己安装。把下面弹出的界面关掉,我们直接去keil的官网下载:http://www.keil.com/dd2/pack/,或者直接用我们下载好的包。在官网中找到STM32F1、STM32F4、STM32F7这3个系列的包下载到本地电脑,具体下载哪个系列
发表于 2019-09-19
第2章-如何安装KEIL5—零死角玩转STM32-F429系列

第5章 什么是寄存器—零死角玩转STM32-F429系列

本章参考资料:《STM32F4xx 中文参考手册》、《STM32F429xx数据手册》、学习本章时,配合《STM32F4xx 中文参考手册》"存储器和总线架构"、"嵌入式FLASH接口"及"通用I/O(GPIO)"章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。5.1 什么是寄存器我们经常说寄存器,那么什么是寄存器?这是我们本章需要讲解的内容,在学习的过程中,大家带着这个疑问好好思考下,到最后看看大家能否用一句话给寄存器下一个定义。5.2 STM32长啥样我们开发板中使用的芯片是176pin的STM32F429IGT6,具体见图 51。这个就是我们接下来要学习
发表于 2019-09-19
第5章 什么是寄存器—零死角玩转STM32-F429系列

第22章 常用存储器介绍—零死角玩转STM32-F429系列

ROMMASK(掩膜) ROM就是正宗的"Read Only Memory",存储在它内部的数据是在出厂时使用特殊工艺固化的,生产后就不可修改,其主要优势是大批量生产时成本低。当前在生产量大,数据不需要修改的场合,还有应用。2.    OTPROMOTPROM(One Time Programable ROM)是一次可编程存储器。这种存储器出厂时内部并没有资料,用户可以使用专用的编程器将自己的资料写入,但只能写入一次,被写入过后,它的内容也不可再修改。在NXP公司生产的控制器芯片中常使用OTPROM来存储密钥;STM32F429系列的芯片内部也包含有一部分的OTPROM空间。3. 
发表于 2019-09-19
第22章 常用存储器介绍—零死角玩转STM32-F429系列

第24章 SPI—读写串行FLASH—零死角玩转STM32-F429系列

本章参考资料:《STM32F4xx 中文参考手册》、《STM32F4xx规格书》、库帮助文档《stm32f4xx_dsp_stdperiph_lib_um.chm》及《SPI总线协议介绍》。若对SPI通讯协议不了解,可先阅读《SPI总线协议介绍》文档的内容学习。关于FLASH存储器,请参考"常用存储器介绍"章节,实验中FLASH芯片的具体参数,请参考其规格书《W25Q128》来了解。24.1 SPI协议简介SPI协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线。它被广泛地使用在ADC、LCD等设备与MCU间,要求通讯速率
发表于 2019-09-19
第24章 SPI—读写串行FLASH—零死角玩转STM32-F429系列

第7章 使用寄存器点亮LED灯—零死角玩转STM32-F429系列

本章参考资料:《STM32F4xx 中文参考手册》、《STM32F429规格书》。学习本章时,配合《STM32F4xx 中文参考手册》"通用I/O(GPIO)"章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。关于建立工程时使用KEIL5的基本操作,请参考前面的章节。7.1 GPIO简介GPIO是通用输入输出端口的简称,简单来说就是STM32可控制的引脚,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。STM32芯片的GPIO被分成很多组,每组有16个引脚,如型号为STM32F4IGT6型号的芯片有GPIOA、GPIOB、GPIOC至GPIOI共9组GPIO
发表于 2019-09-19
第7章 使用寄存器点亮LED灯—零死角玩转STM32-F429系列

第8章 自己写库-构建库函数雏形—零死角玩转STM32-F429系列

本章参考资料:《STM32F4xx 中文参考手册》、《STM32F429规格书》虽然我们上面用寄存器点亮了 LED,乍看一下好像代码也很简单,但是我们别侥幸以后就可以一直用寄存器开发。在用寄存器点亮 LED 的时候,我们会发现 STM32 的寄存器都是 32 位的,每次配置的时候都要对照着《STM32F4xx参考手册》中寄存器的说明,然后根据说明对每个控制的寄存器位写入特定参数,因此在配置的时候非常容易出错,而且代码还很不好理解,不便于维护。所以学习 STM32 最好的方法是用软件库,然后在软件库的基础上了解底层,学习遍所有寄存器。8.1 什么是STM32函数库以上所说的软件库是指"STM32标准函数库",它是
发表于 2019-09-18
第8章 自己写库-构建库函数雏形—零死角玩转STM32-F429系列

小广播

何立民专栏

单片机及嵌入式宝典

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

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