![STM32位綁定操作的理解_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/12/2eb1452b-c019-409c-baee-1f2eba32298c/2eb1452b-c019-409c-baee-1f2eba32298c1.gif)
![STM32位綁定操作的理解_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/12/2eb1452b-c019-409c-baee-1f2eba32298c/2eb1452b-c019-409c-baee-1f2eba32298c2.gif)
![STM32位綁定操作的理解_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/12/2eb1452b-c019-409c-baee-1f2eba32298c/2eb1452b-c019-409c-baee-1f2eba32298c3.gif)
![STM32位綁定操作的理解_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/12/2eb1452b-c019-409c-baee-1f2eba32298c/2eb1452b-c019-409c-baee-1f2eba32298c4.gif)
![STM32位綁定操作的理解_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/12/2eb1452b-c019-409c-baee-1f2eba32298c/2eb1452b-c019-409c-baee-1f2eba32298c5.gif)
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、STM32位綁定操作的理解以下是為大家整理的sTm32位綁定操作的理解的相關(guān)范文,本文關(guān)鍵 詞為sTm32綁定,操作,理解,stm32,綁定,操作,理解,,您可以從右上方 搜索框檢索更多相關(guān)文章, 如果您覺(jué)得有用, 請(qǐng)繼續(xù)關(guān)注我們并推薦給您的好友,您可以在綜合文庫(kù)中查看更多范文。stm32 位綁定操作的理解sTm32對(duì)外設(shè)端口的操作,是通過(guò)對(duì)相關(guān)寄存器的位操作來(lái)控制 的。sTm32將寄存器的位都映射到位帶區(qū)bit_bandregion,這樣對(duì)位帶區(qū)進(jìn)行位操作時(shí), 就會(huì)映射到相應(yīng)寄存器的位, 從而實(shí)現(xiàn)對(duì)端口的操作。sTm32 有二個(gè)位帶區(qū)bit_bandregion :一是內(nèi)存sRAm 區(qū),在0
2、x200000000x200fffff 范 圍 ( 1m 空 間 ) ; 二 是 片 上 外 設(shè) 區(qū) , 在0x400000000x400fff 范圍(1m 空間)。由于不能直接對(duì)一個(gè)位進(jìn)行操作, 為了實(shí)現(xiàn)對(duì)寄存器進(jìn)行快速的位操作, cortexm3 設(shè)了二個(gè) 32m 的別名區(qū)Aliasregion, 它們分別被映射到二個(gè) 1m 的位帶區(qū) bit_bandregion 。位帶區(qū)的每一個(gè)位1bit 都與別名區(qū)的一個(gè)字32bit 相對(duì)應(yīng)(由 4個(gè)字節(jié)組成) 。這樣對(duì)別名區(qū)進(jìn)行的字操作,都會(huì)映射到位帶區(qū)的相應(yīng)的位上,從而實(shí)現(xiàn)對(duì)位帶區(qū)的一個(gè)位進(jìn)行快速操作。而且sTm32是32位的cpu,對(duì) 32 位的
3、操作速度是最快的。sTm32 的一個(gè)地址單元對(duì)應(yīng)8 個(gè) bit 位(一個(gè)字節(jié)) 。因此,位帶區(qū)的一個(gè) bit 位,需要占用別名區(qū)的四個(gè)地址單元。如 位 帶 區(qū) 0x20000000 的 第 0 位 對(duì) 應(yīng) 別 名 區(qū) 地 址0x220000000x22000003 , 第 2 位 對(duì) 應(yīng) 別 名 區(qū) 地 址 0x220000040x22000007。別名區(qū)的字與位帶區(qū)的位相關(guān)聯(lián), 而且只是字的最后一位與位相 關(guān)聯(lián)。 也可理解為, 位帶區(qū)位的狀態(tài)只與別名區(qū)存儲(chǔ)的字的奇偶相關(guān),奇數(shù)為 1,偶數(shù)為 0。下面的映射公式給出了別名區(qū)中的每個(gè)字是如何對(duì)應(yīng)位帶區(qū)的相應(yīng)位的: bit_word_addr=bi
4、t_band_base+(byte_offset*32)+(bit_number*4)bit_wo rd_addr : 是 位 帶 區(qū) 目 標(biāo) 位 映 射 到 別 名 區(qū) 的 字 的 起 始 地 址 bit_band_base:是別名區(qū)的起始地址sRAm 區(qū)所對(duì)應(yīng)的起始地址為 0x22000000 片上外設(shè)區(qū)所對(duì)應(yīng)的起始地址為 0x42000000byte_offset:是位帶區(qū)包含目標(biāo)位的字節(jié)的地址偏移量。在sRAm位帶區(qū)的偏移量為:(A-0X20000000), A為包含目標(biāo)位字 節(jié)的地址例:要映射位帶區(qū)中sRAm也址為0x2000300的字節(jié)中的第2位。位帶區(qū)包含目標(biāo)位的字節(jié)偏移量 by
5、te_offset=0x2000030O0x20000000=0x300 映射至屹 U 名區(qū)的字的地址 bit_word_addr=0x220XX008=0x22000000+(0x300*32)+(2*4)通過(guò)位綁定后對(duì)別名區(qū)0x220XX008地址的寫(xiě)操作與對(duì)sRAm中 位帶區(qū)中地址偏移量0x300字節(jié)的位2執(zhí)行讀改寫(xiě)操作有著相同的效 果位綁定算法:例如要對(duì)下式進(jìn)行綁定運(yùn)算if(gpIoA->IDRelsegpIoA->oDR=gpIoA->oDR 也就是對(duì) gpIoA 第 11引腳輸入信號(hào)后,在gpIoA 第 3 引腳輸出信號(hào)。要對(duì)上面程序中g(shù)pIo->oDR和g
6、oIp->IDR寄存器進(jìn)行位綁定運(yùn)算, 首先要得到gpIo->oDR和gpIo->IDR在位帶區(qū)的地址偏移量。在 Keil區(qū)Vision麻境下, 選擇 gpIoA , 用右鍵 “goToDefinitionofgpIo搬至U對(duì)應(yīng)的是 gpIoA_bAs0 就是 gpIoA 的起始 地址繼 續(xù) 查 找 gpIoA_bAse 對(duì) 應(yīng) 的 地 址 , 找 到 對(duì) 應(yīng) 的 地 址 是Apb2peRIph_bAse+0x0800 再 查 找 Apb2peRIph_bAse 得 到 地 址 是 peRIph_bAse+0x10000+0x0800 , 再 繼 續(xù) 查 找 得 到 地 址
7、0x40000000+0x10000+0x0800=0x400108000x40010800就是gpIoA的起始地址,根據(jù)資料端口輸出數(shù)據(jù)寄存 器(gpIox_oDR的偏移地址為:0ch。因 此 gpIo->oDR 在 位 帶 區(qū) 的 地 址 為 :gpIoA_bAse+0x000c=0x4001080昭位帶區(qū)的地址偏移量為:0x10800同樣,根據(jù)資料端口輸入數(shù)據(jù)寄存器(gpIox_IDR羽偏移地址為:08h。因 此 gpIo->IDR 在 位 帶 區(qū) 的 地 址 為 : gpIoA_bAse+0x0008=0x40010808 在位帶區(qū)的地址偏移量為:0x10808。由上面公式
8、oDR所要操作的0x08得出,對(duì)應(yīng)要操作的是第3位 n=3此 , oDR 寄 存 器 第 3 位 所 對(duì) 應(yīng) 的 別 名 區(qū) 地 址 為 :AliasAddr=0x42000000+(0x1080c)*32+3*4由上面公式中IDR所要操作的0x0800得出,對(duì)應(yīng)要操作的是第11 位 n=11因此 , IDR 寄存器第 11 位所對(duì)應(yīng) 的別名 區(qū)地址為 :AliasAddr=0x42000000+(0x10808*32)+11*4或者,按標(biāo)準(zhǔn)公式計(jì)算,gpIoA->IDR是占用了二個(gè)地址,第11 位對(duì)應(yīng)的是第二個(gè)地址,地址偏移量為:0x10808+1;第11引腳在第 二個(gè)字節(jié)中對(duì)應(yīng)的 n
9、=3由此得到, IDR 寄存器第 11 位所對(duì)應(yīng)的別名區(qū)地址為:AliasAddr=0x42000000+(0x10808+1)*32)+3*4在片上外設(shè)區(qū)所對(duì)應(yīng)的偏移量為:(A-0x40000000), A 為包含目標(biāo)位字節(jié)的地址byte_offset*32 :是因?yàn)槲粠^(qū)的一個(gè)位要擴(kuò)張到別名區(qū)的 32 個(gè)位,同樣,一個(gè)位帶區(qū)的地址也會(huì)擴(kuò)張到別名區(qū)的 32 個(gè)地址。byte_offset*32 表示前面已經(jīng)占用的地址。bit_number :是目標(biāo)位所在的位的位置(0-7)bit_number*4 是因?yàn)?1bit 位要占用四個(gè)地址單元(四個(gè)字節(jié),32bit 位)通過(guò)計(jì)算可以看出這兩種算法I
10、DR寄存器11位所對(duì)應(yīng)的別名區(qū) 地址是一樣的。位綁定由指針操作完成:u32*pAo3=(u32*)(0x42000000+(0x4001080c-0x40000000)*32+3*4);pAo3表示對(duì)gpIoA端口第3位輸出u32*pAI11=(u32*)(0x42000000+(0x40010808-0x40000000)*32+11*4);pAI11表示對(duì)gpIoA端口第11位輸入上式將oDR綁定后程序?yàn)椋篿f(gpIoA->IDRelse*pAo3=0;第11引腳輸入信號(hào)時(shí),第3引腳輸出信號(hào)上式將IDR綁定后程序?yàn)椋?if(*pAI11=1)*pAo3=1;else*pAo3=0;
11、程序如下:#includeintmain(void)gpIoA->cRL=0x33333333;t pA.0pA.7 引腳進(jìn)行輸出模式配置gpIoA->cRh=0x44444444?t pA.8pA.15 引腳進(jìn)行輸入模式配置u32*pAo3=(u32*)(0x42000000+(0x4001080c-0x40000000)*32+3*4);u32 *pAI11=(u32*)(0x42000000+(0x40010808-0x40000000)*32+11*4);while (1)if(*pAI11=1)*pAo3=1;else*pAo3=0;return(1);位綁定操作不僅可以
12、對(duì)IDR oDR進(jìn)行綁定,同樣也可以其它寄 存器進(jìn)行綁定。位綁定操作簡(jiǎn)化輸入辦法:上面方案中位的指針綁定操作,要對(duì)大量的端口進(jìn)行綁定操作,數(shù)據(jù)輸入太繁瑣。可以用 #define 預(yù)定義的辦法簡(jiǎn)化。先定義地址,再定義公式,最后進(jìn)行綁定。定義gpIo地址:#definegpIo_oDR_A(gpIoA_bAse+0x0c)#definegpIo_IDR_A(gpIoA_bAse+ 0x08)#definegpIo_oDR_b(gpIob_bAse+0x0c)#definegpIo_IDR_b(gpIob_b Ase+0x08)#definegpIo_oDR_c(gpIoc_bAse+0x0c)#d
13、efinegpIo_IDR_c(gpIo c_bAse+0x08)#definegpIo_oDR_D(gpIoD_bAse+0x0c)#definegpIo_IDR_D(gpIoD_bAse+0x08)#definegpIo_oDR_e(gpIoe_bAse+ 0x0c)#definegpIo_IDR_e(gpIoe_bAse+0x0僦義位綁定公式 bitband:#definebitband(Addr,bitnum)(Addr*32 相當(dāng)于左移5 位, *4 相當(dāng)于左移2 位。 左移運(yùn)算比乘法運(yùn)算快一點(diǎn)。上式也可以用下式替代:#definebitband(Addr,bitnum)(Addr要
14、把公式轉(zhuǎn)化為無(wú)符號(hào)長(zhǎng)整型指針#definebitband(Addr,bitnum)*(volatileunsignedlog*)(Addr因?yàn)橛卸€(gè)綁定區(qū), 為了用一個(gè)公式來(lái)表達(dá), 別名區(qū)地址最高一位通過(guò) “與”運(yùn)算,由位帶區(qū)地址的最高位決定;地址偏移量通過(guò)“與 ”運(yùn)算保留低五位獲得。volatile 關(guān)鍵字告訴編譯器后面的變量不要優(yōu)化,每次都是從源頭去讀寫(xiě)。定義pAout 作為 gpIoA 的輸出、 pAIn 作為 gpIoA 的輸入#definepAout(n)bitband(gpIo_oDR_A,n)#definepAIn(n)bitband(gpIo_IDR_A,n)程序如下:#def
15、inegpIo_oDR_A(gpIoA_bAse+0x0c)#definegpIo_IDR_A(gpIoA_bAse+ 0x08)#definegpIo_oDR_b(gpIob_bAse+0x0c)#definegpIo_IDR_b(gpIob_b Ase+0x08)#definegpIo_oDR_c(gpIoc_bAse+0x0c)#definegpIo_IDR_c(gpIo c_bAse+0x08)#definegpIo_oDR_D(gpIoD_bAse+0x0c)#definegpIo_IDR_D (gpIoD_bAse+0x08)#definegpIo_oDR_e(gpIoe_bAse
16、+0x0c)#definegpIo_I DR_e(gpIoe_bAse+0x08)#definebitband(Addr,bitnum)*(volatileunsignedlong*)(Addr 對(duì) pA.0pA.7引 腳進(jìn)行輸出模式配置 gpIoA->cRh=0x44444444對(duì) pA.8pA.15引腳進(jìn)行輸入模式配置 while(1)if(pAIn(8)=1)elseif(pAIn(9)=1)elseif(pAIn(10)=1)elseif(pAIn(11)=1)els eif(pAIn(12)=1)elseif(pAIn(13)=1)elseif(pAIn(14)=1)elseif(pAIn(15
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 辦學(xué)擔(dān)保合同范本
- 農(nóng)村房屋購(gòu)銷合同范本
- 人工測(cè)試合同范例
- 保溫涂料施工合同范本
- 出租空地合租大棚合同范本
- 兵役登記合同范例
- 產(chǎn)品攝影合同范例
- pc總包合同范本
- 2025年工業(yè)廠房合同轉(zhuǎn)讓與土地儲(chǔ)備及開(kāi)發(fā)協(xié)議
- 臨夏求購(gòu)路燈合同范本
- 房車(chē)露營(yíng)地的研究課件
- 園藝療法共課件
- DB33T 628.1-2021 交通建設(shè)工程工程量清單計(jì)價(jià)規(guī)范 第1部分:公路工程
- 醫(yī)院-9S管理共88張課件
- 設(shè)立登記通知書(shū)
- 2022醫(yī)學(xué)課件前列腺炎指南模板
- MySQL數(shù)據(jù)庫(kù)項(xiàng)目式教程完整版課件全書(shū)電子教案教材課件(完整)
- 藥品生產(chǎn)質(zhì)量管理工程完整版課件
- 《網(wǎng)絡(luò)服務(wù)器搭建、配置與管理-Linux(RHEL8、CentOS8)(微課版)(第4版)》全冊(cè)電子教案
- 職業(yè)衛(wèi)生教學(xué)課件生物性有害因素所致職業(yè)性損害
- 降“四高”健康教育課件
評(píng)論
0/150
提交評(píng)論