打印
[STM8]

关于STM8S103的GPIO问题。

[复制链接]
1695|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 蝙蝠侠 于 2016-11-7 11:59 编辑

现在MCU上PB5 从示波器看到外接设备会发送电平数据,将我PB5拉低(或拉高)
PB5外接上拉电阻常态下为高。

现在问题是我可以从示波器看到外接设备发送过来的一连串电平信号。但是用GPIO_ReadInputPin()这个函数读不到低电平,可以读到高电平。

请问下论坛的前辈们有什么看法或建议吗?
2016/11/05
@拉普拉斯:
对应管脚设置为上拉输入模式,然后调用读取该管脚电平函数

2016/11/06
@xyz549040622:GPIO_MODE_IN_PU_NO_IT
这个就是输入模式,直接加上拉和输入模式不是一码事,你这里配置为输入模式就好了。

谢谢,因为你们的帮助,有新进展了!
我把前面的那些us级延时全去掉了。做了一个检测高电平,非高电平跳出的while。
确实奏效了,示波器可能看到PC6在每一次单总线通讯周期都会取反。


但是有个问题就是我想接收后面的那些数据,将它们(共40位电平数据)以0、1的形式存入数组。
但是数据本身不是0、1那么简单。。。。
数据格式在跟帖贴出了。





沙发
xyz549040622| | 2016-11-4 20:41 | 只看该作者
这个函数用过,肯定是可以用的。设置为输入IO了吗?觉得是这里的问题

使用特权

评论回复
板凳
jekey| | 2016-11-4 20:52 | 只看该作者
这个端口的时钟未使能吧。

使用特权

评论回复
地板
皈依| | 2016-11-5 08:44 | 只看该作者
示波器看看你输入的电平是不是低电平

使用特权

评论回复
5
蝙蝠侠|  楼主 | 2016-11-5 10:28 | 只看该作者
xyz549040622 发表于 2016-11-4 20:41
这个函数用过,肯定是可以用的。设置为输入IO了吗?觉得是这里的问题

请问设置成输入IO  应该怎么设置?
我现在用这块单片机和外接设备做单总线通讯。释放SDA线后,直接就能接收到外接设备的电平信号。
所以想问下 是不是拉高就是 你所说的 设置为输入IO 了?

使用特权

评论回复
6
蝙蝠侠|  楼主 | 2016-11-5 10:32 | 只看该作者
皈依 发表于 2016-11-5 08:44
示波器看看你输入的电平是不是低电平

后面那串就是外接设备 发送过来的电平信号。

SDA外接上拉电阻 默认是高电平的。

54590477167245348.jpg (458.22 KB )

54590477167245348.jpg

使用特权

评论回复
7
皈依| | 2016-11-5 10:40 | 只看该作者
信号挺好的。。。你是怎么判断读不到低电平的?

使用特权

评论回复
8
蝙蝠侠|  楼主 | 2016-11-5 10:42 | 只看该作者
xyz549040622 发表于 2016-11-4 20:41
这个函数用过,肯定是可以用的。设置为输入IO了吗?觉得是这里的问题

从现象看的话  只要将SDA 拉高 就进入输入模式了。
只是接收到的数据,低电平 读取不到。
现在我更加确定可能是延时的问题了。

使用特权

评论回复
9
蝙蝠侠|  楼主 | 2016-11-5 10:45 | 只看该作者
这是该外接模块的单总线通讯时序
本来想用I2C的 现在看来 读不到低电平 想都别想了。。。。

QQ截图20161105104404.png (104.54 KB )

QQ截图20161105104404.png

使用特权

评论回复
10
蝙蝠侠|  楼主 | 2016-11-5 10:50 | 只看该作者
uint8 BufCnt;
AM2322_AnsFlag = 0;                                                //传感器响应标志       
SDA_OUT();
GPIO_WriteLow(I2C_PORT,I2C_SDA);                //起始信号:拉低 SDA 1ms
delay_ms(1);               
GPIO_WriteHigh(I2C_PORT,I2C_SDA);                //释放总线: 30 us
delay_us(30);                                       
GPIO_WriteHigh(I2C_PORT,I2C_SDA);                //设置为输入
delay_us(5);
if((GPIO_ReadInputPin(I2C_PORT,I2C_SDA)) ==0 )
{
        GPIO_WriteReverse(GPIOC,GPIO_PIN_6);
}

示波器的现象来看,SDA被该传感器拉低了80us。
  但是我这里读不到这个拉低信号  我做了PC6的电平取反。没有任何反应。

使用特权

评论回复
11
拉普拉思| | 2016-11-5 14:37 | 只看该作者
蝙蝠侠 发表于 2016-11-5 10:50
uint8 BufCnt;
AM2322_AnsFlag = 0;                                                //传感器响应标志       
SDA_OUT();

//设置为输入
对应管脚设置为上拉输入模式,然后调用读取该管脚电平函数

使用特权

评论回复
12
HARRY007| | 2016-11-5 17:20 | 只看该作者
PB4和PB5如果外接设备需要使用的话,要注意这两个引脚是真开漏,所以必须要接上拉电阻。剩下的配置就是输入输出模式的切换了。

使用特权

评论回复
13
蝙蝠侠|  楼主 | 2016-11-5 17:27 | 只看该作者
HARRY007 发表于 2016-11-5 17:20
PB4和PB5如果外接设备需要使用的话,要注意这两个引脚是真开漏,所以必须要接上拉电阻。剩下的配置就是输入 ...

你好 是接了上拉电阻  输入输出 也已经实现了(上图 波形 就是外接模块发过来的电平信号)

使用特权

评论回复
14
蝙蝠侠|  楼主 | 2016-11-5 17:30 | 只看该作者
拉普拉思 发表于 2016-11-5 14:37
//设置为输入
对应管脚设置为上拉输入模式,然后调用读取该管脚电平函数 ...

  GPIO_MODE_IN_FL_NO_IT      = (u8)0b00000000,  /*!< Input floating, no external interrupt */
  GPIO_MODE_IN_PU_NO_IT      = (u8)0b01000000,  /*!< Input pull-up, no external interrupt */
  GPIO_MODE_IN_FL_IT         = (u8)0b00100000,  /*!< Input floating, external interrupt */
  GPIO_MODE_IN_PU_IT         = (u8)0b01100000,  /*!< Input pull-up, external interrupt */

请问这几个哪个是你说的上拉输入模式?

使用特权

评论回复
15
xyz549040622| | 2016-11-6 08:26 | 只看该作者
蝙蝠侠 发表于 2016-11-5 17:30
GPIO_MODE_IN_FL_NO_IT      = (u8)0b00000000,  /*!< Input floating, no external interrupt */
  GP ...

GPIO_MODE_IN_PU_NO_IT
这个就是输入模式,直接加上拉和输入模式不是一码事,你这里配置为输入模式就好了。

使用特权

评论回复
16
蝙蝠侠|  楼主 | 2016-11-7 11:43 | 只看该作者
xyz549040622 发表于 2016-11-6 08:26
GPIO_MODE_IN_PU_NO_IT
这个就是输入模式,直接加上拉和输入模式不是一码事,你这里配置为输入模式就好 ...

谢谢,因为你们的帮助,有新进展了!
但也有新问题了

使用特权

评论回复
17
蝙蝠侠|  楼主 | 2016-11-7 11:45 | 只看该作者
while((GPIO_ReadInputPin(I2C_PORT,I2C_SDA)) == 1 )
{
}
if((GPIO_ReadInputPin(I2C_PORT,I2C_SDA)) == 0)
{
        GPIO_WriteReverse(GPIOC,GPIO_PIN_6);


我把前面的那些us级延时全去掉了。 后面改成直接检测非高电平。
确实奏效了! 示波器可能到PC6在每一次单总线通讯周期都会取反!

使用特权

评论回复
18
蝙蝠侠|  楼主 | 2016-11-7 12:00 | 只看该作者
本帖最后由 蝙蝠侠 于 2016-11-7 12:01 编辑

这就是该模块发过来的电平数据格式。
貌似需要好精确的us级延时。这个咋办啊?
一共40 bit 的数据  5个字节

1234.png (45.99 KB )

1234.png

使用特权

评论回复
19
蝙蝠侠|  楼主 | 2016-11-10 14:42 | 只看该作者
谢谢各位的帮助,问题解决了,是延时出错了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

51

帖子

0

粉丝