梳理STM32F429之通信传输部分---NO.6 软件IIC

目录

 

一、STM32 的 I2C 特性及架构:

二、软件IIC的引脚初始化及IIC配置:

三、利用IIC写EEPROM的读写函数:


一、STM32 的 I2C 特性及架构:

1、STM32 的 I2C 外设简介:

       STM32 的 I2C 外设可用作通讯的主机及从机,支持 100Kbit/s 和 400Kbit/s 的速率,支持 7 位、 10 位设备地址,支持 DMA 数据传输,并具有数据校验功能。它的 I2C 外设还支持 SMBus2.0 协议, SMBus 协议与 I2C 类似,主要应用于笔记本电脑的电池管理中,本教程不展开,感兴趣的读者可参考《SMBus20》文档了解。

2、STM32 的 I2C 通讯引脚:

3、通讯过程:

       使用 I2C 外设通讯时,在通讯的不同阶段它会对“状态寄存器(SR1 及 SR2)”的不同数据位写入参数,我们通过读取这些寄存器标志来了解通讯状态。

① 主发送器
作为 I2C 通讯的主机端时,向外发送数据时的过程。


② 主接收器:
作为 I2C 通讯的主机端时,从外部接收数据的过程,见下图:

二、软件IIC的引脚初始化及IIC配置:

 ① 软件IIC的引脚初始化

#ifndef _BSP_I2C_GPIO_H
#define _BSP_I2C_GPIO_H

#include "stm32f4xx.h"
#include <inttypes.h>


#define EEPROM_I2C_WR	0		/* 写控制bit */
#define EEPROM_I2C_RD	1		/* 读控制bit */


/* 定义I2C总线连接的GPIO端口, 用户只需要修改下面4行代码即可任意改变SCL和SDA的引脚 */
#define EEPROM_I2C_GPIO_PORT            GPIOB			/* GPIO端口 */
#define EEPROM_I2C_GPIO_CLK			    RCC_AHB1Periph_GPIOB		/* GPIO端口时钟 */
#define EEPROM_I2C_SCL_PIN			    GPIO_Pin_6			/* 连接到SCL时钟线的GPIO */
#define EEPROM_I2C_SDA_PIN			    GPIO_Pin_7			/* 连接到SDA数据线的GPIO */


/* 定义读写SCL和SDA的宏,已增加代码的可移植性和可阅读性 */
	#define EEPROM_I2C_SCL_1()  GPIO_SetBits(EEPROM_I2C_GPIO_PORT, EEPROM_I2C_SCL_PIN)		/* SCL = 1 */
	#define EEPROM_I2C_SCL_0()  GPIO_ResetBits(EEPROM_I2C_GPIO_PORT, EEPROM_I2C_SCL_PIN)		/* SCL = 0 */
	
	#define EEPROM_I2C_SDA_1()  GPIO_SetBits(EEPROM_I2C_GPIO_PORT, EEPROM_I2C_SDA_PIN)		/* SDA = 1 */
	#define EEPROM_I2C_SDA_0()  GPIO_ResetBits(EEPROM_I2C_GPIO_PORT, EEPROM_I2C_SDA_PIN)		/* SDA = 0 */
	
	#define EEPROM_I2C_SDA_READ()  GPIO_ReadInputDataBit(EEPROM_I2C_GPIO_PORT, EEPROM_I2C_SDA_PIN)	/* 读SDA口线状态 */


void i2c_Start(void);               // 开始信号
void i2c_Stop(void);                // 停止信号
void i2c_SendByte(uint8_t _ucByte); // 发送一字节
uint8_t i2c_ReadByte(void);         // 读取数据
uint8_t i2c_WaitAck(void);          // 等待应答
void i2c_Ack(void);                 // 应答信号
void i2c_NAck(void);                // 非应答信号
uint8_t i2c_CheckDevice(uint8_t _Address);  // 检测I2C总线设备


#endif
/*
*******
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值