stm32 I2C架构

STM32的 I2C 片上外设专门负责实现 I2C 通讯协议, 只要配置好该外设,它就会自动根据协议要求产生通讯信号,收发数据并缓存起来,CPU 只要检测该外设的状态和访问数据寄存器,就能完成数据收发。架构图如下所示。

在这里插入图片描述

通讯引脚:STM32 芯片有多个 I2C 外设,外设的 I2C 通讯信号引出到不同的 GPIO 引脚上,使用I2C时须配置这些指定的引脚。

在这里插入图片描述


时钟控制逻辑:SCL 线的时钟信号,由 I2C 接口根据时钟控制寄存器(CCR)控制,控制的参数主要为时钟频率。配置 I2C 的 CCR 寄存器可修改通讯速率相关的参数。STM32 的 I2C 外设都挂载在 APB1 总线上,使用 APB1 的时钟源 PCLK1。

SCL 时钟周期内的高电平时间为Thigh,低电平时间为Tlow,那么在标准模式下(I2C 通讯的“标准/快速”模式,这两个模式分别 I2C 对应 100/400Kbit/s 的 通讯速率),Thigh=CCR * TPCLK1;Tlow=CCR * TPCLK1(快速模式下Thigh=CCR * TPCLK1;Tlow=2 * CCR * TPCLK1)。由此可知CCR对通信速率的影响。例子如下。

在这里插入图片描述


数据逻辑控制:I2C 的 SDA 信号主要连接到数据移位寄存器上。

数据寄存器(DR):当向外发送数据的时候,数据移位寄存器以数据寄存器(DR)为数据源,把数据一位一位地通过SDA信号线发送出去;从外部接收数据的时候,数据移位寄存器把 SDA 信号线采样到的数据一位一位地存储到数据寄存器(DR)中。

PEC寄存器:若使能了数据校验,接收到的数据会经过 PCE 计算器运算,运算结果存储在PEC寄存器中。

自身地址寄存器(OAR1、OAR2):I2C设备工作在从机模式的时候,接收到设备地址信号时,数据移位寄存器会把接收到的地址与从机自身的I2C地址寄存器的值作比较,以便响应主机的寻址。STM32 的自身 I2C 地址可通过修改自身地址寄存器(OAR1、OAR2)修改,支持同时使用两个 I2C 设备地址。(STM32 的 I2C 外设可同时使用两个地址,即同时对两个地址作出响应)


整体控制逻辑:负责协调整个 I2C 外设。控制逻辑负责控制产生 I2C 中断信号、DMA 请求及各种 I2C 的通讯信号(起始、停止、响应信号等)。

控制寄存器(CR1/CR2):控制逻辑的工作模式根据控制寄存器(CR1/CR2)的参数而改变。

状态寄存器(SR1 和 SR2):外设工作时,控制逻辑会根据外设的工作状态修改状态寄存器(SR1 和 SR2)。只要读取这些寄存器相关的寄存器位,就可以了解 I2C 的工作状态。


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

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

事件EV5:主发送器产生起始信号(S),当发生起始信号后,产生事件EV5,并会对 SR1 寄存器的“SB”位置 1,表示起始信号已经发送。

事件EV6、EV8:紧接着主发送器发送设备地址并等待应答信号,若有从机应答,则产生事件“EV6”及 “EV8”,这时 SR1 寄存器的“ADDR”位及“TXE”位被置 1,ADDR 为 1 表示地址已经发送,TXE 为 1 表示数据寄存器为空。

事件EV8:以上步骤正常执行并对 ADDR 位清零后,往 I2C 的数据寄存器(DR)写入要发送的数据,这时 TXE 位会被重置 0,表示数据寄存器非空,I2C 外设通过 SDA 信号线一位位把数据发送出去后,又会产生事件EV8,即 TXE 位被置 1, 重复这个过程,就可以发送多个字节数据了。

事件EV8_2:当发送数据完成后,控制 I2C 设备产生一个停止信号§,这个时候会产生 EV8_2 事件,SR1 的 TXE 位及 BTF 位都被置 1,表示通讯结束。

假如使能了 I2C 中断,以上所有事件产生时,都会产生 I2C 中断信号,进入同一 个中断服务函数,到 I2C 中断服务程序后,再通过检查寄存器位来判断是哪一个事件。

在这里插入图片描述


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

和发送过程区别在于:

EV7事件:从机端接收到地址后,开始向主机端发送数据。当主机接收到这些数据后,会产生EV7事件,SR1 寄存器的 RXNE 被置 1,表示接收数据寄存器非空,读取该寄存器后,可对数据寄存器清空,以便接收下一次数据。此时可以控 制 I2C 发送应答信号(ACK)或非应答信号(NACK),若应答,则重复以上步骤接收 数据,若非应答,则停止传输;

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多级放大电路

定义: 耦合方式、阻容耦合、变压器耦合、直接耦合、零点漂移、零漂 耦合方式:多级放大电路内部各级之间的连接方式称为耦合方式。常用的耦合方式有三种,阻容耦合、变压器耦合、直接耦合。 阻容耦合:电路的第一级与第二级之间通过…

放大电路频率响应基础概念

定义: 放大电路频率响应、幅频特性、相频特性、下限频率、上限频率、通频带、频率失真、波特图、高通电路、低通电路、共射截止频率、特征频率共、基截止频率。 放大电路频率响应:当放大电路输入不同频率的正弦波信号时,电路的放大倍数将有所…

skip gram模型的实现

CBOW模型的概率表示: P(A):A发生的概率。 P(A,B):事件A和事件B同时发生的概率,称为联合概率。 P(A|B):在给定事件B的信息后,事件A发生的概率,称为后验概率。 CBOW模型:当给定某个…

stm32 SPI架构

STM32 芯片集成了专门用于 SPI 协议通讯的外设。 通讯引脚:SPI 硬件架构从 MOSI、MISO、SCK 及 NSS 线展开;STM32 芯片有多个 SPI 外设,它们的 SPI 通讯信号引出到不同的 GPIO 引脚上,使用时必须配置到这些指定的引脚。 SPI1是AP…

stm32 SPI、FLASH

main.c FLASH:掉电后数据不丢失,U 盘、SD 卡、SSD 固态硬盘、STM32 芯片内部用于存储程序的设备,都是 FLASH 类型的存储器。FLASH芯片(W25Q64)是一种使用 SPI 通讯协议的 NOR FLASH 存储器。 STM32 的 NSS 引脚是一个普通的 GPIO&#xff0c…

二分类负采样方法

多分类问题处理为二分类问题,需要能够正确地对正例和负例进行分类。 如果以所有的负例为对象,词汇量将增加许多,无法处理。作为一种近似方法,将只使用少数负例。 负采样方法:求正例作为目标词时的损失,同…

二分类改进CBOW

解决问题二:中间层的神经元和权重矩阵的乘积、Softmax 层的计算需要花费很多计算时间 第k个单词的 Softmax 的计算式如下,其中Si是第i个单词的得分。这个计算也与词汇量成正比,所以需要一个替代Softmax的计算。 使用 Negative Sampling (负采…

Embedding改进CBOW

假设词汇量为 100 万个时的 CBOW 模型如下,输入层和输出层存在 100 万个神经元。 下面两个问题导致耗时严重。 问题一、输入层的 one-hot 表示和权重矩阵的乘积。one-hot 表示占用内存过多,计算 one-hot 表示与权重矩阵 的乘积,需要花费大量…

解决win10使用GPU跑程序遇到的一系列报错

解决win10使用GPU跑程序遇到的一系列报错安装cupy包使用cupy包的时候报错 ImportError: DLL load failed: 找不到指定的模块。卸载cuda11.5、安装cuda10.2安装适配于cuda10.2的cudnn报错CUDA path could not be detected. Set CUDA_PATH environment variable if CuPy fails to…

keil5新建freertos工程

1.建几个文件夹如下图所示。 2.打开keil5,project-new project,文件位置放到之前创建好的project文件夹下。 3.选择处理器。 4.接下来选择下面两个选项。 5.创建好之后是下面这样的。 6.增加文件,点击这个manage project。 然后添加文件即可。…

freertos 双向循环链表插入删除的实现与直观理解

freertos 双向循环链表插入删除的实现与直观理解main.clist.h其他头文件FreeRTOS.hFreeRTOSConfig.hportable.hportmacro.hlist.cvListInsertEnd函数vListInsert函数uxListRemove函数main.c 用debug之后,查看观察窗口,结果如下。这个实验目的就是&#…

cortex-m3 操作模式 寄存器组 异常类型 堆栈 中断

cortex-m3操作模式寄存器组异常类型堆栈中断参考操作模式 处理器的操作模式:为了区别正在执行代码的类型。复位后,处理器进入线程模式、特权级。 处理者模式(handler mode):异常服务例程的代码 ,包括中断…

freertos里面用到的汇编语言总结

汇编语言基础知识多重存储器访问MRS 和 MSRisb 和 dsbldr 和 strmovbl 和 bxcps多重存储器访问 感叹号!表示要自增(Increment)或自减(Decrement)基址寄存器 Rd 的值,时机是在每次访问前(Before)或访问后(After)。增/减,单位:字&am…

freertos内核 任务定义与切换 原理分析

freertos内核 任务定义与切换 原理分析主程序任务控制块任务创建函数任务栈初始化就绪列表调度器总结任务切换主程序 这个程序目的就是,使用freertos让两个任务不断切换。看两个任务中变量的变化情况(波形)。 下面这个图是任务函数里面delay(100)的结果。 下面这个…

freertos临界段保护

freertos临界段保护中断的基础知识cortex-m里面开中断、关中断指令关中断和开中断进入临界段和退出临界段中断的基础知识 嵌套: 嵌套向量中断控制器 NVIC(Nested Vectored Interrupt Controller与内核是紧耦合的。提供如下的功能:可嵌套中断支持、向量…

改进版的CBOW模型

复习 首先复习一下之前的CBOW笔记。 采用推理的方法认知单词、CBOW模型这里面主要是: CBOW模型的核心思路:给出周围的单词(上下文)时,预测目标词处会出现什么单词。 要用神经网络处理单词,需要先将单词…

freertos空闲任务、阻塞延时

freertos空闲任务、阻塞延时空闲任务阻塞延时SysTick实验现象阻塞态:如果一个任务当前正在等待某个外部事件,则称它处于阻塞态。 rtos中的延时叫阻塞延时,即任务需要延时的时候,会放弃CPU的使用权,进入阻塞状态。在任务阻塞的这段…

树莓派配置

树莓派配置1.安装操作系统2.修改镜像源3.配置VNC连接1.安装操作系统 安装操作系统,首先在官网下载https://www.raspberrypi.com/software/operating-systems/ 下载出来的解压后是一个光盘映像文件,接下来就需要把这个文件写入到树莓派的tf卡里。 安装树…

远程桌面连机器人

这里需要PC和机器人处于同一局域网下。 PC使用xhell连接机器人,通过 ifconfig 查看机器人的无线 IP 地址。 然后退出xshell,打开NoMachine软件进行远程桌面连接。输入机器人无线ip地址。 输入用户名和密码 然后就远程连接上了 现在开一个终端如下所示&…

RNNLM

RNNLM 基于RNN的语言模型称为RNNLM(Language Model)。 Embedding 层:将单词ID转化为单词的分布式表示(单词向量)。 RNN层:向下一层(上方)输出隐藏状态,同时也向下一时刻的RNN层(右边)输出隐藏状态。 对于“you say …