用的是 stm8s discover开发板,嗯,就是说,MCU 是 stm8s105c6t6
对于stm8这种分IO口方向的片子,到底要怎么设置,才算的上 释放总线?
51的是双向口,写高就释放了,没什么。
但它呢?
输出方向,写高,算不算释放总线?
如果直接设置成 输入方向,是不是也等于释放了总线——因为它不再写出东西啊。
问题是出在,最近在它下面做一个 ds18b20的程序。
时序也调了,而且还用逻辑分析仪对着看,按道理,那时序是够严格的了。
但依然是,复位能找着器件,但是,读写就是不行,读出来的两个温度值始终是
0xff 0xff
用逻辑分析仪看了一下 协议分析,发现只有 复位时序,没有读也没有写,压根和网上看到的波形不一样。
不排除 逻辑分析仪质量有问题——其实我觉得不像。
我以前在51下做过,虽然也费了劲,但是做成功了,而且当时我都还不需要用 逻辑分析仪 调时序。
事儿搁着有几天了,着实很郁闷。
想了想,大概有两个原因:
1.我怀疑自己在淘宝上买的那10根不锈钢封装的ds18b20有猫腻。
所以对此,我另外买了四根ds18b20管子——不过,最近忙别的,所以也就先放着没动;
2.上面那个怀疑其实我自己也觉得不太靠谱,那想来想去,和之前51的区别,肯定就在于 IO口的模式上的理解了。
看了一些网上的资料,都说要 释放总线,但我想不明白,对于stm8这种分IO口方向的片子,到底要怎么设置,才算的上 释放总线?
51的是双向口,写高就释放了,没什么。
但它呢?
输出方向,写高,算不算释放总线?
如果直接设置成 输入方向,是不是也等于释放了总线——因为它不再写出东西啊。
查了查百度,翻了一下stm8s105c6t6的pdf和编程手册,还是没看到相关的介绍。
请知道的兄弟给指教指教,谢谢!
回复 楼主 辛昕 的帖子
你把SDA引脚外接上拉,设置成开漏输出高阻态,就可以当51用了。
回复 沙发 weikezhi 的帖子
SDA?
单总线只有一条数据线,是指连接那个的IO吧。
敢情,我设置成 IN_FL才是对的?!
回复 沙发 weikezhi 的帖子
stm8s 开漏是有了,但是,没见到写着是 开漏高阻。
另外,那输入呢,输入该设置什么方式?
是不是,有了外部上拉电阻以后,浮动输入就可以?
额,stm8s+ds18b20搞定了,问题有2:
1.我在封装gpio时,IO模式为了简化,我只选择了初始化方向后,默认为低电平状态。所以......虽然这个地方我也想不太通,但是,把默认状态选择为高以后,即释放电平,复位问题就解决了。
2.我封装的读写函数耗时太长,所以读信号慢了。
楼主能不能给我一个能用的18b20程序,我也遇到读出来全是1的情况。邮箱
1015043947@qq.com