請問STM8S103F3 PB.4/PB.5可以當一般Open Drain?
請問STM8S103F3 PB.4/PB.5可以當一般Open Drainpins 使用嗎?
若可以,是否如下設定即可?
// Init Port B
/*
101
7 6 5 4 3 2 1 0
| | | | | | | |
| | | |_________ I2C SCL (Output) Open drain output
| | |___________ I2C SDA (Output) Open drain output
DDR 0 0 1 1 0 0 0 0
CR1 0 0 0 0 0 0 0 0
CR2 0 0 0 0 0 0 0 0
*/
GPIOD->DDR = 0x30;
GPIOD->CR1 = 0x00;
GPIOD->CR2 = 0x00;
還有什麼要特別注意的事項嗎?
若PB.5 要當software I2C SDA (bit-banging) 使用時,
對於input read 狀況,該怎麼辦?
RE:請問STM8S103F3 PB.4/PB.5可以當一般Open Drain?
STM8S103F3的PB.4/PB.5可以当普通Open Drain端口使用。PB.5做软件I2C SDA时,要读入时需要先输出"1",然后直接读这个端口即可。:D
回复:請問STM8S103F3 PB.4/PB.5可以當一般Open Drain?
回复第 2 楼 香水城于2010-05-06 03:24:50发表:STM8S103F3的PB.4/PB.5可以当普通Open Drain端口使用。
PB.5做软件I2C SDA时,要读入时需要先输出"1",然后直接读这个端口即可。:D
感謝您指教!
請問
是說什麼要設為1呢? 是指 GPIO->ODR 或 GPIO->DDR bit 5 要設為1呢?
依據RM0016 Page 100, CMOS SCHMITT TRIGGER 要GPIOB->DDR 為0
且ADC-TDR 為1 才致能,也才可以讀取Pin 是吧?
所以將讀取SDA 程式改寫為:
bool I2C_GetSDA (void)
{
u8 bSDA;
// Init Port B
/*
101
7 6 5 4 3 2 1 0
| | | | | | | |
| | | |_________ I2C SCL (Output) Open drain output
| | |___________ I2C SDA (Input) Floating without interrupt
DDR 0 0 0 1 0 0 0 0
CR1 0 0 0 0 0 0 0 0
CR2 0 0 0 0 0 0 0 0
*/
GPIOB->DDR = 0x10;
//GPIOB->CR1 = 0x00;
//GPIOB->CR2 = 0x00;
bSDA = GPIOB->IDR & 0x20;
// Init Port B
/*
101
7 6 5 4 3 2 1 0
| | | | | | | |
| | | |_________ I2C SCL (Output) Open drain output
| | |___________ I2C SDA (Output) Open drain output
DDR 0 0 1 1 0 0 0 0
CR1 0 0 0 0 0 0 0 0
CR2 0 0 0 0 0 0 0 0
*/
GPIOB->DDR = 0x30;
//GPIOB->CR1 = 0x00;
//GPIOB->CR2 = 0x00;
return( bSDA );
} /* I2C_GetSDA */
這樣子對嗎? 我還遺漏什麼沒注意呢?
页:
[1]