PCA9535 IO扩展板使用记录

最近因项目需要,使用PCA9535扩展stm32的IO,这款芯片网上用的人不多,参考资料比较少,记一下遇到的坑。

 

首先,感谢这两位博主的博文,帮了我不少忙:

http://www.51hei.com/bbs/dpj-139466-1.html

https://blog.csdn.net/fhqlongteng/article/details/83542773#commentBox

下面说一下我遇到的坑:

PCA9535的配置和output设置很简单,使用I2C协议依照时序图发命令就行,没啥可说的,重点说一下读寄存器。

一、

关于read时序中的restart信号如何处理?

PCA9535 IO扩展板使用记录_第1张图片

如果你是用模拟I2C方式来操作PCA9535,那按照时序图发命令就行,如果你用的是stm32的官方固件库使用硬件I2C访问的话,那就需要修改接口了,因为固件库的HAL_I2C_Master_Receive接口内部固定是发送停止位的,而这里发完地址和命令后不能发送停止信号,所以需要将接口中的I2C_AUTOEND_MODE改为I2C_SOFTEND_MODE,即不自动发送停止信号,随后,再改成I2C_AUTOEND_MODE即可。

二、PCA9535的Int引脚中断问题:

如果你使用了Int作为外部触发中断的话,可能会遇到上电后该引脚一直为低电平且中断不触发的问题,我使用的是8 input和8 output,input全部接到按键上,8 output全部接到led上,原因就是 P0端口接LED灯时,芯片上电此端口默认为输入,读取到了LED灯上拉产生的电平,产生了中断,而如果你不先读取一次输入引脚的数据,Int中断引脚的状态就不会改变,导致你后面按键怎么按都不会有中断触发,因此,解决的方法就是初始化的时候先读取一次,即先手动清除该中断。

 

这玩意耗了我一周的时间,总算搞出来了,泪啊。。。

 

 

你可能感兴趣的:(STM32)