IAR EW6.30版本下建立STM32工程(芯片型号STM32F105VC)
參考博客及文檔有:
1,http://www.cnblogs.com/ele-eye/archive/2011/11/28/2266229.html
? ? ? ? 2,http://www.cnblogs.com/king-77024128/articles/2512997.html(CMSIS介紹)
? ? ? ? 3, ??http://wenku.baidu.com/link?url=2blE__GxI1lmJglihBi5xJQPolza-NMxcZqGThxwysiY80ZOe6hLl5k6mowbTN2j30WsPftFZsBe1pRt8WlCDIT7Ce5EIReo4uGCEyegh7S(IAR 新建 STM32工程)
? ? ? ? 4,http://blog.sina.com.cn/s/blog_4c8287230100f0jw.html(IAR 新建 STM32工程)
? ? ? ? 5,http://blog.sina.com.cn/s/blog_4c8287230100eznh.html(IAR使用說明)
? ? ? ? 6,http://blog.sina.com.cn/s/blog_4c8287230100f2ah.html(IAR使用說明 第一個IAR項目)
? ? ? ? 7,http://blog.chinaunix.net/uid-26435987-id-3073074.html(啟動代碼和bootloader的關系)
? ? ? ?建立工程之前首先應知道IAR EW6.30版本較IAR EW6.20之前的版本有一個較大的改變。即IAR EW6.30已經植入了Cortex-m3的內核相關定義,所以在建立工程時就不需要添加ST庫中core_cm3.c 和 core_cm3.h 這兩個文件了。不過需在配置IAR EW選項是需勾選"Options - General Options - Library Configuration"界面下的Use CMSIS。如圖:
? ? ? ? ? ?建立工程前先介紹下相關文件夾及源文件:
? ? ? ? ?CMSIS:ARM定制的一個Cortex_M系列微控制器軟件接口標準(Cortex MicroController Software Interface Standard的縮寫)。主要是為了提供通用api接口來訪問內核和一些片上外設。提高代碼的可移植性。CMSIS有三個層:核內外設訪問層Core Peripheral Access Layer(CPAL),中間件(是一種獨立的系統軟件或服務程序如FatFS)訪問層Middleware Access Layer(MWAL),設備訪問層(Device Peripheral Access Layer)。CPAL用于訪問內核的寄存器和組件,如NVIC,調試系統等,該層是由ARM實現的。MWAL用于對中間件的訪問,現在該層還未實現。DPAL用于定義一些硬件寄存器的地址和一些外設訪問函數,由芯片制造商實現。CPAL的實現就是core_cm3.c,core_cm3.h文件。DPAL層實現的就是system_stm32f10x.c的文件(似乎還要加上外設的函數庫)。
? ? ? ?stm32f10x_flash.icf:編譯器鏈接庫文件,修改兩個參數即可改變代碼存放的地址空間。
? ? ? ?startup_stm32f10x_cl.s:stm32f105vc在IAR編譯器環境下專業的啟動文件。啟動文件用英文單詞來描述為“Bootloader”。無論性能高下,結構簡繁,價格貴賤,每一種微控制器(處理器)都必須有啟動文件,啟動文件的作用便是負責執行微控制器從“復位”到“開始執行main函數”中間這段時間(稱為啟動過程)所必須進行的工作。開發環境往往自動完整地提供了這個啟動文件,不需要開發人員再行干預啟動過程,只需要從main函數開始進行應用程序的設計即可。由開發環境及啟動文件可知:STM32的啟動過程。首先對棧和堆的大小進行定義,并在代碼區的起始處建立中斷向量表,其第一個表項是棧頂地址,第二個表項是復位中斷服務入口地址。然后在復位中斷服務程序中跳轉??C/C++標準實時庫的__main函數,完成用戶堆棧等的初始化后,跳轉.c文件中的main函數開始執行C程序。假設STM32被設置為從內部FLASH啟動(這也是最常見的一種情況),中斷向量表起始地位為0x8000000,則棧頂地址存放于0x8000000處,而復位中斷服務入口地址存放于0x8000004處。當STM32遇到復位信號后,則從0x80000004處取出復位中斷服務入口地址,繼而執行復位中斷服務程序,然后跳轉__main函數,最后進入mian函數,來到C的世界。
? ? ? ? ?bootloader:不是一段代碼,它是一個具有引導裝載功能的完整程序,如可以引導裝載linux的vivi或uboot,以及通常PC機上的BIOS程序等。Bootloader也包含了相應的啟動代碼,也就是說啟動代碼是Bootloader的一部分,是所有相應應用程序的一部分。
? ? ??system_stm32f10x.c/.h:設置系統以及總線時鐘,這個里面有個非常重要的SystemInit()函數,這個函數在我們系統啟動的時候都會調用,用來設置系統的整個時鐘系統。不知從哪個版本開始該函數被加入了啟動文件中,可在啟動文件查找。所以我們不需使用該函數了。系統主頻時鐘(主頻率)的改變依實際芯片主頻修改,如圖:
? ? ??
? ? ??stm32f10x.h:這個文件相當重要,只要你做STM32開發,你幾乎時刻都要查看這個文件的相關定義。這個文件打開可以看到,里面非常多的結構體以及宏定義。這個文件里面主要是系統寄存器定義聲明以及包裝內存操作。外部時鐘頻率在該文件里改變,如圖:
? ? ? ?你外部晶振使用多少HZ,就改變為多少。
? ? ?misc.c:定義了中斷向量表初始位置。對比ARM7/ARM9內核(復位后起始地址固定0x000000,中斷向量表位置不固定),Cortex_M3則是固定了中斷向量表的位置(若FLASH啟動,復位后中斷向量位置固定在0x08000000.),而程序起始地址(程序被安置的地址)是可變化的。編譯器鏈接器分配了中斷向量表實際放置的地址。所以cm3中斷向量表初始位置不可變,程序起始地址可改變(對CPU來說)。如圖: misc.c
? ? ??
? ? ? 如圖啟動文件內修改當前程序的開始地址(內部flash啟動時即ROM_start的地址):
? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ??下面開始建立工程:
? ? ? ???1,打開IAR EW。
? ? ? ? ? ? 2,點選“File --- New --- ?Workspace”創建一個工作區。創建工作區先新建一個文件夾,我在E盤新建一個名為IAR_Pro的文件夾,作為工作空間。然后在該文件夾下再新建一個名為Project1的工程文件夾,一會要在此目錄下新建工程。
? ?
? ? ? ? ? ?3,點選“Project --- Create New Project”。彈窗后Tool Chain選擇ARM,Project templates選擇Empty project。點擊OK,后彈出另存為窗口。選擇文件路徑為工作空間路徑“E:\IAR_Pro\Project1”。填寫文件名為NEW_Project,即工程名。
? ? ? ? ? ?4,在“E:\IAR_Pro”文件夾下新建USER,CMSIS,STM32F10x_FWLIB這三個文件夾。USER存放用戶實現的代碼如main.c和stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h,system_stm32f10x.c。CMSIS存放cm3的內核文件及啟動文件和stm32f10x.h和system_stm32f10x.h,這里只存放啟動文件startup_stm32f10x_cl.s。STM32F10x_FWLIB存放ST官方提供的標準庫文件。?
? ? ? ? ? ?5,將IAR 鏈接腳本文件stm32f10x_flash.icf添加到Project1目錄下。
? ? ? ? ? ?6,將上述文件都添加到IAR 工程里。如圖:
? ? ? ? ? ?
? ? ? ? ? ?7,配置編譯器選項。右擊工程名選擇Options。
? ? ? ? ? (1)配置General Options。如圖:
? ? ? ? ? ??
? ? ? ? ? ?
? ? ? ? ? ?(2)配置C/C++ Compiler。點擊Optimization(最優化)選擇 High,如圖:
? ? ? ? ? ? ?
? ? ? ? ? ? ?點擊Option--C/C++ Compiler--Preprocessor下添加頭文件路徑及相應宏定義符號例如USE_STDPERIPH_DRIVER和STM32F10X_CL(互聯型)。如圖:
? ? ? ? ? ? ??
? ? ? ? ? ? ?(3)配置Output Converter,如圖:
? ? ? ? ? ? ? ?
? ? ? ? ? ? ? (4)配置Linker。如圖:
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? 路徑可改為$PROJ_DIR$\stm32f10x_flash.icf。增加可移植性。
? ? ? ? ? ? ?(5)配置Debugger。如圖:
? ? ? ? ? ? ??
? ? ? ? ? ? ??
? ? ? ? ? ? ? 以上配置開發環境OK。編譯OK,使用的是3.5庫ADC1_DMA文件夾里的main.c,編譯OK,如圖:
? ? ? ? ? ? ??
? ? ? ??? ?Cortex-M3內核規定,起始地址必須存放堆頂指針,而第二個地址則必須存放復位中斷入口向量地址,這樣在Cortex-M3內核復位后,會自動從起始地址的下一個32位空間取出復位中斷入口向量,跳轉執行復位中斷服務程序。
? ? ? ? ? ??查看IAR編譯器編譯后的匯編代碼===================================
編輯界面右擊工程名,點擊Options選項,選擇c/c++ compiler選項中的list選項,勾選output assembler files,編譯后生產離線匯編代碼文件。
調試界面下,點擊view/disassembly菜單項,則顯示在線匯編代碼窗口。
在線調試,需將Debugger選項下Setup下的Driver改為simulator模擬器,run to到你想到的地方。然后點擊Download and Debug
產生map文件================================================、
Options--linker--list --- Generate linker map file
仿真器作用=================================================
仿真器是在程序運行時,用來觀察寄存器里的數值的。比如說你定義了一個變量,程序運行過程中這個變量會變化。當你需要確定當前值時候,可以用仿真器看到。
所以,如果做大工程,仿真器是必不可少的。如果是很小的代碼,可以不用仿真器,用串口直接下載程序就OK了。?
硬件仿真與軟件仿真區別=======================================
硬件仿真依賴實際的硬件實物,程序是運行在實際的cpu中的,讀取到的任何數值、狀態都是實際的現有狀態,一旦能通那基本就沒問題了。
軟件仿真是在pc上用軟件模擬了硬件cpu的各種功能、寄存器等,不依賴實際的硬件,其實可以看成是多個函數,你寫的程序是多個輸入,有一個輸入,對應的函數就輸出相應的結果。
軟件仿真即使成功,實際下載到硬件上也有可能會出問題,比如電源、晶振這些都是沒法仿真的。?
總結
以上是生活随笔為你收集整理的IAR EW6.30版本下建立STM32工程(芯片型号STM32F105VC)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 将一个数组中的字符串用指定字符分割开,分
- 下一篇: STM32库中几个重要的文件说明