一、使用固件庫建立一個工程
我打算先從軟件編程學(xué)起,以前用過KEIL 和IAR,IAR我比較熟悉,因為參加電子設(shè)計競賽的時候,就是用它編程MSP430程序的。但我還是選擇了KEIL,也許因為資料比較多,或者別的吧,我沒分析過KEIL 和IAR代碼效率如何,因為這不是我現(xiàn)在要考慮的,軟件都只是工具而已。
我去百度搜索了幾篇如何在KEIL MDK環(huán)境下建立STM32工程,加上自己的實踐。我也把我的初學(xué)者步驟貼出來。
1、了解STM32F103的固件庫
我在網(wǎng)上下了STM32F103的固件庫-----stm32f10x_stdperiph_lib 3.5V版的,里面內(nèi)容如圖所示,據(jù)說STM32F103和STM32F101都能用。

2、創(chuàng)建第一個工程
1.新建一個文件夾取名如 first_project,也可以建在桌面。

2.在里面新建 CMSIS ,libraries ,Libaries , List(用于鏈接的) , Obj(工程文件) , output (輸出hex文
件), User 文件夾;
3. 將固件庫里 Libraries--->STM32F10x_StdPeriph_Driver 下的 inc 和src 文件夾復(fù)
制到fisrt_project 文件夾下的libraries 里;
將固件庫里 Libraries--->CMSIS--->CM3--->CoreSupport文件夾里面的 core_cm3.c
和core_cm3.h 文件復(fù)制到我們新建的fisrt_project 文件夾下的CMSIS 里;
將固件庫里 Project---->STM32F10x_StdPeriph_Template(這個文件家里有KEIL和
IAR建好工程的模板)里的stm32f10x_conf.h , stm32f10x_it.c ,
stm32f10x_it.h , system_stm32f10x.c 四個文件 復(fù)制到我們新建的fisrt_project
文件夾下的User 里;
如下圖所示


4、打開keil uvision4 MDK , 在菜單欄里點擊project 選擇 new uVision project

5、保存工程名,選擇Obj文件夾, 文件名為first_project ,不用加后綴格式,系統(tǒng)默認(rèn)。

6、接下來會彈出讓你選擇器件的窗口,這里我們選擇 STmicroelectronics 的 STM32F103C8

7、最后會彈出是否復(fù)制啟動代碼的對話框,選擇YES;

3、 接下來就是管理工程文件了
1、在project窗口右鍵點擊Tagert 1 選擇 manage conponents 或者
找到倒數(shù)第二個 品字形圖標(biāo);
2、在Groups 框下面將Groups1 重命名為startup ,同時添加CMSIS, Libraries, User;
選擇CMSIS 在Files框下將CMSIS文件夾的core_cm3.c添加進去;
選擇Libraries在Files框下將Libraries--->src文件下的所以文件都加進去添加進去;
選擇User在Files框下將User文件下的所以文件都加進去添加進去;
如下圖所示:

3、工程構(gòu)架如下圖所示:

4、編寫main.c 和文件路徑
1、新建main.c 保存到User文件夾里,將其添加到User工程名下。
#include "stm32f10x.h"
int main(void)
{
while(1)
{;}
}
2、在project框下,右鍵點擊Target 1,選擇Options for Target target1

在output 選項下,在create HEX file 前打上鉤, 點擊select Folder for Objects 選擇輸出文
件夾為 output文件夾;
在Listing選項下,點擊select Folder for Listings 選擇鏈接文
件夾為 List文件夾;
在C/C++選項下, define里 填入 USE_STDPERIPH_DRIVER,STM32F10X_MD 中間用英
文的逗號;(一定要記得)
Include Paths 里,點擊右邊的文件路徑框 ,選擇相應(yīng)的CMSIS,
libraries 里的INC 和SRC 還有 User ;
也可以填絕對路徑,比如: C:\Users\Administrator\Desktop\STM32編程練習(xí)
\fisrt_project\CMSIS 這樣比較麻煩


3、好了,這下開始編譯鏈接:

0 Error , 0 Warring;
First_project 就建好了;萬里長征的第一步,總算走出去了。
4、總結(jié):關(guān)鍵是Option for target 的設(shè)置,包括output ,listing,和C/C++,尤其是C/C++這個選項里一定要設(shè)置對。
Define:USE_STDPERIPH_DRIVER,STM32F10X_MD,這是預(yù)定義的兩個宏定義。
在stm32f10x.h這個頭文件里搜索 USE_STDPERIPH_DRIVER 有這么一段
#ifdef USE_STDPERIPH_DRIVER
#include "stm32f10x_conf.h"
#endif
據(jù)說是定義控制了是否在應(yīng)用中啟用外設(shè)驅(qū)動。
在stm32f10x.h這個頭文件里搜索 STM32F10X_MD,
STM32中密度器件
#ifdef STM32F10X_MD
ADC1_2_IRQn = 18,
USB_HP_CAN1_TX_IRQn = 19,
USB_LP_CAN1_RX0_IRQn = 20,
CAN1_RX1_IRQn = 21,
CAN1_SCE_IRQn = 22,
EXTI9_5_IRQn = 23,
。
。
。
#endif 可能是定義中斷向量的值吧
就寫到這里,才發(fā)現(xiàn)我自己做也許一個兩個小時就能建好工程,但是要把寫出來我卻用了一個下午。為了大家跟我都盡快學(xué)會STM32,我會努力學(xué)習(xí)將成果與大家分享;
2013年12月25日
ps:
自我感覺寫得還是比較清楚,不懂的可以問我。另外可以去看一下李想的STM32的視頻。
理論夠硬,才能走得更遠(yuǎn)。 有問題,私信我。
本文轉(zhuǎn)自大俠 忙碌的小姚