亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2698|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

(菜鳥(niǎo)筆記)STM32配置GPIO時(shí)對(duì)內(nèi)部硬件的‘開(kāi)與關(guān)’

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
說(shuō)心里話,STM32 GPIO的配置操作并不比51單片機(jī)復(fù)雜多少,但不同的應(yīng)用場(chǎng)景可能會(huì)涉及到需要了解IO配置過(guò)程中更深入的細(xì)節(jié),比方說(shuō)內(nèi)部施密特觸發(fā)器的通斷到底如何控制,復(fù)用信號(hào)又是如何送到IO口上的,等等。
這些操作在手冊(cè)上都說(shuō)到了,但個(gè)人覺(jué)得這些知識(shí)點(diǎn)比較分散,不利于初學(xué)者掌握其中的細(xì)微之處,所以我想把GPIO配置的控制邏輯梳理了一下,看看寄存器哪些位的哪些配置值都干了哪些事兒,‘接通’或‘?dāng)嚅_(kāi)’了內(nèi)部的哪些硬件。
下圖是GPIO基本結(jié)構(gòu)圖。
為清晰表達(dá)出內(nèi)部構(gòu)件被使能或禁能,我使用了‘開(kāi)關(guān)’概念,當(dāng)然,實(shí)際它們不會(huì)真的是一些硬件開(kāi)關(guān),而是為了表達(dá)邏輯1、0狀態(tài)。



1、通用輸入模式配置(以PA3為例)

將PA3配置成輸入模式的前提是GPIOA_CRL的MODE3[1:0]=00。
如果想把它配置成模擬輸入用于ADC,那就在GPIOA_CRL的CNF3[1:0]寫(xiě)入00。
因?yàn)镾TM32F沒(méi)有復(fù)用輸入模式,所以要想把它配置成復(fù)用輸入U(xiǎn)SART2_RX,要么是讓CNF3[1:0]=01使PA3成為浮空輸入模式;要么是讓CNF3[1:0]=10配置成內(nèi)部弱上拉輸入模式,但必須在此前加上一條對(duì)GPIOA_ODR的ODR3=1的操作。
這是一個(gè)很有趣也很費(fèi)解的操作,既然是配置輸入,怎么又跟輸出寄存器扯上關(guān)系了呢?請(qǐng)看手冊(cè)上的說(shuō)明:

既然配置成輸入時(shí)輸出緩沖器已經(jīng)被關(guān)閉,那么ODR3的寫(xiě)1操作就一定不是指向末端的PMOS和NMOS管。肯定有一個(gè)內(nèi)部邏輯,使ODR3關(guān)聯(lián)到上拉及下拉電阻開(kāi)關(guān)。至于這個(gè)邏輯到底是個(gè)啥樣的硬件,官方?jīng)]說(shuō),咱們也不好意細(xì)問(wèn)。知道有這么回事兒,別在配置上下拉輸入時(shí)出現(xiàn)錯(cuò)誤就行了。
如果PA3配置成了復(fù)用輸入U(xiǎn)SART2_RX,讀GPIOA_IDR的IDR3是允許的,而且讀回來(lái)的就是PA3當(dāng)前的邏輯狀態(tài),因?yàn)锳PB2的時(shí)鐘會(huì)采樣PA3,除了送到USART2模塊的RX以外,還鎖存到GPIOA_IDR的IDR3上。此時(shí)要閑著沒(méi)事兒非得讀一下GPIOA_ODR的ODR3,操作上也是允許的,但似乎也沒(méi)啥實(shí)際意義,因?yàn)樽x回去的位狀態(tài)是之前對(duì)ODR3的最后一次寫(xiě)入值。
如果PA3配置成了模擬輸入,施密特觸發(fā)器就會(huì)被斷開(kāi),讀IDR3就不再是PA3的數(shù)據(jù)了。
2、通用輸出模式配置(以PA2為例)

將PA2配置成輸出模式的前提是GPIOA_CRL的MODE2[1:0]=01、10或11。
由于在輸出模式下施密特觸發(fā)器一直是被打開(kāi)的,每個(gè)APB2時(shí)鐘也像輸入模式一樣把PA2鎖存到GPIOA_IDR的IDR2,所以此時(shí)讀GPIOA_IDR能夠返回PA2當(dāng)前的輸出邏輯狀態(tài),但這可不是說(shuō)此時(shí)PA2又可以當(dāng)成輸入口使用,尤其是處于推挽輸出模式下,PA2外面的信號(hào)是進(jìn)不來(lái)的。在開(kāi)漏模式下,倒是可以把PA2當(dāng)成輸入,這一點(diǎn)在下面會(huì)有描述。
還有一點(diǎn)值得注意,如果想把PA2配置成USART2_TX,那就必須將它配置成復(fù)用推挽或復(fù)用開(kāi)漏輸出模式,千萬(wàn)不能讓CNF2[1:0]=00(通用推挽)或01(通用開(kāi)漏),否則USART2_TX送不到PA2上,因?yàn)檫@個(gè)時(shí)候‘復(fù)用/通用切換開(kāi)關(guān)’是指向GPIOA_ODR的ODR2位而不是指向USART2_TX。
3、輸入輸出模式配置(以PB11為例)
有的時(shí)候需要將某個(gè)引腳當(dāng)成IO口使用,比方說(shuō)用PB11模擬I2C的SDA口線。
請(qǐng)注意,這里說(shuō)的是‘模擬’SDA,而不是把PB11配置成復(fù)用的I2C2 SDA口。
咱們都知道,SDA線上必須外加上拉電阻,到底是為啥就不多說(shuō)了。
作為模擬的SDA,有一繁一簡(jiǎn)兩個(gè)方法:需要PB11送數(shù)就把它配置成通用輸出模式,回頭又需要它收數(shù)了再配置成輸入模式,在理論上這種方式是可行的,但切來(lái)切去的也真夠麻煩。
簡(jiǎn)單的方法就是把PB11配置成通用開(kāi)漏輸出模式,輸出時(shí)自不必說(shuō),當(dāng)輸入時(shí)只要先在ODR11寫(xiě)個(gè)1就行了。

此時(shí)PB11是通用開(kāi)漏模式,輸出端的PMOS被禁用,在ODR11上寫(xiě)1并不能打開(kāi)這個(gè)MOS管,而NMOS的驅(qū)動(dòng)邏輯是0,所以這個(gè)MOS管也會(huì)被斷開(kāi)。但由于此時(shí)施密特觸發(fā)器是接通的,所以引腳上的信號(hào)會(huì)被APB2時(shí)鐘采樣和鎖存,讀取IDR11就可以獲取PB11的輸入數(shù)據(jù)。這種在端口鎖存上寫(xiě)1變輸入的方式與51單片機(jī)準(zhǔn)輸入IO口的操作是一樣的。
上面說(shuō)的是模擬I2C,如果是直接啟用復(fù)用功能那就不用這么麻煩了,人家早就把相關(guān)的邏輯操作搞得妥妥的了。按照手冊(cè)上的說(shuō)明,只需將PB11配置成復(fù)用開(kāi)漏就一切OK。

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表