查看oled.c,可以看到是模拟iic,这些都可以注释不要,我们使用的是iIC,不是模拟。 HAL_I2C_Mem_Write() IIC写固定的设备写入数据。 记得导入#include "i2c.h" 将HAL_I2C_Mem_Write函数放入oled.c中。 例如将Write_IIC_Command函数修改为HAL_I2C_Mem_Write发送方式。 向0x78设备写命令0x00的IIC_Command指令。
STM32这边使用硬件I2C1(PB6、PB7),并外接上拉电阻。 2 软件编程 根据STM32数据参考手册,I2C作为从设备时发送和接收的流程如下: 测试例程:定义一个256字节的buffer用来存放I2C从机的数据,默认赋初值0-255,然后通过中断的方式实现I2C数据读写。 示例代码如下: #include "stm32f10x.h" #include "stm32f10x_gp...
引脚I2C1I2C2 SCLPB5(默认)/PB8(重映射)PB10 SDAPB6(默认)/PB9(重映射)PB11 需要注意的是:在 SMBus 模式下, SMBALERT 是可选信号。如果禁止了 SMBus ,则不能使用该信号。 SMBus (System Management Bus,系统管理总线) 是1995年由Intel提出的,应用于移动PC和桌面PC系统中的低速率通讯。希望通过一条廉价...
PB8 --> IIC_SCL PB9 --> IIC_SDA 主要库函数调用: #define sda_in() {GPIOB->MODER&=~(3<<(9*2));GPIOB->MODER|=0<<9*2;}#define sda_out() {GPIOB->MODER&=~(3<<(9*2));GPIOB->MODER|=1<<9*2;}#define iic_sda_out(x) PBout(9)=x#define iic_scl_out(x) PBout(8)...
最近一段时间在做I2C通信协议,需要在两块STM32之间做I2C通信,定的是主机用IO口模拟,从机用的是STM32的硬件I2C,我的项目要求是需要主从机之间能够进行一串数据收发而不出错,实验时在主机方面,利用IO口模拟主机,只需要理解时序就够了,同时将速度能够控制在100K(标准)左右,基本的时序理解网上大把的资料,所以主机这一...
软件I2C是指用普通GPIO口,手动(软件)翻转电平实现协议,并不需要STM32内部的外设资源支持,所以GPIO端口可以任意指定,这里SCL是PB10,SDA是PB11。只需要用到GPIO的函数,用不到配置I2C的库函数。硬件电路不需要上拉电阻了,因为芯片内部已经自带了。 广告 MB-102 面包板+电源模块+65条面包板线 连接线实验板洞 拼多多...
实验目的:本实验通过GPIO模拟I2C总线时序,对EEPROM设备AT24C02进行读写操作。 引脚初始化:GPIO端口时钟使能、GPIO引脚设置为输入/输出模式(PB6、PB7); 封装I2C每个环节的时序函数:起始信号、响应信号、读写数据、停止信号; 使用I2C协议函数,实现对AT24C02的读写; ...
I2C通信时的基本数据单位也是以字节为单位的,每次传输的有效数据都是1个字节(8位)。 起始位及其后的8个CLK中都是主设备在发送(主设备掌控总线),此时从设备只能读取总线,通过读总线来得知主设备发给从设备的信息;然后到了第9周期,按照协议规定从设备需要发送ACK给主设备,所以此时主设备必须释放总线(主设备把总线置...
从模式时,I2C接口能识别它自己的地址(7位或10位)和广播呼叫地址。软件能够控制开启或禁止广播呼叫地址的识别。 数据和地址按8位/字节进行传输,高位在前。跟在起始条件后的1或2个字节是地址(7位模式为1个字节,10位模式为2个字节)。地址只在主模式发送。