草庐IT

stm32的IIC协议以及IIC通信驱动OLED屏幕

    最近,一直在搞stm32开发板,今天涉及到了OLED屏幕与IIC协议,记录一下学习过程。    I2C总线是一种总线标准,由数据线SDA和时钟线SCL构成通信线路,既可用于发送数据,也可接收数据,是一种半双工通信协议。总线上的主设备与从设备之间以字节(8位)为单位进行双向的数据传输。        主机启动总线,并产生时钟用于传送数据,此时任何接收数据的器件均被认为是从机。I2C器件一般采用开漏结构与总线相连,所以I2C_SCL和I2C_SDA均需接上拉电阻,也正因此,当总线空闲时,这两条线路都处于高电平状态,当连到总线上的任一器件输出低电平,都将使总线拉低。     关于具体的读写操

ZYNQ PS与PL通过AXI-LITE连接,在Linux下直接读写PL的物理地址,实现PS与PL的交互

一、前言ZYNQ开发,如果PL与PS的交互方式仅为AXI-Lite总线的话,在Linux下可以通过直接访问PL的寄存器物理地址来实现PS-PL的数据交互。测试代码的PC开发平台为Ubuntu18.04,QT5。ZYNQ为7020,并移植了Linux系统和Ubuntu16.04的最小系统。二、PL的设计将PL的程序封装成IP核,通过AXI-LITE与PS连接,对外是18个寄存器,每个寄存器为32位。寄存器定义是:寄存器0-7用来接收数据,寄存器8的最高位代表数据到来,寄存器9-16用来发送数据,寄存器17的最高位代表发送使能。程序逻辑比较简单,检测到接收信号后,将数据回传回去。xPAA#( .P

IIC通信为什么使用开漏输出+上拉电阻的模式

目录前言一、什么是开漏输出和推挽输出推挽输出和开漏输出二、开漏和推挽的区别三、开漏输出上下拉电阻应用总结前言最近遇到技术群里有小伙伴在问为什么IIC通信需要挂上拉电阻,查阅了一些资料做一个小结留作备用。方便后面复习。一、什么是开漏输出和推挽输出推挽输出和开漏输出 推挽输出(Push-PullOutput)是由两个MOS或者三极管受到互补控制信号的控制,两个管子始终处在一个导通另一个截止的状态;输入逻辑1,则P-MOS激活,输出为高电平;图1;输入逻辑0,则N-MOS激活,输出为低电平;图2;                              图1                    

STM32F103硬件IIC控制4针0.96寸OLED显示屏

目录取字模程序mian.coled.coled.holedfont.hbmp.hIIC1.cIIC1.h实现效果源码模拟IIC控制OLED使用的0.96寸四针屏幕,以下直接看实际操作。取字模使用PCtoLCD2002软件提取OLED字模。注意红色方框的选项内容,不要选错了,选错会导致烧录程序后无法显示。程序此为硬件IIC,如果使用过我的模拟IIC控制程序可直接看voidOLED_Write_Command(unsignedcharIIC_Command);voidOLED_Write_Data(unsignedcharIIC_Data);这两条函数即可,OLED显示函数主要区别就在这。mian

【ARM AMBA AXI 入门 16 - AXI 写响应通道 BVALID | BREADY | BRESP 详细介绍】

请阅读【ARMAMBAAXI总线文章专栏导读】文章目录AXI写响应通道BVALIDBREADYBRESP举例BRESP[2:0]编码AXI写响应通道在ARMAMBAAXI协议中,写响应通道包括以下三个信号,用来完成写事务的确认和状态传递:BVALID这是一个从设备(Slave)发出的信号,表明与当前写事务相关的BRESP(写响应)信号是有效的。换句话说,当从设备已经处理了写请求,并且准备好了响应状态时,它会将BVALID信号置为高电平。BREADY这是一个主设备(Ma

Stm32 使用软件IIC驱动FM24CL64B-GTR

首先让我进行一个祈祷仪式(感谢原子哥给我一口饭吃阿门)先附上我的原理图 我的FM24CL64B的设备地址因为A0,A1,A2都被接地了查阅硬件手册  高四位是固定的地址低四位A2,A1 ,A0对应的是引脚电平的信号(硬件手册中没有写高电平代表1还是代表0我实测是高为1低为0)R/W这一位硬件手册中注明了  所以我们的写入从地址为10100000==0XA0读取设备地址为                10100001==0XA1ok有了以上的铺垫我们可以直接使用原子哥写好的myiic.h与myiic.c来进行iic通信我在这里先附上原子哥的代码这是myiic.c#include"myiic.h

关于STM32 HAL库 (I2C/IIC)问题的解决方法

1.情况介绍:因为某个项目想要颜色识别,去识别球的颜色,但是又不想多来个摄像头,所以想尝试一下颜色传感器的方案,简化流程。然后在淘宝上买了个TCS34725来试试,随后就遇到了问题:HAL库I2C通信了几次就死锁了。我之前也接触过I2C,OLED屏,tft屏,我那时候是通过GPIO口模拟I2C(因为淘宝的和网上的例程大多是这个)来实现的。还有就是九轴陀螺仪的磁力计数据读取,ist8310的例程是HAL库的,但是我那时候的问题是我用我的cubeMX去修改配置,更新之后,I2C就死锁了,但是那时候也没有太过深入,因为没有使用九轴陀螺仪的必要,就改成了六轴陀螺仪,间接没有使用I2C了。现在这个问题又

【ARM AMBA AXI 入门 14 -- AXI 窄位传输 | 非对齐传输| 大小端传输】

请阅读【ARMAMBAAXI总线文章专栏导读】文章目录窄位传输(NarrowTransfer)非对齐传输(UnalignedTransfer)大小端传输(EndiannessTransfer)ARMAMBAAXI(AdvancedeXtensibleInterface)是一个高性能、高带宽的总线接口,常用于连接高速微处理器核心与其它部件。在AXI总线协议中,支持多种数据传输,包括窄位传输、非对齐传输和大小端传输。下面分别对这些传输类型进行详细介绍。窄位传输(NarrowTransfer)窄位传输指的是总线宽度大于传输数据宽度的情况。例如,如果总线宽度是64位,但实际只需要传输32位的数据,这种

stm32-HAL库IIC通信-at24c02

一、IIC通信协议IIC是一种通用串行同步通信协议,将IIC通信分为物理层和协议层两方面来学习。1.物理层物理层上有如下特点:(1)它是一个支持设备的总线。“总线”指多个设备共用的信号线。在一个I2C通讯总线中,可连接多个I2C通讯设备,支持多个通讯主机及多个通讯从机。 (2)一个I2C总线只使用两条总线线路,一条双向串行数据线(SDA),一条串行时钟线(SCL)。数据线即用来表示数据,时钟线用于数据收发同步。(3)每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。(4)总线通过上拉电阻接到电源。当I2C设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻

【FPGA】AXI学习

1.什么是AXI?      AXI是ARMAMBA的一部分,AMBA是1996年首次推出的微控制器总线系列。AXI的第一个版本首次包含在2003年发布的AMBA3.0中。发布与2010的AMBA4.0包含了AXI的第二个主要版本,AXI4。      这儿有3种AXI4接口:AXI:用于高性能存储映射需求。AXI4-Lite:用于简单,低吞吐率的内存映射通信。(例如,进出控制器和状态控制器)AXI4-Stream:用于高速流数据。2.AXI如何工作?      AXI规范描述了一个在单AXI主机和AXI从机之间的接口,代表IP核之间相互交换信息。多个内存映射的AXI主从可以使用AXI基础IP