基于stm32 3.1.0的库的建工程讲解
首先我们先看看3.1.0的文件结构和以前2.0有什么不同:
1. startup_stm32f10x_xx.s 启动文件 ;里面定义了启动地址和中断的入口 他分别对大、中、小 以及 互联产品写了不同的启动文件。在建工程的时候 我们按照我们使用的芯片选择相应的文件即可。
这个文件和2.0的stm32f10x_vector.c文件作用是一样的
2 core_cm3.c定义了很多在不同调试器下的汇编语言读写内核寄存器的标号 他和2.0的cortexm3_macro.s文件做的工作是一样的
3 在3.1.0里面 多了一个system_stm32f10x.c 系统初始化文件,主要是对系统rcc的初始化 我们只需要改变文件上面的一些定义 就能完成我们的时钟配置。
如:我们要设置72m
/* #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
如果要定义外部sram来存储数据 就把下面的的#define DATA_IN_ExtSRAM打开 注意这个只能是大容量下才可以使用
/*!< Uncomment the following line if you need to use external SRAM mounted
on STM3210E-EVAL board (STM32 High density devices) as data memory */
#ifdef STM32F10X_HD
/* #define DATA_IN_ExtSRAM */
#endif /* STM32F10X_HD */
这样我们就可以在主函数中直接调用一个SetSysClock()函数就能完成
还有一点需要注意的就是 外部时钟的定义 因为很多算波特率或者时钟的计算都要使用这个参数,这个就是上面的HSE_Value 这个值在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 */
我们可以根据我们使用的外部晶振作修改这个值。
说到这里 在说一下这个文件里面定义的其他一些东西:
1 定义使用的芯片类型 下面以中型密度为例
#if !defined (STM32F10X_LD) && !defined (STM32F10X_MD) && !defined (STM32F10X_HD) && !defined (STM32F10X_CL)
/* #define STM32F10X_LD */ /*!< STM32F10X_LD: STM32 Low density devices */
#define STM32F10X_MD /*!< STM32F10X_MD: STM32 Medium density devices */
/* #define STM32F10X_HD */ /*!< STM32F10X_HD: STM32 High density devices */
//#define STM32F10X_CL /*!< STM32F10X_CL: STM32 Connectivity line devices */
#endif
2 这个比较重要 有很多人喜欢使用st的库文件 同样有很多人不喜欢用st的库 但是他们又不会直接汇编 所以实质上 没有使用函数库 但是还要依靠st的对于寄存器的封装。 下面这两个定义就是为这两种人准备的,当然对于能直接汇编 或者不嫌费事 非要自己定义寄存器的人来说 这个文档也不用看的:
#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
以上是 定义使用st的外围驱动库。因为在这个文件后面还定义了这个:
#ifdef USE_STDPERIPH_DRIVER
#include "stm32f10x_conf.h"
#endif
#include "stm32f10x_conf.h"是供我们使用的用来选取所使用的库文件的配置文件
4. misc 文件 定义了 nvic的一些操作和systick的配置 用到了这两个的时候即可加进来这个文件,nvic是定义向量表地址的 如果我们自己不定义 只能通过外部的boot来选择 但是不知道是不是保险
ok 上面介绍了一下 和以前略微不同的地方 现在就开始建立工程:
首先建几个文件夹:
如图
http://www.stmsky.com/bbs/viewthread.php?tid=1939&extra=
1. startup_stm32f10x_xx.s 启动文件 ;里面定义了启动地址和中断的入口 他分别对大、中、小 以及 互联产品写了不同的启动文件。在建工程的时候 我们按照我们使用的芯片选择相应的文件即可。
这个文件和2.0的stm32f10x_vector.c文件作用是一样的
2 core_cm3.c定义了很多在不同调试器下的汇编语言读写内核寄存器的标号 他和2.0的cortexm3_macro.s文件做的工作是一样的
3 在3.1.0里面 多了一个system_stm32f10x.c 系统初始化文件,主要是对系统rcc的初始化 我们只需要改变文件上面的一些定义 就能完成我们的时钟配置。
如:我们要设置72m
/* #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
如果要定义外部sram来存储数据 就把下面的的#define DATA_IN_ExtSRAM打开 注意这个只能是大容量下才可以使用
/*!< Uncomment the following line if you need to use external SRAM mounted
on STM3210E-EVAL board (STM32 High density devices) as data memory */
#ifdef STM32F10X_HD
/* #define DATA_IN_ExtSRAM */
#endif /* STM32F10X_HD */
这样我们就可以在主函数中直接调用一个SetSysClock()函数就能完成
还有一点需要注意的就是 外部时钟的定义 因为很多算波特率或者时钟的计算都要使用这个参数,这个就是上面的HSE_Value 这个值在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 */
我们可以根据我们使用的外部晶振作修改这个值。
说到这里 在说一下这个文件里面定义的其他一些东西:
1 定义使用的芯片类型 下面以中型密度为例
#if !defined (STM32F10X_LD) && !defined (STM32F10X_MD) && !defined (STM32F10X_HD) && !defined (STM32F10X_CL)
/* #define STM32F10X_LD */ /*!< STM32F10X_LD: STM32 Low density devices */
#define STM32F10X_MD /*!< STM32F10X_MD: STM32 Medium density devices */
/* #define STM32F10X_HD */ /*!< STM32F10X_HD: STM32 High density devices */
//#define STM32F10X_CL /*!< STM32F10X_CL: STM32 Connectivity line devices */
#endif
2 这个比较重要 有很多人喜欢使用st的库文件 同样有很多人不喜欢用st的库 但是他们又不会直接汇编 所以实质上 没有使用函数库 但是还要依靠st的对于寄存器的封装。 下面这两个定义就是为这两种人准备的,当然对于能直接汇编 或者不嫌费事 非要自己定义寄存器的人来说 这个文档也不用看的:
#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
以上是 定义使用st的外围驱动库。因为在这个文件后面还定义了这个:
#ifdef USE_STDPERIPH_DRIVER
#include "stm32f10x_conf.h"
#endif
#include "stm32f10x_conf.h"是供我们使用的用来选取所使用的库文件的配置文件
4. misc 文件 定义了 nvic的一些操作和systick的配置 用到了这两个的时候即可加进来这个文件,nvic是定义向量表地址的 如果我们自己不定义 只能通过外部的boot来选择 但是不知道是不是保险
ok 上面介绍了一下 和以前略微不同的地方 现在就开始建立工程:
首先建几个文件夹:
如图
http://www.stmsky.com/bbs/viewthread.php?tid=1939&extra=