前面把基礎(chǔ)部分講得差不多,比如說(shuō)什么是寄存器,寄存器映射,怎么樣來(lái)寄存器編程,寄存器編程的時(shí)候應(yīng)該參考官方的什么手冊(cè),
前面講了什么是寄存器 怎么使用寄存器編程 寄存器編程的時(shí)候應(yīng)該 參考哪些手冊(cè) 接下來(lái)我們開始利用固件庫(kù)編程,今天開始從 最底層開始寫庫(kù)函數(shù) 《在零死角玩轉(zhuǎn)STM32》 第九章 l利用我們上節(jié)課的歷程 下面這些是7個(gè)GPIO口的寄存器映射我們到GPIO口的寄存器映射,這些是最底層的東西,我們基本上已經(jīng)學(xué)會(huì)了,那么接下來(lái)我們 進(jìn)入固件庫(kù)編程在真正進(jìn)入固件庫(kù)編程之前,我們應(yīng)該了解固件庫(kù)與寄存器的聯(lián)系,參考《零死角玩轉(zhuǎn)STM32F103-霸道》第九章 自己寫庫(kù)構(gòu)建庫(kù)函數(shù)雛形針對(duì)霸道 和指南者
上圖是我們上節(jié)課的歷程,是我們對(duì)上節(jié)課 寄存器的映射,每一個(gè)寄存器都實(shí)現(xiàn)了寄存器的映射,GPIO口的寄存器有7個(gè),但是如果寄存器多的話,這樣的代碼要寫好多 就不太方便了,那么今天就要來(lái)對(duì)他進(jìn)行優(yōu)化
我們來(lái)看一下上圖中的寄存器映射,比如說(shuō)我們要操作GPIOB ,那么就要操作 端口B外設(shè)的基地址 :GPIOB_BASE,地址在C語(yǔ)言里就是指針,而且他是32位的,那么他就指向了4個(gè)字節(jié)的內(nèi)存,那么我們的 GPIOB_BASE就指向GPIOB的第一個(gè)地址,那么如果我們操作 GPIOB_BASE 這個(gè)指針,那么他訪問(wèn)的就是CRL這個(gè)寄存器,而且我們可以看到這些寄存器都是有規(guī)律的分布的,地址都是以4個(gè)字節(jié)遞增,這個(gè)就跟C語(yǔ)言當(dāng)中的結(jié)構(gòu)體是類似的,因此我們?cè)?nbsp; 定義一個(gè)結(jié)構(gòu)體,這個(gè)結(jié)構(gòu)體也有7個(gè)成員,類型叫做 GPIO_Type,我們剛剛說(shuō)了GPIOB_BASE 是一個(gè)32位的通過(guò)我們這個(gè)指針?biāo)荒茉L問(wèn)4個(gè)字節(jié)的內(nèi)存,那么如果說(shuō)我們想基于這個(gè)地址來(lái)訪問(wèn)GPIO的所有寄存器的話,該怎么辦呢?如果GPIOB_BASE 這個(gè)指針是下圖中的GPIO_Type的結(jié)構(gòu)體類型的話,它就可以訪問(wèn)GPIO的所有寄存器的話了,所以說(shuō)如果我這個(gè)指針和外設(shè)的基地址是一樣的話那我們就可以通過(guò)一個(gè)結(jié)構(gòu)體的方式訪問(wèn)這個(gè)寄存器了,比起上節(jié)課講的每一個(gè)寄存器都要找到他的絕對(duì)地址這樣子要方便很多,那么怎樣將我們的GPIO_BASE轉(zhuǎn)化成GPIO_Type這種結(jié)構(gòu)體類型的指針呢? C語(yǔ)言當(dāng)中有一種 叫強(qiáng)制類型轉(zhuǎn)化
然后再將上面的類型定義成一個(gè)宏
那么這個(gè)GPIOB可以指向GPIO_Type的所有成員,這里只要GPIO_Type成員的名字對(duì)應(yīng)的實(shí)際地址不變那么,那么這個(gè)結(jié)構(gòu)體的成員名可以 隨便定義
以下的代碼中就是通過(guò)GPIOB的結(jié)構(gòu)體類型指針去訪問(wèn)他的成員變量,利用->這個(gè) 符號(hào)就可以指向他的各個(gè)成員。
總結(jié);實(shí)現(xiàn)結(jié)構(gòu)體方式訪問(wèn)的原理:1.先聲明一個(gè)結(jié)構(gòu)體,結(jié)構(gòu)體中包含很多成員, 結(jié)構(gòu)體成員的類型與分布的順序都與我們寄存器的排列方式是一樣的(上圖8.5中寄存器的排列方式與我們結(jié)構(gòu)體中的排列都是一致的,而且我們每一個(gè)寄存器都是u32類型的,與實(shí)際的寄存器大小一致,這樣就做到了結(jié)構(gòu)體GPIO_Type的成員與外設(shè)寄存器的一一對(duì)應(yīng))
2找到外設(shè)的基地址例如是GPIOB_BASE,然后把這個(gè)地址強(qiáng)制轉(zhuǎn)化成上面的結(jié)構(gòu)體類型
經(jīng)過(guò)強(qiáng)制類型轉(zhuǎn)換后,它就指向了GPIO_Type這里的所有成員,那么這樣我們就可以通過(guò)C語(yǔ)言的結(jié)構(gòu)體方式來(lái)操作stm32的所有外設(shè)。
上一篇:STM32的官方庫(kù)函數(shù)調(diào)用
下一篇:STM32F1系列——固件庫(kù)函數(shù)使用手冊(cè)摘要
推薦閱讀
史海拾趣
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無(wú)線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲(chǔ)html,css,js文件,以及網(wǎng)頁(yè)和arduino的通訊
- ESP32 freeRTOS使用測(cè)試
- API調(diào)用小記(Touchdesigner和ESP32)
- 關(guān)于ESP32/8266使用async-mqtt-client庫(kù)的一些基本介紹
- 特斯拉自動(dòng)駕駛?cè)蛲茝V遇阻,F(xiàn)SD于瑞典遭遇“封殺”
- Cadence 與三星晶圓代工就 SF2P 等制程達(dá)成新多年期 IP 協(xié)議
- Gartner:到2030年,守護(hù)代理將占據(jù)10%-15%的代理型AI市場(chǎng)份額
- 亞太地區(qū)金融行業(yè)遭受 DDoS 攻擊激增,年增幅高達(dá) 245%
- 2025 EDS 峰會(huì)群英匯聚 DigiKey 獲多家供應(yīng)商重磅獎(jiǎng)項(xiàng)
- 安森美亮相北京聽力學(xué)大會(huì),展示智能聽力技術(shù)領(lǐng)導(dǎo)力
- 為AR眼鏡等多種智能可穿戴設(shè)備添加穿戴狀態(tài)檢測(cè)功能
- KSC PF輕觸開關(guān)提供灌封友好型解決方案
- 正式發(fā)布本土化戰(zhàn)略,英飛凌猛攻中國(guó)市場(chǎng)
- 純視覺(jué)的自動(dòng)駕駛會(huì)有哪些安全問(wèn)題?
- 直播已結(jié)束【ST 寬禁帶高性能碳化硅(SiC)與氮化鎵(GaN)產(chǎn)品技術(shù)及不同應(yīng)用案例分享】(9:30入場(chǎng))
- 西門子直播:電子ODM/OEM 企業(yè),如何打造完整研發(fā)數(shù)字化管理能力?
- 免費(fèi)測(cè)評(píng)|ESP32-S2-Kaluga-1新型多媒體開發(fā)板,靈活拆裝,滿足多種需求
- 邀你聊一聊:學(xué)習(xí)MCU的正確方法和你的學(xué)習(xí)之路
- 開發(fā)板芯幣競(jìng)拍,每日一款!今日競(jìng)拍開發(fā)板:Banana PI D1
- 有獎(jiǎng)直播:Keysight World Tech Day 2024 汽車分論壇|汽車自動(dòng)駕駛與新能源
- 新書推薦《ARM Cortex-M0從這里開始 》
- 希望一月 愛(ài)上EEWORLD——論壇推廣月
- 華為云IoT物聯(lián)網(wǎng)平臺(tái)競(jìng)爭(zhēng)力位居國(guó)內(nèi)第一,全球第三
- 業(yè)內(nèi)人士:美國(guó)修改禁令只為扭轉(zhuǎn)5G劣勢(shì),非解封華為
- 芯片、AI與先進(jìn)制造的碰撞! 啟航基金項(xiàng)目路演直播啟動(dòng)
- 魅族17系列媒體評(píng)測(cè)機(jī)系統(tǒng)更新,全場(chǎng)景視頻防抖技術(shù)加持
- 給5G新基建助力,源杰半導(dǎo)體12波25G MWDM激光器芯片量產(chǎn)
- 17-基于51單片機(jī)的停車場(chǎng)車位管理系統(tǒng)
- 18-基于51單片機(jī)的噪聲測(cè)量?jī)x仿真
- 19-基于51單片機(jī)的溫濕度GSM上報(bào)
- 20-基于51單片機(jī)的遙控開關(guān)仿真
- 21-基于51單片機(jī)的遙控音樂(lè)系統(tǒng)仿真