在core_cm3.c文件中有關於類型的定義
Core_cm3.c與啓動文件一樣都是底層文件
Ststem_stm32f10x.c文件是用來設置系統時鐘和總線時鐘 實現系統時鐘的時候要用到
PLL(鎖相環),需要操作寄存器。寄存器十一存儲器映射的方式訪問的。所以
這個c文件需包含stm32f10x.h
Stm32f10x.h包含了 stm32中的寄存器地址和結構體類型定義。
啓動文件的作用:
初始化堆棧指針sp
初始化程序計數器指針pc
設置堆、棧的大小。
設置異常向量表的入口地址
配置外部SRAM作爲數據存儲器
設置C庫的分支入口__main
調用了ststem_stm32f10x.c文件中的SystemIni()函數配置系統時鐘
Stm32f10x_it.c是專門寫中斷服務函數的,定義了一些系統異常的接口
其他的普通中斷函數由我們自己添加
Stm32f10x_conf.h 文件被包含進了stm32f10x.h.用來配置使用了哪些外設的
頭文件,可以把用不到的頭文件註釋掉
PERIPH_BASE = 0x40000000, 0x40000000這個地址是偏上512Mb尋址空間的第一個地址。即外設基地址、
APB2PERIPH_BASE = PERIPH_BASE + 0x10000.因爲stm32的不同外設掛在不同的總線上。Stm32有AHB總線、APB2總線、和APB2總線。
那APB2PERIPH_BASE爲APB2總線外設基地址、
APB1 = 0x40000000
AHB = 0x40018000
STM32 參考手冊的各個寄存器左上角一般有。地址偏移
這個地址偏移。這就是該寄存器組對應所在寄存器組基地址的偏移量。
Stm32爲了實現低功耗, 設計了一個功能完善但非常複雜的時鐘系統。普通的MCU一般只要設置好GPIO寄存器就可以使用了,但是STM32還有一個步驟就是開啓外設時鐘。
STM32有4個時鐘源
1.高速外部時鐘(HSE):以外部晶振作爲時鐘源,晶振頻率可取範圍爲4~16MHz
2.高速內部時鐘(HSI):由內部RC振盪器產生,頻率爲8MHz,不穩定
3.低速外部時鐘(LSE):以外部晶振作爲時鐘源,主要提供給實時時鐘模塊,所以一般採用 32.768kHz。
4.低速內部時鐘(LSI):由內部RC振盪器產生,也提供給實時時鐘模塊,頻率大約40kHz。
與我們開發密切相關的時鐘。
1.SYSCLK:系統時鐘,是STM32大部分器件的時鐘來源, 主要由AHB預分頻器分配到各個部件
2.HCLK: 有AHB預分頻器直接輸出得到, 他是高速總線AHB的時鐘信號, 提供給存儲器、DMA及Cortex內核, 是Cortex內核運行的時鐘,CPU主頻就是這個信號,它的大小與STM32運算速度、數據存取速度密切相關。
3.FCLK:同樣由AHB預分頻器輸出得到,是內核的“自由運行時鐘”。 “自由”表現在它不來自時鐘HCLK, 因此在HCLK時鐘停止時FCLK也繼續運行。它的存在可以保證,在處理其休眠時也能夠採樣到終端和跟蹤事件,它與HCLK互動同步。
4.PCLK1: 外設時鐘, 由APB1預分頻器輸出得到,最大分頻爲36MHz, 提供給掛載在APB1總線上的外設。
5.PCLK2: 外設時鐘, 由APB2預分頻器輸出得到,最大分頻爲36MHz, 提供給掛載在APB2總線上的外設。
每個外設都配備有外設時鐘的開關, 當不使用某個設備時, 可以把這個外設時鐘關閉, 從而降低功耗, 所以,當我們使用外設的時候就要記得開啓外設時鐘。