STM32:STM32库函数配置

发布者:温馨生活最新更新时间:2019-01-17 来源: eefocus关键字:STM32  库函数配置 手机看文章 扫描二维码
随时随地手机看文章

stm32 固件库V3.0以上的版本,main等源文件中不再直接包含stm32f10x_conf.h,而是stm32f10x.h,stm32f10x.h则定义了启动设置,以及所有寄存器宏定义,此文件中需要注意的有:使用V3.0以上版本固件库的方法如下:


1.选择device(配置函数STM32F10x.h,具体配置方法如下)


在STM32F10x.h中有如下代码:

#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL) 

  /* #define STM32F10X_LD */     /*!< STM32F10X_LD: STM32 Low density devices */

  /* #define STM32F10X_LD_VL */  /*!< STM32F10X_LD_VL: STM32 Low density Value Line devices */  

  /* #define STM32F10X_MD */     /*!< STM32F10X_MD: STM32 Medium density devices */

  /* #define STM32F10X_MD_VL */  /*!< STM32F10X_MD_VL: STM32 Medium density Value Line devices */  

  /* #define STM32F10X_HD */     /*!< STM32F10X_HD: STM32 High density devices */

  /* #define STM32F10X_HD_VL */  /*!< STM32F10X_HD_VL: STM32 High density value line devices */  

  /* #define STM32F10X_XL */     /*!< STM32F10X_XL: STM32 XL-density devices */

  /* #define STM32F10X_CL */     /*!< STM32F10X_CL: STM32 Connectivity line devices */

#endif


该代码的是让用户根据自己所使用的芯片的存储器(flash)大小,选择相应的flash编程算法,如果用户使用的是大容量存储芯片(如STM32F103VCT6),则只需要将对应大大容量存储器前面的屏蔽符去掉即可,去掉后为:

#define STM32F10X_HD      /*!< STM32F10X_HD: STM32 High density devices */

其它部分代码不变。

如果使用的是中等容量的存储器芯片(如stm32f103c8t6),同样是将对应代码前面的屏蔽符去掉即可,如:

 #define STM32F10X_MD      /*!< STM32F10X_MD: STM32 Medium density devices */

 

2. 时钟频率配置(配置函数:system_stm32f10x.c,具体配置方法如下:)

#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_HSE    HSE_VALUE */

/* #define SYSCLK_FREQ_24MHz  24000000 */ 

/* #define SYSCLK_FREQ_36MHz  36000000 */

/* #define SYSCLK_FREQ_48MHz  48000000 */

/* #define SYSCLK_FREQ_56MHz  56000000 */

#define SYSCLK_FREQ_72MHz  72000000

#endif


由上述代码可见默认是使用72MHz的时钟频率,如果需要使用其它频率,只需做相应的修改即可,如果使用的是72MHz时钟频率可以不用配置此项。

3. 选择外部时钟(配置函数stm32f10x.h,具体配置方法如下:)

#if !defined  HSE_VALUE

 #ifdef STM32F10X_CL   

  #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */

 #else 

  #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */

 #endif /* STM32F10X_CL */

#endif /* HSE_VALUE */

注意:STM32F10X_CL是stm32f105 和stm32f107 互联型的device,用到此器件外部要选用25MHz的晶体,由于前面的代买没有取消  /* #define STM32F10X_CL */     /*!< STM32F10X_CL: STM32 Connectivity line devices */的注释,所以此处默认的外部8MHz的晶体。

4. 开启外设总开关USE_STDPERIPH_DRIVER (配置函数:stm32f10x.h,具体配置方法如下:)

#if !defined  USE_STDPERIPH_DRIVER

/**

 * @brief Comment the line below if you will not use the peripherals drivers.

   In this case, these drivers will not be included and the application code will 

   be based on direct access to peripherals registers 

   */

  /*#define USE_STDPERIPH_DRIVER*/

#endif

默认情况下STM32的标准是关闭的,如果不适用片内外设,则不要取消  /*#define USE_STDPERIPH_DRIVER*/的注释

,如果需要使用STM32的标准外设则需要开启固件外设,即去掉前面的屏蔽符,修改后如下:

#if !defined  USE_STDPERIPH_DRIVER

/**

 * @brief Comment the line below if you will not use the peripherals drivers.

   In this case, these drivers will not be included and the application code will 

   be based on direct access to peripherals registers 

   */

  #define USE_STDPERIPH_DRIVER

#endif

 

5. 最后一步是开启需要使用的外设(配置函数:stm32f10x_config.h,具体配置步骤如下:)

/* Includes ------------------------------------------------------------------*/

/* Uncomment the line below to enable peripheral header file inclusion */

/* #include "stm32f10x_adc.h" */

/* #include "stm32f10x_bkp.h" */

/* #include "stm32f10x_can.h" */

/* #include "stm32f10x_cec.h" */

/* #include "stm32f10x_crc.h" */

/* #include "stm32f10x_dac.h" */

/* #include "stm32f10x_dbgmcu.h" */

/* #include "stm32f10x_dma.h" */

/*#include "stm32f10x_exti.h" */

/* #include "stm32f10x_flash.h" */

/* #include "stm32f10x_fsmc.h" */

/*#include "stm32f10x_gpio.h" */

/* #include "stm32f10x_i2c.h" */

/* #include "stm32f10x_iwdg.h" */

/* #include "stm32f10x_pwr.h" */

/*#include "stm32f10x_rcc.h" */

/* #include "stm32f10x_rtc.h" */

/* #include "stm32f10x_sdio.h" */

/* #include "stm32f10x_spi.h" */

/* #include "stm32f10x_tim.h" */

/*#include "stm32f10x_usart.h" */

/* #include "stm32f10x_wwdg.h" */

/*#include "misc.h" */    /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */

默认是关闭所有外设的,用户需要使用哪个外设,就将该外设前面的注释去掉即可。

 

到这里库函数的配置就全部介绍完毕了,建一个工程需要修改这么多配置是不是太麻烦了呢,的确是比较麻烦,最后再给大家介绍一种简单的配置方法,用宏定义配置这些参数,keil MDk 支持在编译器中添加宏定义,这里就以keil MDK为例,给大家介绍。


先在keil MDK中点击tagart option选项,弹出如下图所示窗口:


 

然后点击C/C++选项,弹出如下窗口:


 

最后在Difine的方框中添加上需要声明的宏定义即可。


 

 

这里总结一下一般工程中需要添加的宏定义:


1. STM32F10X_HD   //选择用户所使用芯片的存储器容量(这里选择的是大容量存储)

2. USE_STDPERIPH_DRIVER //打开标准外设总开关

3. SYSCLK_FREQ_72MHz     //选择时钟频率(默认也是该选项)

4. HSE_VALUE      //选择使用外部高速时钟(默认也是该选项)

 

注意:stm32f10x.h文件的最后有这样的代码:

#ifdef USE_STDPERIPH_DRIVER

  #include "stm32f10x_conf.h"

#endif

stm32f10x_conf.h中包含了所有外设的头文件,因此任意源文件只要包含了stm32f10x.h,就可以在源文件调用任意外设的函数。

若有外设为使用到,在stm32f10x_conf.h注释相应部分,项目编译时就不会在编译去掉的外设。


关键字:STM32  库函数配置 引用地址:STM32:STM32库函数配置

上一篇:STM32:如何用JLINK ULINK JTAG 查看 KEIL /MDK 某条指令执行时间
下一篇:2416开发记录二:最简单的helloworld驱动

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

STM32存储器 — 关于STM32的存储器
当我们在完成某一个实验,当我们正庆幸的时候,我们不由得产生一种不安的想法——我们是否已经少许明白其中的种种细节? 尤其,当我们所有的事情都依赖于编译环境或Firmware,抑或他人的程序,而自己仅仅是Copy和Modify,以致Using。当你还是一个初学者的时候,或许不会太过于关注于此,但是要想提高自己对单片机、处理器原理的理解,并且希望走得更远的时候,您就需要关注更为详细的内部知识,您需要明白编译环境、Firmware等为你的默默贡献。 1 STM32系统结构 要想深刻理解STM32的存储器,需要首先知道STM32的系统结构。 如Figure 1,是STM32系统结构框图。 根据STM32 Referenc
[单片机]
<font color='red'>STM32</font>存储器 — 关于<font color='red'>STM32</font>的存储器
stm32的时钟设定
时钟图 // RCC_HSEConfig(RCC_HSE_OFF); // 关闭外部时钟 // RCC_HSEConfig(RCC_HSE_ON); // 开启外部时钟 // RCC_HSICmd(ENABLE); // 开启内部时钟 // RCC_HSICmd(DISABLE); // 开启内部时钟 // 双高级外设总线结构:高速APB(APB2)速度达到72MHz、低速APB(APB1)速度达到36MHz。 // 允许用户优化外设的使用(18MHz的SPI、4.5Mbps的USART、72MHz的PWM定时器、18MHz触发I/O口)。 // RCC_PLLCo
[单片机]
OLED驱动 0.96寸 硬件SPI驱动(STM32
一、前期准备 单片机:STM32F103ZET6 开发环境:MDK5.14 库函数:标准库V3.5 0.96 OLED模块:淘宝有售 二、实验效果 三、驱动原理 此OLED模块采用SPI通信,也可转成IIC通信,不过要焊接背面的电阻,不建议改IIC,要改请参考具体数据手册。驱动芯片SSD1306,具体命令字详解请见网友SSD1306详解。 需要完整工程或者有问题的请加QQ:1002521871,验证:呵呵。 软件模拟SPI驱动 四、驱动代码 oled.h #ifndef __OLED_H__ #define __OLED_H__ #include stm32f10x.h #include stdlib.h #
[单片机]
OLED驱动 0.96寸 硬件SPI驱动(<font color='red'>STM32</font>)
STM32学习笔记之简易Bootloader串口升级设计
概念简介 在学习制作串口升级 Bootloader 之前,我们先了解一下STM32的 IAP (In Application Programming)即在应用编程,IAP是用户自己的程序在运行过程中对 User Flash 的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级. 设计这样的功能需要有两个项目代码: Bootloader 程序: 该部分代码用于实现通过某种通信方式(如 USB,USART)接收程序或数据,执行对第二部分代码的更新,通常存储于 Flash 的起始地址(0x08000000); App 程序: 该部分代码是产品实现业务逻辑正常运行的代码,该部分
[单片机]
<font color='red'>STM32</font>学习笔记之简易Bootloader串口升级设计
STM32串口USART1中断接收和中断发送
  先贴出中断函数:    view plain copy   void USART1_IRQHandler(void){   IF (USART_GetiTStatus(USART1, USART_IT_RXNE) != RESET) {   USART_ClearITPendingBit(USART1, USART_IT_RXNE);   USART1_Buffer =USART_ReceiveData(USART1); //USART1_Buffesh是一个自己定义的接收数组   if(i 3){   SendFlag = 1;   }   }   if(USART_GetITStatus(USART1, USART_I
[单片机]
如何使用STM32的窗口看门狗
32F的窗口看门狗中有一个7位的递减计数器,它会在出现下述2种情况之一时产生看门狗复位: 1)当计数器的数值从0x40减到0x3F时 2)当刷新看门狗时计数器的数值大于某一设定数值时,此设定数值在WWDG_CFR寄存器定义 对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但这有一个隐患,有可能程序跑乱了又跑回到正常的地方,或跑乱的程序正好执行了刷新看门狗操作,这样的情况下一般的看门狗就检测不出来了;如果使用窗口看门狗,程序员可以根据程序正常执行的时间设置刷新看门狗的一个时间窗口,保证不会提前刷新看门狗也不会滞后刷新看门狗,这样可以检测出程序没有按照正常的路径运行非正常地跳过了某些程序段的情况。 WWDG与
[单片机]
基于STM32单片机的大扭矩永磁同步电机驱动系统
引言 大扭矩永磁同步电机直接驱动由于去掉了复杂的机械传动机构,从而消除了机械结构带来的效率低、维护频繁、噪声与转动惯量大等不利因素,具有效率高、 振动与噪声小、精度高、响应快、使用维修方便等一系列突出优点 。近年来,随着电力电子技术、永磁材料、电机设计与制造技术、传感技术、控制理论等的 发展,大扭矩永磁同步电机在数控机床、矿山机械、港口机械等高性能系统中得到了越来越广泛的应用 。 交流电机控制系统广泛采用单片机、DSP、FPGA为控制系统核心。STM32 是一种基于ARM 公司Cortex-M3 内核的新型32 位闪存微控制器,采用了高性能、高代码密度的Thumb-2 指令集和紧耦合嵌套向量中断控制器,拥有丰富的外围接口,具有
[单片机]
基于<font color='red'>STM32</font>单片机的大扭矩永磁同步电机驱动系统
STM32 FSMC操作SRAM的步骤简析
本次操作的SRAM的型号是IS62WV51216,是高速,8M位静态SRAM。它采用ISSI(Intergrated Silicon Solution, Inc)公司的高性能CMOS技术,按照512K个字(16)位进行组织存储单元。其具有高性能、低功耗特点。为方便用户扩展SRAM的存储空间,为用户有提供了两个片选引脚;此外,含有两个字节控制信号UB和LB,可方便用户按字节访问SRAM或按字访问SRAM。IS62WV51216具有45ns/55ns访问速度,因为是全静态操作,因此无需外部时钟和刷新要求。 IS62WV51216功能框图 IS62WV51216有地址译码器、数据IO、控制逻辑和存储阵列四部分构成。地址译码器将1
[单片机]
<font color='red'>STM32</font> FSMC操作SRAM的步骤简析
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved