1. 對映即將記憶體的某段位址與某一暫存器對應,微控制器對函式的操作底層是操作暫存器,而暫存器最終是操作記憶體上對應的單元,
2. 各個暫存器對應的位址都是在st定義的起始位址上層層偏移得到
3. 想要實現某功能可直接對此段記憶體寫進相應的值,即可賦予某一功能
4. stm32底層實際是先定義出外設基位址,然後由基位址進行偏移得到不同的外設位址
5. 因為stm32的暫存器大多數是32bit位,且某一功能外設的暫存器位址常常是連貫的,因此只需要定義出暫存器基位址,然後強制轉 換為某一結構體型別,此結構體內包含一組暫存器,即可定義一組外設的功能
6. 庫函式內部呼叫暫存器
7. stm32庫函式解析:
定義記憶體基位址 -> 將記憶體基位址轉換為想要的指標型別,如gpio結構體型別
8. 操作記憶體,操作暫存器,操作庫函式實現gpio輸出低示例
main檔案:
include "stm32f10x.h"
#include "stm32f10x_gpio.h"
int main(void)
void systeminit(void)
記憶體位址對映檔案:
#ifndef __stm32f10x_h
#define __stm32f10x_h
typedef unsigned int uint32_t;
typedef unsigned short int uint16_t;
#define __io volatile
typedef struct
gpio_typedef;
typedef struct
rcc_typedefinit;
#define periph_base (0x40000000u)//外設基位址
#define apb1periph_base periph_base//apb1基位址
#define apb2periph_base (periph_base + 0x10000u)//apb2基位址
#define ahbperiph_base (periph_base + 0x20000u)
#define rcc_base (periph_base + 0x20000u)
#define gpioa ((gpio_typedef *)(periph_base + 0x10800u))
#define gpiob ((gpio_typedef *)(periph_base + 0x10c00u))
#define gpioc ((gpio_typedef *)(periph_base + 0x11000u))
#define gpiod ((gpio_typedef *)(periph_base + 0x11400u))
#define gpioe ((gpio_typedef *)(periph_base + 0x11800u))
#define rcc ((rcc_typedefinit *)rcc_base)
#define rcc_apb2clk_enr (rcc->apb2enr |= 1 << 3)
#endif
gpio初始化標頭檔案
#ifndef __stm32f10x_gpio_h
#define __stm32f10x_gpio_h
#include "stm32f10x.h"
#define gpio_pin_0 ((uint16_t)0x0001u)
#define gpio_pin_1 ((uint16_t)0x0002u)
#define gpio_pin_2 ((uint16_t)0x0003u)
#define gpio_pin_3 ((uint16_t)0x0004u)
#define gpio_pin_5 ((uint16_t)0x0005u)
#define gpio_pin_6 ((uint16_t)0x0006u)
#define gpio_pin_7 ((uint16_t)0x0007u)
#define gpio_pin_8 ((uint16_t)0x0008u)
#define gpio_pin_9 ((uint16_t)0x0009u)
#define gpio_pin_10 ((uint16_t)0x000au)
#define gpio_pin_11 ((uint16_t)0x000bu)
#define gpio_pin_12 ((uint16_t)0x000cu)
#define gpio_pin_13 ((uint16_t)0x000du)
#define gpio_pin_14 ((uint16_t)0x000eu)
#define gpio_pin_15 ((uint16_t)0x000fu)
typedef enum
gpiospeed_typedef;
typedef enum
gpiomode_typedef;
typedef struct
gpio_inittypedef;
void gpio_init(gpio_typedef* gpiox, gpio_inittypedef* gpio_initstruct);
void gpio_resetbit(gpio_typedef *gpiox, uint16_t gpio_pin);
void gpio_setbit(gpio_typedef *gpiox, uint16_t gpio_pin);
#endif
STM32儲存器對映和暫存器對映
對於cortex m3來講,有一塊4g大小的儲存器空間。儲存器對映指的是晶元廠商為這個空間分配位址的操作。這4g空間被均勻地劃分為8個大小為512mb的儲存塊 block 並且每個塊都各具特色。下面主要介紹block1 block2。flash 起始位址為0x0800 0000,存放使用者程式和掉電...
筆記 STM32暫存器位址對映
例如 struct student p p可以指向struct student 型別的變數或陣列元素 例題 main stu1 pstu stu1 讀取結構體成員的值 printf s的學號是 d,年齡是 d,在 c組,今年的成績是 1f!n pstu name,pstu num,pstu age,...
STM32蜂鳴器 暫存器
這次實驗犯了個笑話,竟然在巨集定義後面加分號.就像這樣 define 大家千萬不要學我,結果報錯expected expression,還苦惱半天,想為啥操作不了暫存器了?我真愚蠢!剛開始我也不會寫這些東西,其實摸清套路就好,rcc時鐘使能 gpio初始化 相關暫存器初始化 延時函式 串列埠等初始化...