你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 5238|回复: 2

請問STM8S103F3 PB.4/PB.5可以當一般Open Drain?

[复制链接]

7

主题

6

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
发表于 2010-5-6 00:19:08 | 显示全部楼层 |阅读模式
請問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 狀況,該怎麼辦?
回复

使用道具 举报

1

主题

39

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2010-5-6 11:24:50 | 显示全部楼层

RE:請問STM8S103F3 PB.4/PB.5可以當一般Open Drain?

STM8S103F3的PB.4/PB.5可以当普通Open Drain端口使用。
PB.5做软件I2C SDA时,要读入时需要先输出"1",然后直接读这个端口即可。
回复 支持 反对

使用道具 举报

7

主题

6

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
 楼主| 发表于 2010-5-9 14:15:04 | 显示全部楼层

回复:請問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",然后直接读这个端口即可。 

感謝您指教!
請問

是說什麼要設為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 */
這樣子對嗎? 我還遺漏什麼沒注意呢?
 
回复 支持 反对

使用道具 举报

关于 意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
st-img 微信公众号
st-img 手机版