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

查看: 5282|回复: 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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版