需要雙向IO時,慎用CH563的開漏輸出!

之前存在使用stm32的經(jīng)驗,在stm32中,要模擬51的雙向IO,是使用的開漏輸出+上拉電阻完成的(M3核心需要外接上拉電阻)。所以在使用ch563時,我也如此去使用開漏輸出。剛剛開始時,大概測試了下,發(fā)現(xiàn)在OUT設置為高電平時,PIN可以讀到數(shù)據(jù)。以為就正常了。所以也就如此去使用了。


后來,在進行進一步測試時,發(fā)現(xiàn)讀到的數(shù)據(jù)極不穩(wěn)定,經(jīng)常出現(xiàn)錯誤的數(shù)值,一開始以后是電路問題,各種檢查完畢,也沒發(fā)現(xiàn)問題。最后把CH563的手冊翻出來再次細讀,看到有一處對于PIN的提醒中寫到,當為輸出態(tài)時,PIN不可使用。之后也問了官方技術,說是他們一般做雙向IO時,是切換方向來使用的。突然想到我那個不穩(wěn)定的情況是否就是因為錯誤地使用了開漏輸出來作為雙向IO使用造成的。馬上把代碼改成了普通輸出及普通輸入切換方向的方式。數(shù)值一切正常了。不再出現(xiàn)不穩(wěn)定的情況發(fā)生。


總結:CH563的開漏輸出與stm32的開漏輸出不同。不可在開漏輸出時,作為輸入來使用。CH563若需要實現(xiàn)雙向IO,還是需要自行切換DIR寄存器來切換輸入、輸出方向。希望官方在手冊上補上IO的簡單原理圖,這樣也便于了解IO的工作原理。以避免出現(xiàn)類似的問題。



j_0057.gif


雖然一般情況下,我們提供的例程和技術支持都是推薦在輸入輸出是通過DIR寄存器進行方向切換,但是根據(jù)與你反映的情況,專門進行了測試,結論是開漏輸出時并不影響輸入;

開漏輸出,要么輸出低電平,要么是浮空狀態(tài),所以要輸出高電平,需要上拉電阻,這個電阻可以通過啟用內部上拉或者外部加上拉(我這邊測試加的是10K);

測試時比如通過PA口的PA1輸出,PA1進行檢測輸入,測試代碼如下:

? ? R32_PA_PD ?|= 0xffffffff; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? R32_PA_DIR |= 0xffffffff;?? /* GPIO A置開漏輸出*/ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? while(1){

R32_PA_OUT |= 2;

Delay_us(2);

? ? ? ? if(R32_PA_PIN&1) ;

? ? ? ? else printf("0 ?");?

Delay_ms(1);

R32_PA_OUT &= 0xfffffffd;

Delay_us(2);

? ? ? ? if(!(R32_PA_PIN&1)) ;

? ? ? ? else printf("0 ?");?

Delay_ms(1);

? ? }?



只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频