“stm32f10x.h”是整個標準外設庫的入口文件,這個文件包含了STM32F10x全系列所有外設寄存器的定義(寄存器的基地址和布局)、位定義、中斷向量表、存儲空間的地址映射等。為了是這個文件適用于不同系列的產品,程序中是通過宏定義來實現不同產品的匹配的,上面這段程序的注釋中已經詳細給出了每個啟動文件所對應的產品系列,與之對應,也要相應的修改這個入口文件,需要根據所使用的產品系列正確的注釋/去掉相應的注釋define。在這段程序的下方同樣有這樣的一個注釋程序/*#define USE_STDPERIPH_DRIVER*/ 用于選擇是否使用標準外設庫,如果保留這個注釋,則用戶開發程序可以基于直接訪問“stm32f10x.h”中定義的外設寄存器,所有的操作均基于寄存器完成,目前不使用固件庫的單片機開發,如51、AVR、MSP430等其實都是采用此種方式,通過在對應型號的頭文件中進行外設寄存器等方面的定義,從而在程序中對相應的寄存器操作完成相應的功能設計。
如果去掉/*#define USE_STDPERIPH_DRIVER*/的注釋,則是使用標準外設庫進行開發,用戶需要使用在文件“stm32f10x_conf.h”中,選擇要用的外設,外設同樣是通過注釋/去掉注釋的方式來選擇。示例程序如下:
/* 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) */
上面一段程序來自于例程中的AD采集程序,程序使用了AD和DMA,因此去掉相應的注釋,同時幾乎所有的應用都需要使用復位與時鐘以及通用I/O,因此這兩項是必須的,
而多數程序同樣要使用NVIC中斷IRQ設置和SysTick時鐘源設置,那么 “misc.h”這一項也是必須的。
上面已經針對具體的產品信號和程序功能進行了針對性的配置,接下來需要配置系統所使用的時鐘,系統時鐘在“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
如果這兒沒有明確的定義那么HSI時鐘將會作為系統時鐘。
至此,已經配置了系統的主要外部參數,這些參數主要是通過更改相關的宏定義來實現的,有些開發環境,例如Keil支持在軟件設置中加入全局宏定義,因此像芯片系列定義,是否使用固件庫定義等也可以通過軟件添加來實現。
完成了主要參數配置以后就可以進行程序的開發了,標準外設庫開發就可以使用標準外設庫中提供的方便的API函數進行相應的功能設計了。在4.2.2小節中已經介紹了基于標準外設庫開發的優勢,配置完成后,程序中仍然可以直接更改相應寄存器的配置,通過對寄存器的操作可以提高程序的效率,因此可以使用標準外設庫和寄存器操作兩種相結合的方式。
電子發燒友App

















評論