没有先设置IO口为输入模式,直接读取IO口电平,行吗?

本人参考《CH32V103应用教程——I2C-软件模拟I2C读写EEPROM》 (原网址:21ic电子技术开发论坛? https://bbs.21ic.com/icview-3060796-1-1.html)一文,通过修改,成功驱动了TM1637四位数码管,但在设置IO口时,IO口模式均设置为GPIO_Mode_Out_PP (推挽输出模式),如果按原文设置的开漏输出模式则无法点亮数码管(https://bbs.21ic.com/icview-3301228-1-1.html),这也许是TM1637的DIO和CLK引脚没有上拉电阻吧?

而在读取DIO(原文是SDA)引脚,原代码为:

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
uint8_t bitstatus = 0x00;

if ((GPIOx->INDR & GPIO_Pin) != (uint32_t)Bit_RESET)
{
bitstatus = (uint8_t)Bit_SET;
}
else
{
bitstatus = (uint8_t)Bit_RESET;
}

return bitstatus;
}

这读取的过程貌似不用先设置引脚为输入模式后再读取的。

请问,如果该引脚设置为推挽输出模式,而外设拉低了这个引脚(甚至短路到GND端),这会不会损坏芯片IO口?

只要IO口不配置成模拟输入,其他的模式都可以读取端口的电平状态,对于你说的会不会损坏IO口,这样相当于短路了,电流很大,可能会有100mA,芯片都可能烧坏,所有对于接外部电平的话,不要直连到VCC,或者GND。


这么说,IO口设置成开漏输出模式+外接上拉电阻,比起推挽输出模式更保险。或者,在读取之前,先将IO口设置成数字输入。


如果IO口设置成GPIO_Mode_IPU,该引脚的输出电平应该无法控制吧?

还有一个问题,就是CH32V103内部的上拉电阻大约是多少K?


您好,若需要控制引脚输出高低电平,需配置在输出模式下。关于V103内部的上拉电阻,可参考数据手册IO端口特性介绍那一小节,如下图。数据手册下载链接如下:

https://www.wch.cn/downloads/CH32V103DS0_PDF.html?

image.png


只有登录才能回复,可以选择微信账号登录