最近用GD32F103RCT6做项目,用了3个485收发器,都是直接接在单片机IO上的。
485收发器是5V供电的,这个时候就出现5V电平和3.3V电平兼容的问题了。
一开始只用了PA10、PC11这两个串口,他俩是兼容5V的,从手册可以看出IO最大允许输入5.5V。
但是PA3是不兼容5V的,最大允许输入电压为4V,输入5V就会有问题。
我往PA3输入5V后,发生了如下异常现象:
单片机的PA3配置为串口接收,PC1我是用来配置为ADC采集外面的模拟信号,因此GPIO模式配置为:
/* connect port to USARTx_Rx */gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_3);/* config the GPIO as analog mode */gpio_init(GPIOC, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
程序运行起来后,用万用表测量PC1能否测量到3.9V的电压。因为单片机是3.3V供电的,因此当时觉得很神奇,后面排查到才发现是IO灌入5V的原因。
解决方法当然就是不要往不兼容5V电平的IO灌入超过4V的电压了。
1、可以使用电平转换芯片把5V转成3.3V再输入。
2、可以使用二极管和电阻的组合,把输入电压钳位在4V以下。
3、可以使用稳压二极管钳位