存儲器與寄存器介紹
阿新 • • 發佈:2019-03-08
程序 eight wid 分享圖片 內容 還需要 通過 端口 語言 本講主要內容
1.什麽是存儲器映射
2.什麽是寄存器及寄存器映射
3.如何訪問STM32寄存器內容 1.什麽是存儲器映射
存儲器本身不具有地址信息,它的地址是由芯片廠商或
用戶分配,給存儲器分配地址的過程稱為存儲器映射,如果
再分配一個地址就叫重映射(具體地址分配參考芯片數據手
冊及中文參考手冊) 訪問STM32寄存器也就是操作STM32的內存單元,根據C語言
指針的特點,可以使用指針來操作STM32的內存單元。
假如我們要讓STM32的GPIOC的第0管腳輸出低電平,我
們怎麽使用C語言來處理?
首先我們要知道GPIOC掛接在哪個總線上,需要知道其地
址,STM32總線地址如下:
#define PERIPH_BASE ((unsigned int)0x40000000)
然後分別定義APB2總線基地址:
#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000) 然後還需要知道端口外設地址,
同樣使用C語言宏定義其端口地址:
#define GPIOC_BASE (APB2PERIPH_BASE + 0x1000)
置 1)
GPIOC_BSRR = (0x01<<(16+0));
控制 GPIOC 引腳 0 輸出高電平(即通過BSRR 寄存器的 BS0
置 1)
GPIOC_BSRR = 0x01<<0; 讀取GPIOC端口所有引腳的電平(讀 IDR 寄存器)
unsigned int temp;
temp = GPIOC_IDR; 我們這裏僅僅以GPIO這個外設為例,給大家講解了如何
使用C語言對寄存器封裝的,對於其他的外設也是使用同樣
方法。其實到了後面的實驗程序的編寫時,我們都是使用ST
公司提供的固件庫,他把STM32所有外設都已經封裝好了,
我們這裏分析這個封裝過程只是想讓大家更加清楚理解如何
使用C來封裝寄存器的。
2.什麽是寄存器及寄存器映射
3.如何訪問STM32寄存器內容 1.什麽是存儲器映射
存儲器本身不具有地址信息,它的地址是由芯片廠商或
用戶分配,給存儲器分配地址的過程稱為存儲器映射,如果
再分配一個地址就叫重映射(具體地址分配參考芯片數據手
冊及中文參考手冊)
2.什麽是寄存器及寄存器映射
通過給有特定功能的內存單元起一個別名,這個別名就是
我們所說的寄存器。給已經分配好地址的有特定功能的內存
單元起別名的過程就叫寄存器映射
3.如何訪問STM32寄存器內容
我們知道寄存器就是一些有特定功能的內存單元,所以要
指針的特點,可以使用指針來操作STM32的內存單元。
假如我們要讓STM32的GPIOC的第0管腳輸出低電平,我
們怎麽使用C語言來處理?
首先我們要知道GPIOC掛接在哪個總線上,需要知道其地
址,STM32總線地址如下:
所以使用C語言宏可以定義外設基地址:
#define PERIPH_BASE ((unsigned int)0x40000000)
然後分別定義APB2總線基地址:
#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000) 然後還需要知道端口外設地址,
同樣使用C語言宏定義其端口地址:
有了外設端口地址後,還需要知道GPIOC端口的寄存器地址,
如下表格:
同樣使用C語言宏定義其端口寄存器地址:
#define GPIOC_CRL *(unsigned int*)(GPIOC_BASE+0x00) #define GPIOC_CRH *(unsigned int*)(GPIOC_BASE+0x04) #define GPIOC_IDR *(unsigned int*)(GPIOC_BASE+0x08) #defineGPIOC_ODR *(unsigned int*)(GPIOC_BASE+0x0C) #define GPIOC_BSRR *(unsigned int*)(GPIOC_BASE+0x10) #define GPIOC_BRR *(unsigned int*)(GPIOC_BASE+0x14) #define GPIOC_LCKR *(unsigned int*)(GPIOC_BASE+0x18)
控制 GPIOC 引腳 0 輸出低電平(即通過BSRR 寄存器的 BR0
置 1)
GPIOC_BSRR = (0x01<<(16+0));
控制 GPIOC 引腳 0 輸出高電平(即通過BSRR 寄存器的 BS0
置 1)
GPIOC_BSRR = 0x01<<0; 讀取GPIOC端口所有引腳的電平(讀 IDR 寄存器)
unsigned int temp;
temp = GPIOC_IDR; 我們這裏僅僅以GPIO這個外設為例,給大家講解了如何
使用C語言對寄存器封裝的,對於其他的外設也是使用同樣
方法。其實到了後面的實驗程序的編寫時,我們都是使用ST
公司提供的固件庫,他把STM32所有外設都已經封裝好了,
我們這裏分析這個封裝過程只是想讓大家更加清楚理解如何
使用C來封裝寄存器的。
存儲器與寄存器介紹