STM32精英版(正点原子STM32F103ZET6开发板)学习篇1——新建库函数模版
引入:
準備: STM32固件庫包。
??ST官方提供的STM32固件庫包:STM32F10x_StdPeriph_Lib_V3.5.0(文件夾名)
介紹:
??文件夾含有:Libraries、Project、Utilities等文件夾。
????Libraries文件夾含有:CMSIS、STM32F10x_StdPeriph_Driver(包含固件庫核心的所有子文件夾和文件,建立工程時都會使用到)
??????CMSIS文件夾:為啟動文件。
????????|________ core_cm.c、core_cm.h【…\Libraries\CMSIS\CM3\CoreSupport】:?CMSIS核心文件,提供進入M3內核接口。
????????|________ STM32F10x文件夾【…\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x】:?啟動文件、比較基礎的寄存器定義和中斷向量定義的文件,含有:
??1、system_stm32f10x.c與system_stm32f10x.h的功能:設置系統以及總線時鐘,里面有SystemInit()函數,在系統啟動時都會調用,設置系統整個時鐘系統。
??2、stm32f10x.h:這個文件就相當重要,只要你做STM32開發,幾乎時刻都要查看這個文件相關的定義。這個文件打開可以看到,里面非常多的結構體以及宏定義。這個文件里面主要是系統寄存器定義申明以及包裝內存操作,對于這里是怎樣申明以及怎樣將內存操作封裝起來的。
??3、startup文件夾:啟動文件,里面包含8個啟動文件,根據不同容量的芯片,啟動文件是不同的。
????小容量:FLASH≤32K ??=== 》ld.s
????中容量:64K≤FLASH≤128K ??=== 》md.s
????大容量:256K≤FLASH??=== 》hd.s
??啟動文件是進行堆棧之類的初始化,中間向量表以及中斷函數定義。Reset_Handler中斷函數是唯一實現了的中斷處理函數,其他的中斷函數基本都是死循環。Reset_handler在我們系統啟動的時候會調用。啟動文件要引導進入main函數,同時在進入main函數之前,首先要調用SystemInit系統初始化。
??????STM32F10x_StdPeriph_Driver文件夾:為STM32固件庫源碼文件。
????????????|______________ inc:?存放的是stm32f10x_xxx.h頭文件。
????????????|______________ src:?存放的是stm32f10x_xxx.c格式固件庫源碼文件。
(每一個.c文件和相應的.h文件對應,這里的文件也是固件庫的核心文件,每個外設對應一組文件)
????Project文件夾含有:STM32F10x_StdPeriph_Examples、STM32F10x_StdPeriph_Template
??????STM32F10x_StdPeriph_Examples文件夾:ST官網提供的固件實例源碼,(可參考修改這個官方提供的實例來快速驅動自己的外設)
??????STM32F10x_StdPeriph_Template文件夾:工程模版。
????Utilities文件夾含有:官方評估板的一些對應源碼(可忽略)
????stm32f10x_stdperiph_lib_um文件:固件庫幫助文檔(英文版)
建立STM32F1工程模版
??步驟一
??電腦某目錄下創建文件夾:Tempalte——點入再創建子文件夾:USER
??步驟二
??打開MDK軟件(若之前有打開項目,點擊菜單選項卡“Project”——“Close Project””)——菜單選項卡“Project”——“New Uvision Project…”——定位到剛才建立的文件夾USER——點擊“保存”,如下圖:
??步驟三
??這時會跳出選擇芯片型號的界面,再此之前需要先添加(這邊不做介紹)
??選擇對應自己主板對應的芯片型號即可。
??點擊“OK”后跳出下面的界面(可添加自己需要的組件,方便構建開發環境)直接點擊“X”或者“Cancel”.
??步驟四
??這樣便創建了下圖所示的框架,還需要添加啟動代碼和.c文件。
??且若查看對應目錄下USER文件夾,會自動創建一些文件,如下圖所示:
??這邊對以上文件做些簡要說明:
????Tempalte.uvprojx文件(帶Keil圖標的文件): 是工程文件,非常關鍵。
????Listings、Objects文件夾: 用于存放編譯過程產生的中間文件。現在是空的,可刪除。【后面我們會把它們設置到新創建的文件夾OBJ中】
??步驟五
??在文件夾Tempalte下再創建3個文件夾:CORE、OBJ、STM32F10x_FWLib。
????CORE文件夾: 存放核心文件和啟動文件 。
????OBJ文件夾:存放編譯過程文件以及hex文件。
【之前說的USER文件夾下Listings、Objects文件夾后面會設置放在OBJ文件夾中】
????STM32F10x_FWLib文件夾:存放ST官方提供的庫函數源碼文件。
????USER文件夾(前面創建的文件):存放工程文件、main.c、system_stm32f10x.c等等。
??如下圖所示:
??步驟六
??復制固件庫文件夾中STM32F10x_StdPeriph_Driver文件夾下的inc、src的文件夾)【…\Libraries\STM32F10x_StdPeriph_Driver】到 STM32F10x_FWLib文件夾。
???? inc文件夾存放的是:固件庫.c文件。
???? src文件夾存放的是:固件庫.h文件。
????(每個外設對應一個.c文件和一個.h文件)
??步驟七
??復制固件庫文件夾中CoreSupport文件夾下的core_cm3.c、core_cm3.h文件)【…\Libraries\CMSIS\CM3\CoreSupport】到 CORE文件夾。
??復制固件庫文件夾中arm文件夾下的startup_stm32f10x_hd.s文件{啟動文件})【…\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm】到 CORE文件夾。
??步驟八
??復制固件庫文件夾中STM32F10x文件夾下的stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h三個文件)【…\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x】到 USER文件夾。
??復制固件庫文件夾中STM32F10x_StdPeriph_Template文件夾下的main.c、stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h四個文件)【…\Project\STM32F10x_StdPeriph_Template】到 USER文件夾。
到這邊,我們就將固件庫中所需要的文件都復制好了。
??步驟九
??接下來,需要將剛剛復制的文件都加入到我們的工程中去。右擊Projectc窗口下的“Target1”——“Manage Project Item”。
將“Target1(雙擊)”修改為“Tempalte”,“Source Group1(雙擊)””修改為“USER”并在下面添加“CORE”、“FWLIB”,如下圖所示后。
再對不同的文件夾添加文件。
一、選中USER文件夾,點擊“Add Files…”,找到USER目錄下,添加三個文件:system_stm32f10x.c、stm32f10x_it.c、main.c
二、選中CORE文件夾,點擊“Add Files…”,找到CORE目錄下,添加兩個文件(注意文件類型要選擇All files才可以看到全部后綴文件)core_cm3.c、startup_stm32f10x_hd.s:
三、選中FWLIB文件夾,點擊“Add Files…”,找到STM32F10x_FWLib目錄下src文件夾中,添加其所有文件(使用快捷鍵Ctrl+A全選)
這樣就將所有文件都添加到項目中。
??步驟十
??接下來會進行編譯,編譯過程會產生很多中間文件(垃圾文件 ),所以現在要先設置一下。
??選擇魔術棒(Options for Target…)——選項卡“Output”——勾選“Creat HEX File”.
??選擇魔術棒(Options for Target…)——選項卡“Output”——“Select Folder for Objects…”(默認是定位在我們剛剛說的Objects文件夾,前面說移動OBJ文件夾中)
再點擊“OK”,則表示路徑設置完成。
??步驟十一
??這時候,可以嘗試編譯一下,會發現編譯器會報錯,報錯頭文件路徑找不到。
??這種原因多半是兩原因:①頭文件根本不存在。②頭文件路徑沒包含到工程。
??那么,我們需要讓頭文件路徑包含到工程中:
??選擇魔術棒(Options for Target…)——選項卡“C/C++”——點擊“Include Paths”右側的按鈕“…”——在點擊“New”或者雙擊——點擊按鈕“…”選擇以下三個路徑(包含頭文件的路徑,且必須包含到最后一級)
????1、…\CORE
????2、…\USER
????3、…\STM32F10x_FWLib\inc
??這三個文件夾下都包含著頭文件 ,所以三個路徑一定要包含進去。
??步驟十二
??這時候,可以嘗試編譯一下,會發現編譯器會報錯,報錯有很多重復定義,這就是需要宏定義“ STM32F10X_HD,USE_STDPERIPH_DRIVER”。(千萬注意不要寫錯了=)
??選擇魔術棒(Options for Target…)——選項卡“C/C++”——“Preprocessor Symbols”下的“Define”旁的空格輸入:STM32F10X_HD,USE_STDPERIPH_DRIVER——點擊“OK”
??步驟十三
??現在再次編譯一遍,會發現還是有一個錯誤,那是因為main函數的問題,我們需要修改main函數就不會報錯了,大家可以選擇:選項卡下“Project”——“USER”——雙擊main.c——全選(Ctrl+A)+刪除后,粘貼以下程序:
#include "stm32f10x.h" /************************************************ALIENTEK 精英STM32F103開發板實驗0工程模板注意,這是手冊中的新建工程章節使用的main文件 技術支持:www.openedv.com淘寶店鋪:http://eboard.taobao.com 關注微信公眾平臺微信號:"正點原子",免費獲取STM32資料。廣州市星翼電子科技有限公司 作者:正點原子 @ALIENTEK ************************************************/void Delay(u32 count){u32 i=0;for(;i<count;i++);}int main(void){ GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); //使能PB,PE端口時鐘GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-->PB.5 端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHzGPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIOB.5GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5 輸出高GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1-->PE.5推挽輸出GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化GPIOGPIO_SetBits(GPIOE,GPIO_Pin_5); //PE.5 輸出高 while(1){GPIO_ResetBits(GPIOB,GPIO_Pin_5);GPIO_SetBits(GPIOE,GPIO_Pin_5);Delay(3000000);GPIO_SetBits(GPIOB,GPIO_Pin_5);GPIO_ResetBits(GPIOE,GPIO_Pin_5);Delay(3000000); }}工程創建完畢
總結
以上是生活随笔為你收集整理的STM32精英版(正点原子STM32F103ZET6开发板)学习篇1——新建库函数模版的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DM365的BSP源码分析-基于2.6.
- 下一篇: iOS OC语言: Block底层实现原