之前存在使用stm32的经验,在stm32中,要模拟51的双向IO,是使用的开漏输出+上拉电阻完成的(M3核心需要外接上拉电阻)。所以在使用ch563时,我也如此去使用开漏输出。刚刚开始时,大概测试了下,发现在OUT设置为高电平时,PIN可以读到数据。以为就正常了。所以也就如此去使用了。
后来,在进行进一步测试时,发现读到的数据极不稳定,经常出现错误的数值,一开始以后是电路问题,各种检查完毕,也没发现问题。最后把CH563的手册翻出来再次细读,看到有一处对于PIN的提醒中写到,当为输出态时,PIN不可使用。之后也问了官方技术,说是他们一般做双向IO时,是切换方向来使用的。突然想到我那个不稳定的情况是否就是因为错误地使用了开漏输出来作为双向IO使用造成的。马上把代码改成了普通输出及普通输入切换方向的方式。数值一切正常了。不再出现不稳定的情况发生。
总结:CH563的开漏输出与stm32的开漏输出不同。不可在开漏输出时,作为输入来使用。CH563若需要实现双向IO,还是需要自行切换DIR寄存器来切换输入、输出方向。希望官方在手册上补上IO的简单原理图,这样也便于了解IO的工作原理。以避免出现类似的问题。