基于STM32的pca9535、pca9555IO扩展板开发

这篇具有很好参考价值的文章主要介绍了基于STM32的pca9535、pca9555IO扩展板开发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

之前使用的pca9535由于芯片本身有些中断问题和采购问题,目前换成了pca9555的IO扩展芯片来使用,本文章适用于这两款芯片。


一、开发环境

编译器: keil5
工程库: HAL库
芯片型号:STM32F072

二、开发流程

开发手册解析及使用

pca9535和pca9555基本一样,这里我就主要说9535的手册了。
手册下载地址网上有很多,直接去百度搜索就行了。

1、芯片I2C地址如何确定
9555中断,stm32,单片机,arm,mcu,物联网
如图,A2、A1、A0和其他5位共同决定了I2C的地址,其中A2、A1、A0一般硬件直接接地,在配置地址的时候需要确认这3位的状态。我这里这3位是0。所以I2C地址是0x40。

1、芯片寄存器地址
9555中断,stm32,单片机,arm,mcu,物联网
命令字节要在写入的时候跟随地址字节的第一个字节一起传到芯片内,分别是:
输入端口 0 → 0
输入端口 1 → 1
输出端口 0 → 2
输出端口 1 → 3
极性反转端口 0 → 4
极性反转端口 1 → 5
配置端口 0 → 6
配置端口 1 → 7

每个端口对应的命令字节不同,可以根据自己的需求去配置这些端口,我这里就简单的配置IO为输入输出模式。

9555中断,stm32,单片机,arm,mcu,物联网
上图说明要配置成输出模式需要将配置寄存器(6和7寄存器)的相应位置成0,要配置成输入模式要将相应位置1。

// PCA9535命令宏
#define  PCA9535_INPUT_PORT0_REG        0
#define  PCA9535_INPUT_PORT1_REG        1
#define  PCA9535_OUTPUT_PORT0_REG       2
#define  PCA9535_OUTPUT_PORT1_REG       3
#define  PCA9535_INVERSION_PORT0_REG    4
#define  PCA9535_INVERSION_PORT1_REG    5
#define  PCA9535_CONFIG_PORT0_REG       6
#define  PCA9535_CONFIG_PORT1_REG       7
#define  PCA9535_CONFIG_VAL0      0xE0
#define  PCA9535_CONFIG_VAL1      0xFB 

uint8_t Pca9535_Init(void)
{

	uint8_t w_data[] = {0x00, 0x00, 0x00};
	uint8_t r_data[] = {0x00, 0x00};

	// 上电先读取一次清除中断标志
	memset(w_data, 0, sizeof(w_data));
	
	pca9535_read(PCA9535_INPUT_PORT0_REG, r_data, 2);
	
	// 配置PCA9535 端口,即写配置寄存器,数据格式为:地址 + CMD + 8 input + 8 output
	w_data[0] = PCA9535_CONFIG_PORT0_REG;   //config_port0 寄存器
	w_data[1] = PCA9535_CONFIG_VAL0;
	w_data[2] = PCA9535_CONFIG_VAL1;
	if (HAL_OK != pca9535_write(w_data, sizeof(w_data)))
	{
		pca9535_write(w_data, sizeof(w_data));
		pr_debug(0x03,"pca9535_write error\n");
		return 0;
	}
   	return 1;
}

IO口模式配置成功后需要进行输入的读取和输出的设置。

tips:在进行初始化前,一定要先读取一遍寄存器再进行写寄存器。原因是需要先清除中断。

如上我就是把P07,P06,P05配置成了输入模式,P04,P03,P02,P01,P00配置成了输出模式;把P1中除了P12配置成了输出其余都配置成了输入模式。

IO输出设置:

uint8_t io_out(void)
{
		uint8_t data[] = {0x00, 0x00};		
		data[0] = PCA9535_OUTPUT_PORT0_REG;   
		data[1] = 0xfe; 
		if (HAL_OK != pca9535_write(led_data, sizeof(led_data)))
		{
			printf("pca9535 write error\n");
			return 0;
		}
		return 1;
}

如上则是把P00设置成了低电平,其余都是P0口都是高电平。

进行写寄存器的时候直接写即可:

HAL_StatusTypeDef pca9535_write(uint8_t *pData, uint16_t size)
{
	return (HAL_I2C_Master_Transmit(&hi2c1, PCA9535_ADDR, pData, size, 1000));
}

在进行读寄存器的时候需要看一下官方的iic时序,他是发了command + data0 +data1后再发送的stop命令。
我这里调用的hal库进行读寄存器,则需要改一下官方的 HAL_I2C_Master_Receive 函数后才能调用。

pca9535_read()读取的代码比较多,我这里就不上传了。需要的私信我即可。


总结

pca9535这款芯片里面还是有些小坑的,在进行stm32开发时要注意中断问题,和iic读取问题,如若用成中断触发,还需要添加以下错误机制,在我使用的时候还是发生过偶尔芯片初始化不正确,或者使用中读寄存器值不对的状态。文章来源地址https://www.toymoban.com/news/detail-671923.html

创作不易,请大佬们点个赞!
有问题请留言讨论!

到了这里,关于基于STM32的pca9535、pca9555IO扩展板开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【雕爷学编程】Arduino动手做(133)---LCD1602扩展板模块

    7款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与

    2024年02月11日
    浏览(42)
  • 【雕爷学编程】Arduino动手做(174)---Sensor Shield V5.0传感器扩展板

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)

    2024年02月15日
    浏览(46)
  • 微信小程序+UDP+wifi8266+l293d扩展板+Arduino uno遥控小车

    序言 前面突然看到自己已经落灰的Arduino板子,感觉自己必须做点什么。正好手上有个8266的模块、有个焊接接好的小车、有个落灰的Arduino板子,好巧。正好前几天上过一篇8266模块和微信小程序进行UDP通信的博文,一切都正好,那开搞吧。 前置知识需要的不多 至少要去看看微

    2024年02月09日
    浏览(47)
  • 树莓派POE以太网供电扩展板模块可接风扇支持802.3af支持3B+/4B

    这是一款适用于 Raspberry Pi 3B+/4B 的以太网供电 (PoE) 迷你扩展板,支持 IEEE 802.3af 网络标准。如果已有支持 IEEE 802.3af 网络标准的 PoE 路由器或交换机,搭配本扩展板,只需一根网线接入即可让树莓派实现联网和供电。 []  适用于 Raspberry Pi 3B+/4B,可搭配树莓派官方外壳一起使用

    2024年02月16日
    浏览(47)
  • stm32 AW9523B IO扩展芯片扩展io口驱动程序

    对AW9523B驱动模块进行初始化 对AW9523B驱动模块进行操作 初始化AW9523B单个引脚 读取AW9523B单个引脚 读取AW9523B单个端口 用于存储单个ic中的数据,如需管理更多的结构体,可以再增加定义 3060793968@qq.com 

    2024年01月20日
    浏览(43)
  • 24.STM32的IO口扩展PCF8574

    PCF8574是一款带IIC总线,可使大多数MCU实现远程I/O 口扩展。 该器件包含一个8位准双向口和一个IIC总线接口。(通信接口IIC,2根线可以扩展为8个口) PCF8574电流消耗很低,输出锁存具有大电流驱动能力可直接驱动LED 它还带有一条中断接线(INT)可与MCU的中断逻辑相连,通过

    2024年02月03日
    浏览(30)
  • Freertos-mini智能音箱项目---IO扩展芯片PCA9557

            项目上用到的ESP32S3芯片引脚太少,选择了PCA9557扩展IO,通过一路i2c可以扩展出8个IO。这款芯片没有中断输入,所以更适合做扩展输出引脚用,内部寄存器也比较少,只有4个,使用起来很容易。 输入寄存器   输出寄存器  极性颠倒寄存器    配置寄存器       

    2024年02月13日
    浏览(36)
  • 基于STM32与PCA9685制作四足机器人(代码开源)

            前言: 本文为手把手教学 基于STM32的四足机器人项目 —— JDY-31蓝牙控制 ,特别地,本次项目 采用的是 STM32 作为 MCU 。 四足机器人的支架为 3D打印件 , SG90舵机 驱动机器人实现姿态运动。借助 PCA9685舵机驱动板 实现 12路PWM波 控制, 更多的舵机 可以实现机器人

    2024年02月03日
    浏览(70)
  • STM32--PCA9685驱动(16路舵机驱动模块)

    目录 PCA9685接线: PCA9685简介: PCA9685地址位寄存器: MODE1寄存器,地址0x00,可读、可写: 寄存器地址: PCA9685代码注解: 1.PCA9685数据写入:  2.PCA9685数据读取: 3.PCA9685的频率设置: 4.PCA9685的PWM设置: 舵机转动角度置换: PCA9685驱动代码: main.c程序: IIC驱动:(正点原子

    2024年03月25日
    浏览(46)
  • stm32中如何使用PCA9685控制舵机(详解)

    最近在公司实习,都说跨入职场是让人进步最快的方式,记录一下我自学加同学指点学到新知识。 PCA9685是一个基于IIC通信的16路PWM输出模块,可以在单片机资源不足的情况下进行扩展使用。 i2c通信,只需要2根i2c线就可以控制16路pwm,周期和占空比都可控。 可以多个模块级联

    2024年02月06日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包