<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          STM32之位綁定

          作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏
          位綁定的概念:對(duì)于51單片機(jī)只有8位,對(duì)于M3來(lái)說(shuō),有32位,也就是說(shuō)把32位中的某一位通過(guò)一個(gè)簡(jiǎn)單的地址的變換的算法來(lái)實(shí)現(xiàn)對(duì)該位的操作,它能夠映射到一個(gè)地址的空間,也就是說(shuō)一個(gè)位它占一個(gè)地址,就好比如把惠州放在廣東省的某一個(gè)地址,叫做惠州市,通過(guò)搭去惠州的車票就可以來(lái)到惠州市這個(gè)地址,別去東莞哈、但是這個(gè)位只有在地址的最低位有效,因?yàn)榈刂房赡苁侵赶蛞粋€(gè)32位的內(nèi)存單元、、因?yàn)槭荓SB有效、、所以對(duì)其操作的時(shí)候就大可不必通過(guò)屏蔽其他位來(lái)對(duì)綁定的位進(jìn)行操作、也正是最低位有效,所以只要看最低位即可、因?yàn)槟阗I的是惠州的車票,所以就不用屏蔽東莞了,因?yàn)檐嚥粫?huì)去東莞、請(qǐng)看“美女”照片:


          本文引用地址:http://www.ex-cimer.com/article/201611/322908.htm

          從圖片中我們可以看出,一個(gè)位就綁定了一個(gè)地址,看到這,你會(huì)覺得奇怪?為什么位帶區(qū)地址是從0x2000 00000開始,而綁定的地址是從0x2200 0000開始的呢?啊哈、、別急哈、、正所謂心急吃不了熱豆腐、、

          由于M3核處理都是按32位整體處理的,并沒有單獨(dú)對(duì)一個(gè)位進(jìn)行操作,所以位綁定就可以實(shí)現(xiàn)CPU對(duì)單獨(dú)一個(gè)位進(jìn)行操作,只需要一個(gè)指令周期、其速度可顯而知、、但是整個(gè)M3內(nèi)核并沒有全部允許位綁定,只有兩個(gè)區(qū)有,分別為:

          SARM區(qū):0x2000_0000‐0x200F_FFFF 這個(gè)SRAM綁定的地址就是從0x2200 0000開始的

          片上外設(shè)區(qū):0x4000_0000‐0x400F_FFFF 這個(gè)區(qū)綁定的地址就是從0x4200 0000開始的、、

          其映射表分別如下:





          可以看到GO TO Definition,點(diǎn)擊它,就可以找到GPIOA~E的地址,以此類推,我們就可以找出背后的“大哥大”了、、如圖:









          好了、、有了地址、但是我們還需要每個(gè)IO口的輸出輸入寄存器的偏移地址:






          沒錯(cuò)了、我們以0x08 0x0c為例

          1 #define GPIOA_ODR_A (GPIOA_BASE + 0X0C)
          2 #define GPIOA_IDR_A (GPIOA_BASE + 0X08)3 ...4 #define GPIOA_ODR_E (GPIOE_BASE + 0X0C)5 #define GPIOA_IDR_E (GPIOE_BASE + 0X08)6 7 #define BitBand(Addr,BitNum)  *((volatile unsiged long *)(Addr&0xf0000000)+0x2000000+((Addr&0xfffff)<<5)+(BitNum<<2))8 9 #define PAout(n)  BitBand(GPIOA_ODR_A,n)10 #define PAin(n)   BitBand(GPIOA_IDR_A,n)11 ...12 #define PEout(n)  BitBand(GPIOE_ODR_A,n)13 #define PEin(n)   BitBand(GPIOE_IDR_A,n)

          我來(lái)解釋下:

          Addr&0xf0000000   因?yàn)槲覀儾恢赖降资荢RAM還是片上外設(shè)區(qū),所以我們這里取其最高位  因?yàn)樽罡呶挥锌赡転? 也有可能為2

          Addr&0xfffff可以看到位綁定的范圍0x2000_0000‐0x200F_FFFF0x4000_0000‐0x400F_FFFF所以我們這里把高三位屏蔽掉,就相當(dāng)于 A - 0x20000000的效果了、、為什么我這里要用《5 和《2 呢?對(duì)比一下、、我們可以知道《5相當(dāng)于*32《2相當(dāng)于*4那我們?yōu)槭裁匆米笠品?hào)呢??原因在這:因?yàn)樽笠频奶幚硭俣纫瘸说目旌芏?、、我們盡量把乘除轉(zhuǎn)化為加減和左右移寫到這里、、沒錯(cuò)了、、這下子我們就可以像操作51那樣方便操作32位的芯片了、、、



          關(guān)鍵詞: STM32位綁

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();