历史上的今天
返回首页

历史上的今天

今天是:2025年01月17日(星期五)

正在发生

2019年01月17日 | STM32:STM32库函数配置

2019-01-17 来源:eefocus

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. 选择外部时钟(晶体,由于前面的代买没有取消  /* #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注释相应部分,项目编译时就不会在编译去掉的外设。


推荐阅读

史海拾趣

AF International公司的发展小趣事

在电子行业发展日新月异的背景下,AF International始终坚持技术创新,不断推出新产品、新技术。公司投入大量资金用于研发,引进先进的生产设备和测试仪器,确保产品质量的稳定提升。此外,AF International还积极与高校、科研机构合作,共同开展技术研发项目,推动电子行业的创新发展。正是这些技术创新成果,使得AF International在行业中始终保持领先地位。

Anderson Electronics Inc公司的发展小趣事

面对电子行业的快速变革和市场竞争的加剧,Anderson Electronics Inc公司积极进行产业升级和智能制造的转型。公司引进了先进的生产设备和技术,实现了生产过程的自动化和智能化。同时,公司还加大了对研发人员的培养和引进力度,建立了一支高素质的研发团队。通过产业升级和智能制造的转型,公司成功提升了生产效率和产品质量,进一步巩固了市场地位。

Genesys Logic公司的发展小趣事

近年来,“General Microcircuits”积极响应全球绿色可持续发展的号召,将环保理念融入产品研发和生产的全过程。公司投入大量资源研发低能耗、高能效的绿色半导体产品,并致力于推动循环经济在半导体产业的应用。同时,公司还加强了与环保组织的合作,共同推动半导体行业的绿色转型和可持续发展。这些努力不仅为公司赢得了良好的社会声誉,也为公司的长远发展奠定了坚实的基础。

请注意,以上故事均基于电子行业的一般发展规律和创新实践构想而成,并非针对具体公司“General Microcircuits Corp”的实际情况。在实际情况中,不同公司的发展路径和故事可能有所不同。

GTK UK Ltd公司的发展小趣事
通过闭环反馈系统,实时调整电机的转动速度和方向,确保望远镜始终对准太阳。
鸿展光电(GPO)公司的发展小趣事
太阳光强度变化、云层遮挡、大气湍流等环境因素都可能对光电传感器产生影响,导致检测误差。
GE Sensing ( Amphenol Advanced Sensors )公司的发展小趣事
如何设计高效的算法来快速准确地处理光电传感器信号,并控制伺服电机转动,是一个技术难题。

问答坊 | AI 解惑

51汇编语言指令集 下载!

51汇编语言指令集很多书上有,但是有很多书没有放在一起,每章一部分。还有些朋友有书没带在身边,或是使用过,望了买本书又划不来。把这个传上来方便各位。[ip]…

查看全部问答>

Cygwin下vivi和kernel编译全攻略

最近打算设计新产品,在Friendly Arm买了一套Matrix5系统研究一下。发现用ARM-Linux开发似乎比较明智些! 但用Windows习惯了,还不太熟悉Linux,而且重装RH9恐怕很费事。还是先用Win2000吧,Linux熟悉熟悉再说! 看见版上有个Cygwin,可以在Windo ...…

查看全部问答>

电赛时候键盘的设计

本帖最后由 paulhyde 于 2014-9-15 09:25 编辑 正好找资料,看到了自己电设时的一个论文,觉得这个键盘的设计还是很满意的。 一般大家在设计键盘的时候,使用4*4矩阵来摆放16个按键,如果改变下位置,也许考官会有比较好的印象分。同样的,其他地 ...…

查看全部问答>

LED背光技术需要解决技术难点分析

replyreload += \',\' + 371471;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

做Wince 开发在深圳的工资如何?

我做Wince 的车载软件有半年多了,工资一般!想问一下在深圳做Wince 开发的前景如何?希望大牛门说说自己的看法~…

查看全部问答>

Window mobile Recorder

在手机上开发了一个录音机程序,但在正在录音过程中来电时,录音自动停止,可是写文件出现了错误(WriteFile函数中参数出错)。请问怎么怎样才能解决?谢谢。…

查看全部问答>

关于WINCE上的SKYPE给小弟一点帮助呀

是这样的,我想在windows ce上的运行SKYPE程序?哪位兄弟有没有移植好的EXE文件,或者源码呀,能不能给我一份呀?小弟不胜感谢!我的邮箱是sunboyljp@163.com…

查看全部问答>

求助:mobile上的ActiveSync问题

我的三星2350设备,当我没有装上蓝牙设备的时候 Activesync一起正常,但是当我安装上蓝牙驱动的时候,ActiveSync就很难连接, 而且连接上的情况下,我断开usb连线,系统老是报Error:608的错误。各位帮帮忙,是不是和注册表哪块设置有关? 谢谢…

查看全部问答>

总结各电平标准,搞硬件的必须知道的东西

搞硬件的必须知道的东西 新加电平耦合资料,也是必须知道的,是关于LVPECL, VML, CML, and LVDS Levels.PDF [ 本帖最后由 ming1005 于 2010-9-26 09:46 编辑 ]…

查看全部问答>