娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年04月10日(星期四)

正在發(fā)生

2019年04月10日 | STM32總結(jié)一 STM32三種點(diǎn)亮LED燈方式的不同之處

發(fā)布者:碼夢(mèng)創(chuàng)想 來(lái)源: eefocus關(guān)鍵字:STM32  LED燈 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

STM32點(diǎn)亮LED燈有很多種方法。第一種是操作寄存器來(lái)點(diǎn)亮LED燈,(以GPIOC的第一個(gè)LED為例)操作的方法是首先在中文手冊(cè),首先要聲明的是,手冊(cè)里面看到的地址,都是字節(jié),表示第多少多少個(gè)字節(jié),然后這個(gè)數(shù)字對(duì)應(yīng)一個(gè)字節(jié)位,所以每一個(gè)32位的寄存器占四個(gè)字節(jié),找到block2(這個(gè)是外設(shè)區(qū),所有的外設(shè)地址都在這個(gè)區(qū))的基地址,然后加上第一段偏移地址,就越過(guò)APB1總線的內(nèi)存區(qū),到達(dá)了APB2總線這個(gè)區(qū)的基地址。然后再加上相對(duì)于APB2的偏移地址就可以定位出某個(gè)特定外設(shè)的基地址,這里所指的是GPIOC端口的基地址,然后再在這個(gè)端口外設(shè)基地址的基礎(chǔ)上,加上相應(yīng)的偏移地址,就可以定義出這個(gè)端口的寄存器地址,這些寄存器是緊緊的挨著的,一個(gè)接一個(gè)的,每個(gè)寄存器占四個(gè)字節(jié)。然后就參考手冊(cè)的寄存器介紹圖來(lái)編程,從而操作寄存器相應(yīng)的位來(lái)實(shí)現(xiàn)引腳輸入輸出的不同,也就是配置寄存器實(shí)現(xiàn)相關(guān)的功能。(要注意的是:其實(shí)這里我們所定義的宏(也就是定義的地址)其實(shí)就是相關(guān)的寄存器的基地址,這個(gè)寄存器的全程還包括這個(gè)基地址以后的四個(gè)字節(jié),其實(shí)這里定義的這個(gè)宏代表的就是這個(gè)寄存器,雖然它只用了每個(gè)寄存器的基地址來(lái)表示),其實(shí)都是一樣的,每個(gè)數(shù)字對(duì)應(yīng)著一個(gè)位。要讓GPIOC的引腳0輸出低電平的意思就是配置BSRR寄存器的BS0位為1。當(dāng)然在配置這個(gè)之前,我們還需要了解GPIOC的基本結(jié)構(gòu)(其實(shí)每個(gè)GPIO的結(jié)構(gòu)都是一樣的,這里用GPIOC引腳來(lái)舉例子)和它的八種工作模式。這里需要著重說(shuō)一下的是,除了模擬輸入和模擬輸出這兩種工作模式用的是模擬量以外,其他的工作模式,如果是輸入則從引腳處進(jìn)去模擬量通過(guò)施密特觸發(fā)器以后變成數(shù)字0和1,如果是輸出則通過(guò)一個(gè)模擬量輸出然后經(jīng)過(guò)MOS管的處理變成了輸出量為高電平和低電平,這里本質(zhì)上就是把控制引腳輸出高低電平的寄存器位設(shè)置為0或者1,然后會(huì)讓相應(yīng)的引腳輸出高低電平。當(dāng)然在配置寄存器讓引腳輸出高低電平之前,還需要配置其他的寄存器,讓這個(gè)引腳位置有相應(yīng)的工作模式和工作速度。這樣就實(shí)現(xiàn)了LED點(diǎn)亮(本質(zhì)上就是引腳位置輸出了一個(gè)低電平接在LED燈的一端,LED燈的另一端接了一個(gè)VDD正電源,然后燈就亮了)。所有的點(diǎn)亮LED燈的操作說(shuō)白了都是這個(gè)最基本原理,配置寄存器,輸出低電平,點(diǎn)亮燈。在GPIO每個(gè)端口的某個(gè)引腳輸出電平時(shí),其實(shí)可以在輸入端測(cè)出到底輸出的是高電平還是低電平(測(cè)的原理就和輸入原理一樣)。


第二種方式用的是固件庫(kù)模板點(diǎn)亮LED。這種方法的本質(zhì)和第一種是一樣的都是操作寄存器的位從而實(shí)現(xiàn)對(duì)應(yīng)引腳輸出不同的電平。使用這種方法首先需要?jiǎng)?chuàng)建一個(gè)模板,創(chuàng)建方式可以參考中文參考手冊(cè)和開(kāi)發(fā)攻略。然后再自己新定義一個(gè)函數(shù),將用到的函數(shù)從已經(jīng)定義好的庫(kù)文件中調(diào)用出來(lái)即可。再在main.c函數(shù)中調(diào)用新定義的函數(shù)初始化寄存器即可。雖然與第一種方式不同,但實(shí)際上達(dá)到的效果是一樣的(也就是說(shuō)最后實(shí)現(xiàn)的配置結(jié)構(gòu)是一樣的,只是配置的方式并不相同)。


第三種方法是位帶操作。


STM32所基于的ARM Cortex-M3內(nèi)核引入了一種新穎的“位帶”技術(shù)(英文稱為Bit

Band),這種“位帶”技術(shù)將部分其片內(nèi)的部分稱為“位帶區(qū)”的存儲(chǔ)區(qū)域和另外一部分稱為“位帶別名區(qū)”的區(qū)域映射起來(lái)。一個(gè)比較完整的描述是:Cortex-M3的內(nèi)部存儲(chǔ)空間有2個(gè)“位帶區(qū)”,分別稱為“SRAM位帶區(qū)”和“外設(shè)存儲(chǔ)位帶區(qū)”,各自位于SRAM區(qū)和外設(shè)存儲(chǔ)區(qū)各自最低的1MBit空間;并有對(duì)應(yīng)的2個(gè)“位帶別名區(qū)”,分別稱為“SRAM位帶別名區(qū)”和“外設(shè)存儲(chǔ)位帶別名區(qū)”,每個(gè)別名區(qū)大小為32MBit。“位帶”技術(shù)將兩個(gè)“位帶區(qū)”的每一位分別映射帶對(duì)應(yīng)的“位帶別名區(qū)”的一個(gè)“字”(即32位)的最低位上。圖1展示了這種關(guān)系:


圖1


圖1中,左邊的0x40000000表示“外設(shè)存儲(chǔ)位帶區(qū)”的起始地址,而右邊的0x42000000則表示“外設(shè)存儲(chǔ)位帶別名區(qū)”的存儲(chǔ)地址,0th Bit、1th Bit等表示從地址0x40000000依次往后的第0位,第1位等。右邊的0x42000000表示STM32內(nèi)部的“外設(shè)存儲(chǔ)位帶別名區(qū)”起始地址,而下面的0x42000000 – 0x420000010、0x42000010 – 0x420000020等則表示從地址0x42000000依次往后的第1個(gè)、第二個(gè)“字”空間。在此要注意到的是,STM32作為一款32位控制器,其數(shù)據(jù)總線當(dāng)然是32位的,但其內(nèi)部存儲(chǔ)空間不僅支持32位存取,同時(shí)也支持8位(字節(jié))、16位(半字)存取方式,因此其內(nèi)部存儲(chǔ)空間是按照最小存取長(zhǎng)度(8位)來(lái)對(duì)齊的,以圖1中的0x42000000 – 0x420000010為例,其存儲(chǔ)空間的排列情況如下圖2所示。假設(shè)想這段空間內(nèi)寫入數(shù)據(jù)0x12345678,則實(shí)際內(nèi)容(假設(shè)是小端存儲(chǔ)格式)如圖3所示。


圖2                                                                                                                          圖3


8位長(zhǎng)度的對(duì)齊方式?jīng)Q定了用戶通過(guò)應(yīng)用程序操作存儲(chǔ)空間的最小長(zhǎng)度為8位,亦即1個(gè)字節(jié)。因此如果要單獨(dú)對(duì)某一“位”進(jìn)行操作,則必須使用上文中所講述的辦法。


但通過(guò)這種“位帶”技術(shù)進(jìn)行存儲(chǔ)空間的映射后,可以很輕易快捷的實(shí)現(xiàn)位操作。當(dāng)對(duì)“位帶別名區(qū)”的某一個(gè)“字”空間的最低位進(jìn)行清除操作時(shí),則對(duì)應(yīng)的“位帶區(qū)”所對(duì)應(yīng)的“位”即會(huì)被清除,反之當(dāng)對(duì)“位帶別名區(qū)”的某一個(gè)“字”空間的最低位進(jìn)行置位操作時(shí),,則對(duì)應(yīng)的“位帶區(qū)”所對(duì)應(yīng)的“位”也會(huì)被置位。這樣一來(lái),前文所講述的“讀出——修改——寫入”就變成了只有“寫入”的過(guò)程,這是一種非常典型的空間換時(shí)間的做法。也許有讀者會(huì)疑問(wèn),這樣豈不是損失掉了2個(gè)32MBit的存儲(chǔ)空間?答案是這部分存儲(chǔ)空間是通過(guò)映射技術(shù)“虛擬”出來(lái)的,STM32片內(nèi)的這部分地址空間并沒(méi)有物理存儲(chǔ)介質(zhì)存在。


下面通過(guò)一個(gè)簡(jiǎn)單的例子講述如何實(shí)現(xiàn)STM32微控制器平臺(tái)上的“位帶”技術(shù)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的點(diǎn)亮發(fā)光二極管的操作。其中發(fā)光二極管使用STM32的PA4引腳的輸出高電平點(diǎn)亮,則只要在PA4引腳輸出一個(gè)高電平,即可點(diǎn)亮該發(fā)光二極管。


通過(guò)查閱STM32的開(kāi)發(fā)手冊(cè)可以知道,要在PA4引腳輸出高電平,則只需要在初始化完畢GPIOA設(shè)備之后對(duì)GPIOA的ODR寄存器的第4位寫入一個(gè)“1”即可。這個(gè)目的很簡(jiǎn)單,重點(diǎn)是如何計(jì)算ODR寄存器的第4位在“位帶別名區(qū)”中所對(duì)應(yīng)的“字”空間地址。獲取該地址的過(guò)程如下圖4所示。


圖4


事實(shí)上有了前文的描述,相信圖4是比較容易理解的。圖中自上往下最終推算出了GPIOA的ODR各個(gè)位的“位帶別名區(qū)”的地址,可以看到ODR寄存器的第4位所對(duì)應(yīng)的“字”空間地址為0x42210190。從STM32的開(kāi)發(fā)手冊(cè)上也可以獲取“位帶別名區(qū)”的字空間所對(duì)應(yīng)的“位”:

bit_word_addr = bit_band_base + (byte_offset×32) + (bit_number×4)

上述公式中,bit_word_addr表示“位帶別名區(qū)”字空間,bit_band_base表示對(duì)應(yīng)的“位帶區(qū)別名區(qū)”起始地址,byte_offset表示“位”在“位帶區(qū)”中的字節(jié)偏移地址,bit_number則表示“位”在對(duì)應(yīng)“位帶區(qū)”字節(jié)中的位置。


以對(duì)GPIOA的ODR寄存器的第4位寫入一個(gè)“1”為例,首先要找到ODR寄存器的第4位的“位帶區(qū)”起始地址,字節(jié)偏移地址和在字節(jié)中的位置。其中“位帶區(qū)”起始地址已知為0x42000000,而字節(jié)偏移地址由在圖4找出為0x0001080C(注意是此處偏移地址,不是圖中的絕對(duì)地址),同時(shí)位置為第4位,因此可以套用上述公式計(jì)算對(duì)應(yīng)的“字空間”

bit_word_addr = 0x42000000 + (0x0001080C × 32) + (4 × 4) = 0x42210190

可知可圖中推算的結(jié)果一致。因此,只要向地址為0x42210190的空間寫入“1”即可點(diǎn)亮發(fā)光二極管。



關(guān)鍵字:STM32  LED燈 引用地址:STM32總結(jié)一 STM32三種點(diǎn)亮LED燈方式的不同之處

上一篇:STM32F103利用定時(shí)器2與串口接收指令控制LED亮度
下一篇:stm32 pwm 呼吸燈

推薦閱讀

曠視科技(Face++)公布全資收購(gòu)艾瑞思機(jī)器人(Ares robot)的消息,宣告正式進(jìn)軍智能機(jī)器人業(yè)務(wù)。據(jù)了解,艾瑞思機(jī)器人致力于智能機(jī)器人、人工智能、大數(shù)據(jù)等核心技術(shù)研發(fā),主要為物流倉(cāng)儲(chǔ)、智能工廠等行業(yè)客戶提供具有競(jìng)爭(zhēng)力的產(chǎn)品和解決方案。2017年,艾瑞思建立自有機(jī)器人生產(chǎn)線,并與心怡科技、科捷物流等合作伙伴合力打造智能倉(cāng)庫(kù),而且成功應(yīng)用...
渠道為王,終端制勝,對(duì)于擁擠了2000多個(gè)品牌的智能門鎖行業(yè)來(lái)說(shuō),2019年或?qū)⒂瓉?lái)分水嶺,而渠道和終端的銷售服務(wù)網(wǎng)絡(luò)布局進(jìn)度,將是角逐爭(zhēng)霸的關(guān)鍵所在。 智能門鎖廠商德施曼近期正陸續(xù)在長(zhǎng)沙、北京、廣州等重點(diǎn)區(qū)域城市大規(guī)模招商,據(jù)介紹,德施曼現(xiàn)有經(jīng)銷商超500家,此次意在完善和強(qiáng)化整個(gè)線下?tīng)I(yíng)銷服務(wù)體系布局,做好發(fā)力沖刺的準(zhǔn)備,在德施曼COO李修...
鋰電池之父、2019年諾貝爾化學(xué)獎(jiǎng)得主約翰·古迪納夫(John Goodenough)近日透露,已研制出鈉-玻璃電池,其儲(chǔ)能力是當(dāng)前鋰電池的3倍。論文和專利中介紹,鈉-玻璃電池使用了摻雜鈉或鋰等堿金屬的玻璃作為電解質(zhì)(充放電時(shí),離子穿過(guò)陽(yáng)極和陰極的介質(zhì)), 其儲(chǔ)能力是當(dāng)前鋰電池的3倍,而且用于配置電動(dòng)汽車后,可以分分鐘滿電,不再需要以小時(shí)計(jì)。新電池還...
文/陳根機(jī)器人,當(dāng)代的工業(yè)之魂。考察過(guò)近代工業(yè)制造的發(fā)展歷程,就可以理解機(jī)器對(duì)加工制造業(yè)的意義之重。1784年,蒸汽機(jī)的誕生成為第一次工業(yè)革命的里程碑,由此產(chǎn)生了新一代的蒸汽動(dòng)力引擎,帶動(dòng)了第一次工業(yè)革命。蒸汽動(dòng)力引擎是結(jié)合了工、技、貿(mào)的“科技化+工業(yè)化”,奠定了工業(yè)時(shí)代成功的基礎(chǔ)。同樣的,在今天,科技化與工業(yè)化的結(jié)合也會(huì)促進(jìn)新一時(shí)...

史海拾趣

小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 商水县| 隆安县| 太仆寺旗| 屯留县| 六盘水市| 扎兰屯市| 遂平县| 榆社县| 岑溪市| 满城县| 永嘉县| 内黄县| 康马县| 新疆| 耒阳市| 吴江市| 沙洋县| 定安县| 武宣县| 荣昌县| 白水县| 通渭县| 棋牌| 库尔勒市| 德阳市| 汝城县| 榆树市| 锦州市| 永康市| 东乌珠穆沁旗| 常德市| 会同县| 江阴市| 怀仁县| 晋宁县| 通许县| 蛟河市| 普兰县| 文登市| 平泉县| 梧州市|