- 博客(8)
- 收藏
- 关注
原创 软件IIC
void OLED_DrawBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char *BMP1)//x0,y0是起始点,x1,y1右下角点在调用时候为什么要类型转换在你提供的代码中,函数的参数是一个类型,而你所传递的BMP1是一个类型的数组。
2025-03-19 11:35:42
499
原创 关于IIC通讯过程中各事件标志位变化
TXE位主要反映数据寄存器的状态,而ADDR位则关乎设备地址的确认状态。- **置0**: 在ACK信号被接收并确认后,ADDR位会自动被清零,表示该地址交互完成,可以进行数据传输。- 一旦数据从DR成功发送到SDA线,TXE位会再次被置为1,说明数据寄存器是空的,可以接受新的数据。- **置1**: 发送设备地址后,ADDR位被置为1,表示地址发送完成并已确认。- **置1**: 当数据注册的内容被发送到SDA线后,TXE位变为1。- **置零**: 当您写入数据到数据寄存器DR时,TXE位变为0。
2025-03-18 10:59:47
482
原创 I2C_Send7bitAddress(I2C1,OLED_ADDRESS,I2C_Direction_Transmitter);//发送器件地址为什么是0x78
在I2C通信中,发送设备地址时需要注意设备地址的表示。在您的示例中,如果的值为0x78,这个地址在I2C通信过程中被用作7位地址,实际发送到I2C总线上的地址为8位。我们来看看这个过程的详细解释。
2025-03-18 10:37:47
971
1
原创 为什么使用I2C_DeInit(I2C1)在函数初始化之前?
在重新初始化 I2C 之前是一种预防措施,确保I2C外设的初始化过程是干净的和可靠的。这种方式可以避免先前配置导致的问题,提高代码的稳定性和可预测性。在进行I2C初始化之前重置设备,可以确保每次配置都是在清晰且不受干扰的状态下进行的,这有助于简化调试过调用。
2025-03-18 10:21:52
306
原创 为什么IIC引脚输出模式为复用开漏输出呢?
总结来说,I2C通信需要使用开漏输出,原因在于它的设计允许多个设备通过共享信号线进行通信,而不产生冲突。这使得I2C协议非常适合多主多从的应用场景。配置引脚为开漏模式并使用上拉电阻确保了线的高电平状态和总线的稳定性。如果使用推挽(Push-Pull)输出模式,则可能同时有两个设备试图驱动线路,导致信号冲突,可能损坏设备。为什么?在I2C总线通信中,如果使用推挽(Push-Pull)输出模式来驱动信号线,会引发多个设备之间的冲突,这可能导致设备损坏或信号完整性问题。
2025-03-18 10:04:28
1976
原创 IIC通讯过程
硬件实现协议:由STM32的IIC上外设专门负责实现IIC通讯协议,只要配置好该外设,它会自动根据协议要求产生通讯信号,收发数据并缓存起来,CPU只要检测该外设的状态和访问数据寄存器,就能完成数据收发。·往IIC的数据寄存器DR写入要发送的数据,这时TXE位会被充值0,表示数据寄存器非空,IIC外设通过SDA信号线一位位把数据发送出去后,又会产生EV8事件,即TXE被置1,重复这个过程,可发送多个字节。SCL线的时钟信号,由IIC接口根据时钟控制寄存器(CCR)控制,控制的参数主要为时钟频率。
2025-03-18 10:00:28
532
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅