GPIO初始化時(shí)有時(shí)鐘配置、模式配置、輸出配置、復(fù)用配置,那么在編寫初始化代碼時(shí),到底該按什么順序執(zhí)行呢?如果順序不當(dāng)那初始化過程可能會(huì)出現(xiàn)短暫的電平跳變。
第一步,初始化MCU外設(shè)時(shí),一般都需要先打開對應(yīng)寄存器的接口時(shí)鐘,所以GPIO時(shí)鐘使能一定是第一步,否則后面執(zhí)行的初始化配置無法寫入到寄存器中。

第二步,
對于外設(shè)復(fù)用的GPIO,則需要先配置好GPIO的重映射或者復(fù)用選擇器,讓這個(gè)GPIO先內(nèi)部連接到外設(shè)上;
如果我們先初始化GPIO復(fù)用模式那么可能默認(rèn)的復(fù)用不是我們想要的外設(shè)功能,此時(shí)IO按默認(rèn)外設(shè)的默認(rèn)電平輸出,接著軟件又配置復(fù)用選擇器連接到想要的外設(shè),輸出電平再次發(fā)生變化,就會(huì)出現(xiàn)這個(gè)短暫的電平變化。

對于普通輸出IO,則需要先配置好輸出狀態(tài)。

因?yàn)榧拇嫫骼锬J(rèn)輸出值是0,如果GPIO想要默認(rèn)狀態(tài)高,那初始化完GPIO后再配置IO輸出高也會(huì)出現(xiàn)短暫的低電平導(dǎo)致電平變化。

第三步,
初始化GPIO模式,其中一般有輸出、輸入、復(fù)用、模擬等幾種模式,有的芯片也可以配置內(nèi)部的上下拉電阻是否開啟,在輸出模式時(shí)還有GPIO驅(qū)動(dòng)能力配置。

當(dāng)然也有特殊情況,以TIMER PWM輸出為例,不同的PWM模式默認(rèn)電平有高和低兩種情況,和TIMER配置有關(guān),此時(shí)我們按標(biāo)準(zhǔn)順序配置好GPIO后再配置TIMER,則也可能出現(xiàn)電平變化,如果PWM用于控制功率開關(guān),則可能對電路帶來不良影響。所以對于這類外設(shè)默認(rèn)電平可配的外設(shè),想要啟動(dòng)外設(shè)工作前保持默認(rèn)電平的話,我們就可以先初始化好外設(shè),再按標(biāo)準(zhǔn)的順序配置GPIO。

所以GPIO雖然簡單,但實(shí)際也有很多細(xì)節(jié),想要讓軟硬件更加可靠,需要抓住這些細(xì)節(jié)優(yōu)化軟硬件設(shè)計(jì)。
這里推薦大家購買我們紅楓派開發(fā)版,其中的例程和驅(qū)動(dòng)程序就是考慮到細(xì)節(jié)設(shè)計(jì)的,可以方便大家二次開發(fā)產(chǎn)品。

-
單片機(jī)
+關(guān)注
關(guān)注
6060文章
44835瀏覽量
645242 -
mcu
+關(guān)注
關(guān)注
146文章
17751瀏覽量
358777 -
GPIO
+關(guān)注
關(guān)注
16文章
1246瀏覽量
53382
發(fā)布評論請先 登錄
RT-Thread自動(dòng)初始化詳解


MCU單片機(jī)GPIO初始化該按什么順序配置?為什么初始化時(shí)有電平跳變?#單片機(jī) #GPIO
控制FPGA上電、配置以及初始化時(shí)間
51單片機(jī)對SAA7113初始化和控制的程序
解析內(nèi)核初始化時(shí)根內(nèi)存盤的加載過程
Linux內(nèi)核初始化過程中的調(diào)用順序
51單片機(jī)定時(shí)器的初始化步驟詳細(xì)說明

51單片機(jī)各中斷初始化及子程序模板的詳細(xì)資料說明

藍(lán)橋杯單片機(jī)的初始化原理和蜂鳴器關(guān)閉學(xué)習(xí)

關(guān)于stm8l05x系列單片機(jī)rtc初始化問題

單片機(jī)問題總結(jié):MPU6050的DMP模塊初始化放在線程啟動(dòng)之前

解決ds1302外置時(shí)鐘模塊重復(fù)初始化時(shí)間問題(單片機(jī)掉電,模塊電池供電)

RT-Thread自動(dòng)初始化機(jī)制

評論