來源:公眾號(hào)【魚鷹談單片機(jī)】
作者:魚鷹Osprey
ID :emOsprey
正文
有些 IO 可能作為雙向輸出,比如 I2C 的 SDA 引腳,如果配置成推挽輸出(push-pull),那么當(dāng)要讀取 應(yīng)答信號(hào)或者讀取 i2c 數(shù)據(jù)時(shí),需要重新配置 IO。
因此,很多教程會(huì)建議配置成開漏輸出(open-drain),這樣就不需要來回配置輸出方向。
這里需要注意的一點(diǎn)是,不管是開漏還是推挽輸出,作為輸入時(shí),都需要設(shè)置 ODR 寄存器。
一直以為設(shè)置為開漏后,不管 ODR 設(shè)置 0 或 1,引腳電平應(yīng)該都是一樣的低電平,實(shí)際上,還是會(huì)有差異:
開漏 ODR 設(shè)置為 1:0.15~0.6V(波動(dòng)比較大)
開漏 ODR 設(shè)置為 0:0.002V
按理說,即使 0.6V 電壓,IDR 讀出的值應(yīng)該都是 0 才對(duì),實(shí)際上,不管是代碼,還是調(diào)試窗口,偶爾還是可以讀出 1 的情況。
外部未接任何電路,開發(fā)板引腳懸空:
剛開始以為是調(diào)試窗口有問題,但通過代碼發(fā)現(xiàn),開漏模式下,即使未接外部上拉電阻,電平確實(shí)被識(shí)別成高電平.
并且使用邏輯分析儀也是被莫名其妙的識(shí)別成高電平。
1V 不到的電平怎么就是高電平了(VDD 3.3V)?
按這個(gè)數(shù)據(jù)手冊(cè)來說,VDD 3.3V 情況下,最少也需要 1.5V 以上才會(huì)被識(shí)別為高電平,百思不得其解。如果有道友懂的可以留言區(qū)討論,沒找到理論依據(jù)。
并且當(dāng)設(shè)置為開漏時(shí),當(dāng)準(zhǔn)備作輸入時(shí),如果 ODR 不設(shè)置為 1,雖然應(yīng)答信號(hào)可以讀取,讀取的數(shù)據(jù)卻是錯(cuò)誤的(測試 AT24C256)
(STM32F103 參考手冊(cè))
-
寄存器
+關(guān)注
關(guān)注
31文章
5434瀏覽量
124468 -
引腳
+關(guān)注
關(guān)注
16文章
1728瀏覽量
52889 -
開漏輸出
+關(guān)注
關(guān)注
0文章
65瀏覽量
7519 -
stm32f1
+關(guān)注
關(guān)注
1文章
60瀏覽量
12522
原文標(biāo)題:關(guān)于 STM32F1 開漏輸出的誤解
文章出處:【微信號(hào):emOsprey,微信公眾號(hào):魚鷹談單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
STM32F1系列芯片中文參考手冊(cè)

AN3427_從STM32F1移植到STM32F2的應(yīng)用手冊(cè)

UM1847_基于STM32F1系列的STM32CubeF1軟件庫使用入門

評(píng)論