stm32f10x_con.h
配置檔案:載入哪個外設、使能assert 對引數進行檢查,如果使能了assert 需要在main檔案中新增 _assert_faild 函式。 使能assert會增大編譯出執行檔案的大小,除錯完後可以將assert 遮蔽。
stm32f10x.h標頭檔案中包含了stm32f10x_conf.h 。
stm32f10x.h
1、對所有的外設的位址進行對映,對映到儲存區,即定義某外設結構體變數,因為結構體是連續儲存的只要將外設的基位址強制轉換為結構體型別的指標,那麼該外設的暫存器就可以通過指標進行訪問,以gpio為例:
定義外設的結構體,結構體變數都是volatile型別,告訴編譯器不要進行優化,讀取值從記憶體讀取不要讀快取。
typedef struct
gpio_typedef;
gpio外設的位址
#define periph_base ((uint32_t)0x40000000) //外設別名區的基位址
#define apb2periph_base (periph_base + 0x10000) // apb2外設匯流排上暫存器的基位址,gpio掛在apb2匯流排上
// gpio外設的位址
#define gpioa_base (apb2periph_base + 0x0800)
#define gpiob_base (apb2periph_base + 0x0c00)
#define gpioc_base (apb2periph_base + 0x1000)
#define gpiod_base (apb2periph_base + 0x1400)
#define gpioe_base (apb2periph_base + 0x1800)
#define gpiof_base (apb2periph_base + 0x1c00)
#define gpiog_base (apb2periph_base + 0x2000)
// 將外設位址強制轉化為結構體的指標,然後就可以通過指標gpiox區訪問某個埠中的暫存器
#define gpioa ((gpio_typedef *) gpioa_base)
#define gpiob ((gpio_typedef *) gpiob_base)
#define gpioc ((gpio_typedef *) gpioc_base)
#define gpiod ((gpio_typedef *) gpiod_base)
#define gpioe ((gpio_typedef *) gpioe_base)
#define gpiof ((gpio_typedef *) gpiof_base)
#define gpiog ((gpio_typedef *) gpiog_base)
2、外設暫存器位的定義
core_cm3.c檔案
核心相關的變數和函式的定義:nvic、systick、mpu(有的mcu沒有)、除錯元件
1、nvic相關的變數和函式。
中斷向量的使能_(我理解相當於全域性中斷的使能)
中斷向量的禁止
中斷向量的掛起
清除掛起的中斷
設定中斷的優先順序
讀取中斷的優先順序
2、systick定時器的配置,static __inline uint32_t systick_config(uint32_t ticks);用來使能中斷、開啟systick定時器。
系統滴答定時器的配置,具體的systick 的介紹在cortex-m3 技術手冊中有介紹。
system_stm32f10x.c
scb->vtor = flash_base | vect_tab_offset;
當在mdk中改變燒寫程式irom的位址時flash_base 的位址要改為irom的位址,如果改為函式void nvic_setvectortable(uint32_t nvic_vecttab, uint32_t offset);修改nvic_vecttab_flash 的位址,實際上這兩種設定向量表的方法是一樣的,都要修改向量表的基位址。
偏移量預設偏移量是0,從**區啟動則向量表的位址0x0800 0000,0x0800 0000儲存的是堆疊棧頂的位址,**區的燒寫位址在mdk軟體中設定。
iap遠端公升級能用到這部分的內容,可以參考正點原子的教程。
misc.c
1、void nvic_setvectortable(uint32_t nvic_vecttab, uint32_t offset);函式用來設定中斷向量表的位置:sram or flash 預設是在flash中,偏移量必須是0x200的整數倍。
2、nvic中斷管理的函式,使能、分組等。
3、scb system control block 系統控制塊
系統控制塊結構體包含了:
startup_stm32f10x_md.s
啟動檔案,啟動檔案中定義了該型別mcu堆的大小和棧的大小,還有中斷向量表。中斷向量表通過偽指令分配了各個中斷入口函式,在程式進行鏈結時就會把中斷向量表中偽指令中斷函式分配實際的flash位址。
STM32 啟動檔案功能簡述
r8t6使用的md.s,中容量的arm晶元,大致的啟動內容如下 startup stm32f10x hd.s 是乙個啟動檔案,裡面是使用組合語言寫好的基本程式,當stm32 晶元上電啟動的時候,受限會執行這裡的匯程式設計序,從而建立起來c 語言的執行環境,所以我們把這個檔案稱為啟動檔案。改檔案使用的...
STM32中防止標頭檔案重複包含
在 stm32 標準庫的所有標頭檔案以及我們自己編寫的 bsp led.h 標頭檔案中,可看到類 似 清單 12 9 的巨集定義。它的功能是防止標頭檔案被重複包含,避免引起編譯錯誤。清單 12 9 防止標頭檔案重複包含的巨集 1 ifndef led h 2 define led h 3 4 此處省...
Opencv2 4 9各標頭檔案功能說明
opencv open source computer vision library 乙個遵循bsd協議的計算機視覺技術開源庫,包含了幾百個計算機視覺演算法。目前最新版本應該是opencv3.0,alpha版和beta版都有了,我目前是用的2.4.9,3.0版本貌似有不少3d還有gpu相關的更新,很...