請問STM8S103F3 PB.4/PB.5可以當一般Open Drain pins 使用嗎? 若可以,是否如下設定即可? // Init Port B /* [2]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 狀況,該怎麼辦? |
从零开始操作STM8寄存器(风驰iCreate奉献)
【中文资料】初学STM8库函数的中文帮助软件
绝对经典的中文STM8学习手册,淘宝上学习板资料,友情大放送!
【原创教程】风驰iCreate独家开源STM8 27个例程和10多万字的pdf教程
STM8的LCD1602 4线驱动,为什么不工作
【精华资料】由零开始开发STM8
STM8S 的触摸库是如何在主程序中查询键的呢、
【精华资料】STM8的C语言编程1-14讲完整版
【精品教程】STM8系列单片机入门教程系列
STM8 第一次进中断不准【悬赏问答】
RE:請問STM8S103F3 PB.4/PB.5可以當一般Open Drain?
PB.5做软件I2C SDA时,要读入时需要先输出"1",然后直接读这个端口即可。
回复:請問STM8S103F3 PB.4/PB.5可以當一般Open Drain?
STM8S103F3的PB.4/PB.5可以当普通Open Drain端口使用。
PB.5做软件I2C SDA时,要读入时需要先输出"1",然后直接读这个端口即可。
感謝您指教!
請問
是說什麼要設為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
/*
[2]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
/*
[2]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 */
這樣子對嗎? 我還遺漏什麼沒注意呢?