999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

STM32和51單片機寄存器映射原理異同分析

2022-02-04 11:06:20
有色金屬設計 2022年4期
關鍵詞:單片機

楊 宇

(昆明冶金高等專科學校電氣與機械學院,云南 昆明 650033)

0 引 言

隨著社會生產力的發展,在嵌入式控制領域,32位高性能單片機的應用越來越廣泛。很多單片機開發者對于單片機的學習都是從8位低性能單片機開始的,8位低性能單片機和32位高性能單片機在很多方面存在差異,這使得許多想繼續學習32位高性能單片機的單片機開發者遇到了障礙。

8位低性能單片機的寄存器映射原理相對簡單,很多單片機開發者都能理解,但是他們對32位高性能單片機的寄存器映射原理往往理解不足,該文以這2種單片機的2種典型型號為例,即8位低性能單片機中的8051單片機,32位高性能單片機中的STM32F103單片機,將這2種單片機的寄存器映射原理進行對比分析,筆者認為這種比較式的闡述能幫助單片機開發者更好地理解32位高性能單片機的寄存器映射原理。正確理解寄存器映射的原理對于開發者進行STM32單片機后續內容的學習有極大的幫助。

1 2種單片機的寄存器映射

單片機寄存器是具有特定功能的單片機內部存儲器單元,所謂寄存器映射是指將每個寄存器單元的名稱和絕對地址對應起來,或者說給每個寄存器單元取1個名字,以便在編程時直接使用寄存器名稱來訪問寄存器單元,這樣可以讓編程更加方便,程序更加易讀。我們首先了解2種單片機寄存器映射完成后的結構圖(主要以編程時最常用的通用數據輸入輸出端口寄存器為例),再分析寄存器映射實現的原理。

8051單片機內部存儲器結構相對簡單,每個字節對應1存儲單元,每個存儲單元有唯一的地址,總共有256個字節,對應地址00H到FFH,寄存器位于高128字節,每個寄存器通常占1個字節,并對應不同的地址和名稱,見圖1,比如常用的4個通用數據輸入輸出端口P0到P3,每個端口對應1個寄存器:名稱P0對應地址為80H的寄存器,名稱P1對應地址為90H的寄存器,名稱P2對應地址為A0H的寄存器,名稱P3對應地址為B0H的寄存器,編程時只需操作名稱P0、P1、P2、P3就可以訪問相關寄存器單元。STM32F103單片機內部存儲器結構比較復雜,存儲單元個數也比較多,總共包含4 294 967 296個字節,每個字節對應1個存儲單元,每個存儲單元有唯一的地址,對應地址00000000H到FFFFFFFFH,見圖2,常用寄存器位于block2,地址范圍是40000000H到5FFFFFFFH,每個寄存器通常占4個字節(8 051單片機每個寄存器通常只占1個字節),block2中包含7個常用的通用數據輸入輸出口:PortA、PortB、PortC、PortD、PortE、PortF、PortG這7個名稱并不是每個端口的寄存器名稱,因為STM32F103單片機的每個通用數據輸入輸出口都包含7個寄存器(8 051單片機每個通用數據輸入輸出口只包含1個寄存器):端口配置低寄存器CRL、端口配置高寄存器CRH、數據輸入寄存器IDR、數據輸出寄存器ODR、位設置/清除寄存器BSRR、端口位清除寄存器BRR、端口配置鎖定寄存器LCKR,并且每個寄存器占4個字節的存儲空間,所以以B口(PortB)為例,它所包含的寄存器名稱為:GPIOB->CRL、GPIOB->CRH、GPIOB->IDR、GPIOB->ODR、GPIOB->BSRR、GPIOB->BRR、GPIOB->LCKR,以上寄存器名稱分別對應的寄存器地址為:0x40010C00、0x40010C04、0x40010C08、0x40010C0C、0x40010C10、0x40010C14、0x40010C18,編程時通過操作寄存器名稱訪問相關寄存器單元。

圖1 8 051單片機寄存器映射Fig.1 Register mapping of MCU8 051

圖2 STM32F103單片機寄存器映射Fig.2 Register mapping of STM32F103

2 2種單片機寄存器映射實現原理

8 051單片機和STM32F103單片機都是通過頭文件中的程序來實現寄存器映射的,8 051單片機使用的頭文件是reg51.h,STM32F103單片機使用的頭文件是STM32f10x.h,reg51.h文件是單片機開發軟件自帶的,而STM32f10x.h文件需要用戶創建。正確理解頭文件中的相關程序就能正確理解單片機實現寄存器映射的原理,上述2種單片機的寄存器映射程序差別很大,下面將主要分析和比較2種單片機寄存器映射的實現代碼。

2.1 8 051單片機寄存器映射實現原理

8 051單片機寄存器映射實現原理相對簡單,主要是通過C51編程語言中的關鍵字“SFR”和運算符“=”將寄存器的名稱和寄存器的絕對地址聯系起來,如圖3所示,編程時給寄存器名稱賦值就可以操作寄存器。以操作通用數據輸入輸出端口P1為例:如圖3中的語句sfr P1=0x90,P1是8051單片機通用數據輸入輸出端口1的名稱,0x90是該寄存器在內存中的絕對地址,可在圖1中找到。這樣在編寫應用程序時就可以直接使用P1來操作該端口,比如:想讓8 051單片機P1端口的8個引腳都輸出高電平,使用語句P1=0xFF就可以實現。操作其他的寄存器也是同樣的道理。

圖3 8 051單片機寄存器映射實現原理Fig.3 Register mapping principle of MCU8 051

2.2 STM32F103單片機寄存器映射實現原理

相較于8 051單片機,STM32F103單片機由于存儲器結構更復雜,存儲單元數量更多,并且程序中不能使用關鍵字SFR,所以STM32F103單片機寄存器映射實現原理比較復雜。還是以操作通用數據輸入輸出端口(GPIO)為例來闡述,由于STM32F103單片機的片內外設結構層級較多并且1個通用數據輸入輸出端口包含多個寄存器,所以映射實現代碼的思路是首先確定各個GPIO的基地址,然后將各個基地址轉換成一種合適的數據類型的指針。

(1)確定各個通用數據輸入輸出端口的基地址

STM32F103單片機的CPU是通過3種總線(APB1、APB2、AHB)來連接各種外圍設備的,通用數據輸入輸出端口連接在APB2總線上,1個通用數據輸入輸出端口包含多個寄存器。根據這種層級關系,某個通用數據輸入輸出端口的基地址是根據CPU的外設基地址(圖4中的PERIPH_BASE)、總線基地址(圖4中的APB2PERIPH_BASE)和偏移量(圖4中“+”號后的常量)來確定的。如圖4所示,用C語言關鍵字#define進行宏定義,將宏GPIOA_BASE、GPIOB_BASE、GPIOC_BASE、GPIOD_BASE、GPIOE_BASE、GPIOF_BASE、GPIOG_BASE定義成7個通用數據輸入輸出端口的絕對基地址,這7個絕對基地址分別對應圖2中PortA、PortB、PortC、PortD、PortE、PortF、PortG的首地址。

圖4 STM32F103單片機寄存器映射實現原理1Fig.4 Register mapping principle 1 of STM32F103

(2)把各個通用數據輸入輸出端口的基地址轉換成結構體型指針

STM32F103單片機包含7個通用數據輸入輸出端口,每個通用數據輸入輸出端口包含多個寄存器,如果確定7個通用數據輸入輸出端口的基地址之后,再根據每個通用數據輸入輸出端口中的各個寄存器(端口配置低寄存器CRL、端口配置高寄存器CRH、數據輸入寄存器IDR、數據輸出寄存器ODR、位設置/清除寄存器BSRR、端口位清除寄存器BRR、端口配置鎖定寄存器LCKR)的偏移地址得到各個寄存器的絕對地址,再將這些絕對地址使用#define進行宏定義,這種方法也可以實現各個寄存器的映射,但是重復性代碼量

過多,技術含量低,不是一種好方法。STM32F103單片1個通用數據輸入輸出端口包含多個寄存器這一特征可以使用C語言中的1種構造數據類型—結構體來表示,用結構體的名稱代表某個通用數據輸入輸出端口,用結構體的各個成員代表該通用數據輸入輸出端口的各個寄存器。圖5中的GPIO_TypeDef就是創建的1個結構體,該結構體的成員CRL代表端口配置低寄存器,成員CRH代表端口配置高寄存器,成員IDR代表數據輸入寄存器,成員ODR代表數據輸出寄存器,成員BSRR代表位設置/清除寄存器,成員BRR代表端口位清除寄存器,成員LCKR代表端口配置鎖定寄存器。將之前定義的各個通用數據輸入輸出端口基地址的宏強制轉換成GPIO_TypeDef型指針,最后用#define將宏GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG分別定義成7個通用數據輸入輸出端口的指向每個端口基地址的GPIO_TypeDef型指針,這樣就可以通過使用這些宏名稱加結構體成員名稱來操作各個通用數據輸入輸出端口的寄存器,比如使用語句GPIOB->ODR=0xFFFF就可以讓通用數據輸入輸出端口B對應的引腳輸出高電平。相比第一種方法,這種引入結構體的方法更加高效合理。操作其他的寄存器也是同樣的道理,這里就不贅述。

圖5 STM32F103單片機寄存器映射實現原理2Fig.5 Register mapping principle 2 of STM32F103

3 結 語

8 051單片機和STM32F103單片機的寄存器映射原理既有相同點又有差異性,對于單片機開發者來說,將兩者結合起來對比學習比單純學習STM32F103單片機的寄存器映射原理更容易理解,采用基地址結合結構體的方法能夠很好的實現STM32F103單片機的寄存器映射,一旦掌握了STM32單片機的寄存器映射原理,對于STM32單片機的寄存器編程和固件庫編程會有極大的幫助,能夠讓單片機開發者在編程時知其然并知其所以然。

猜你喜歡
單片機
基于單片機的SPWM控制逆變器的設計與實現
電子制作(2019年13期)2020-01-14 03:15:28
基于單片機的層次漸變暖燈的研究
電子制作(2019年15期)2019-08-27 01:12:10
基于單片機的多功能智能插排
電子制作(2019年11期)2019-07-04 00:34:48
基于單片機的便捷式LCF測量儀
電子制作(2019年9期)2019-05-30 09:42:02
小議PLC與單片機之間的串行通信及應用
電子制作(2018年12期)2018-08-01 00:48:04
MSP430單片機在仿真中要注意的幾點問題
電子制作(2017年9期)2017-04-17 03:00:53
基于單片機的平衡控制系統設計
電子制作(2017年19期)2017-02-02 07:08:27
基于單片機的三維LED點陣設計
電子制作(2016年21期)2016-05-17 03:52:51
Microchip推出兩個全新PIC單片機系列
基于Proteus的單片機控制系統的仿真設計
主站蜘蛛池模板: 亚欧美国产综合| 大学生久久香蕉国产线观看| 久久久久亚洲AV成人网站软件| 精品少妇人妻无码久久| 国产91成人| 欧美一级爱操视频| 色综合成人| 在线中文字幕网| 97一区二区在线播放| www成人国产在线观看网站| 国产自无码视频在线观看| 2021国产v亚洲v天堂无码| 国产最新无码专区在线| 免费看美女毛片| 亚洲欧美另类中文字幕| 亚洲伦理一区二区| 国产精品yjizz视频网一二区| 91极品美女高潮叫床在线观看| 伊人五月丁香综合AⅤ| 丁香婷婷激情综合激情| 亚洲V日韩V无码一区二区| 国产AV毛片| 亚洲一区二区日韩欧美gif| 亚洲VA中文字幕| 色呦呦手机在线精品| 国产精品成人观看视频国产| 亚洲国产成人精品青青草原| 成年人福利视频| 国产美女无遮挡免费视频网站| 欧美精品成人一区二区在线观看| 国模粉嫩小泬视频在线观看| 国产新AV天堂| 午夜无码一区二区三区在线app| 国产成人在线无码免费视频| 欧美激情视频一区二区三区免费| 毛片一区二区在线看| 国产农村妇女精品一二区| 中文字幕欧美日韩| 日韩欧美国产精品| 91福利片| 婷婷激情亚洲| 精品剧情v国产在线观看| 99人妻碰碰碰久久久久禁片| 老司机精品一区在线视频| 成人午夜天| 国产成人夜色91| 中国一级特黄视频| 国产精品成人一区二区不卡 | 午夜精品久久久久久久2023| 国产乱子伦一区二区=| 欧美一级大片在线观看| 嫩草在线视频| 亚洲成人免费看| 国产粉嫩粉嫩的18在线播放91 | 一级毛片免费观看久| 国产成年女人特黄特色大片免费| 国产精品入口麻豆| 日本午夜精品一本在线观看| 亚洲成年网站在线观看| 亚洲精品无码成人片在线观看| 中字无码av在线电影| 不卡色老大久久综合网| 国产在线啪| 大学生久久香蕉国产线观看| 免费视频在线2021入口| 欧美成人午夜视频免看| 一区二区三区在线不卡免费| 四虎影视永久在线精品| 国产99欧美精品久久精品久久| 狠狠干综合| 亚洲香蕉伊综合在人在线| 无码高清专区| 国产精品久久久久鬼色| 欧美激情视频二区三区| 亚洲精品无码不卡在线播放| 欧美成人一区午夜福利在线| 国产一区二区三区视频| 在线精品亚洲国产| 波多野结衣一区二区三区四区| 最新亚洲人成网站在线观看| 中文字幕无码中文字幕有码在线| 欧美无专区|