当前位置:文档之家› 嵌入式课程设计报告stm32

嵌入式课程设计报告stm32

嵌入式技术与应用课程设计报告题目STM32I2C固件库分析与应用学院专业班级姓名学号指导教师年月日教师评语:总分:教师签名:目录1 I2C接口1.1介绍1.2主要特点1.3概述1.4功能描述1.4.1I2C从模式1.4.2I2C主模式1.4.3错误条件1.4.4SDA/SCL线控制1.4.5SMBus1.4.6DMA请求1.4.7包错误校验(PEC)1.5 中断请求1.6 内部集成电路(I2C)1.6.1 I2C寄存器结构1.6.2 I2C库函数1.6.2.1 函数I2C_DeInit .1.6.2.2 函数I2C_ Init1.6.2.3 函数I2C_ StructInit1.6.2.4 函数I2C_ Cmd1.6.2.5 函数I2C_ DMACmd1.6.2.6 函数I2C_ DMALastTransferCmd1.6.2.7 函数I2C_ GenerateSTART1.6.2.8 函数I2C_ GenerateSTOP1.6.2.9 函数I2C_ AcknowledgeConfig1.6.2.10 函数I2C_ OwnAddress2Config1.6.2.11 函数I2C_ DualAddressCmd1.6.2.12 函数I2C_ GeneralCallCmd1.6.2.13 函数I2C_ ITConfig1.6.2.14 函数I2C_ SendData1.6.2.15 函数I2C_ ReceiveData1.6.2.16 函数I2C_ Send7bitAddress1.6.2.17 函数I2C_ ReadRegister1.6.2.18 函数I2C_ SoftwareResetCmd1.6.2.19 函数I2C_ SMBusAlertConfig1.6.2.20 函数I2C_ TransmitPEC1.6.2.21 函数I2C_ PECPositionConfig1.6.2.22 函数I2C_ CalculatePEC1.6.2.23 函数I2C_ GetPEC1.6.2.24 函数I2C_ ARPCmd1.6.2.25 函数I2C_ StretchClockCmd1.6.2.26 函数I2C_ FastModeDutyCycleConfig1.6.2.27 函数I2C_ GetLastEvent1.6.2.29 函数I2C_ GetFlagStatus1.6.2.30 函数I2C_ ClearFlag1.6.2.31 函数I2C_ GetITStatus1.6.2.32 函数I2C_ ClearITPendingBi1 2C接口1.1 介绍I2C 总线接口连接微控制器和串行I2C 总线。

它提供多主机功能,控制所有I2C 总线特定的时序、协议、仲裁和定时。

支持标准和快速两种模式,同时与SMBus2.0 兼容。

I2C 总线有多种用途,包括CRC 码的生成和校验、SMBus(系统管理总线SystemManagement Bus)、PMBus(电源管理总线Power Management Bus)。

根据特定设备的需要,可以使用DMA 以减轻CPU 的负担。

1.2 主要特点● 并行总线/I2C 总线协议转换器● 多主机功能:同一接口既可做主设备也可做从设备● I2C 主设备功能−产生时钟−产生起始和停止信号● I2C 从设备功能−可编程的I2C 地址检测−可响应2 个从地址的双地址能力−停止位检测● 产生和检测7 位/10 位地址和广播呼叫● 支持不同的通讯速度−标准速度(高至100 kHz)−快速(高至400 kHz)● 状态标志:−发送器/接收器模式标志−字节发送结束标志− I2C 总线忙标志● 错误标志−主模式时的仲裁丢失−地址/数据传输后的应答(ACK)错误−检测到起始和停止错位−禁止拉长时钟功能后的上溢或下溢● 2 个中断向量− 1 个中断用于地址/数据通讯成功− 1 个中断用于出错● 可选的拉长时钟功能● 具单字节缓冲器的DMA● 可配置的PEC(信息包错误检测)的产生或校验:−发送模式中PEC 值可以作为最后一个字节传输−用于最后一个接收字节的PEC 错误校验● 兼容SMBus 2.0− 25 ms 时钟低超时延时− 10 ms 主设备累积时钟低扩展时间− 25 ms 从设备累积时钟低扩展时间−带ACK 控制的硬件PEC 产生/校验−支持地址分辨协议(ARP)● 兼容SMBus注意不是所有产品中都包含上述所有特性。

请参考相关的数据手册,确认该产品支持的I2C 功能。

1.3 概述I2C 接口接收和发送数据,并将数据从串行转换成并行,或并行转换成串行。

可以开启或禁止中断。

接口通过数据引脚(SDA)和时钟引脚(SCL)连接到I2C 总线。

允许连接到标准(高至100 kHz)或快速(高至400 kHz)I2C 总线。

模式选择接口可以下述4 种模式中的一种运行:● 从发送器模式● 从接收器模式● 主发送器模式● 主接收器模式默认模式为从模式。

接口在生成起始条件后自动从从模式切换到主模式;当仲裁丢失或产生停止信号,则从主模式切换到从模式。

允许多主机功能。

通信流主模式时,I2C 接口启动数据传输并产生时钟信号。

串行数据传输总是以起始条件开始和停止条件结束。

主模式时,由软件控制产生起始条件和停止条件。

从模式时,I2C 接口能识别它自己的地址(7 位或10 位)和广播呼叫地址。

软件控制开启或禁止广播呼叫地址的识别。

数据和地址按8 位/字节进行传输,高位在前。

跟在起始条件后的第一、二个字节是地址(7 位模式为1 个字节,10 位模式为2 个字节)。

地址只在主模式发送。

在一个字节传输的8 个时钟后的第9 个时钟期间,接收器必须回送一个应答位(ACK)给发送器。

参考下图。

图134 I2C 总线协议软件可以开启或禁止应答(ACK),I2C 接口的地址(7 位、10 位地址或广播呼叫地址)可通过软件设置。

I2C接口的功能框图示于图135。

图135 I2C的功能框图注:在SMBus模式下,SMBALERT是可选信号。

如果SMBus被禁止,则该信号不可使用。

1.4 功能描述默认情况下,I2C 接口总是工作在从模式。

从默认的从模式切换到主模式,需要产生一个起始条件。

1.4.1 I2C从模式为了产生正确的时序,必须在I2C_CR2 寄存器中设定外设输入时钟。

外设输入时钟的频率必须至少是:● 标准模式下为:2MHz● 快速模式下为:4MHz一旦检测到起始条件,在SDA 线上接收到的地址被送到移位寄存器。

然后与芯片自己的地址OAR1 和OAR2(当ENDUAL=1)或者广播呼叫地址(如果ENGC=1)相比较。

注:在10-bit 地址模式时,比较包括头段序列(11110xx0),其中的xx 是地址的两个最高有效位。

头段或地址不匹配:接口将其忽视并等待另一个起始条件。

头段匹配(仅10 位模式):如果ACK 位被置1,接口产生一个应答脉冲并等待8位从地址。

地址匹配:接口产生以下时序:● 如果ACK 被置1,则产生一个应答脉冲● 硬件设置ADDR 位,如果设置了ITEVFEN 位,则产生一个中断● 如果ENDUAL=1,软件必须读DUALF 位,以确认响应了哪个从地址。

在10 位模式,接收到地址序列后,从设备总是处于接收器模式。

在收到与地址匹配的头序列并且最低位为1(即11110xx1)后,当接收到重复的起始条件时,将进入发送器模式。

TAR 位在从模式下指示当前是处于接收器模式还是发送器模式。

从发送器在接收到地址和清除ADDR 位后,从发送器将字节从DR 寄存器经由内部移位寄存器发送到SDA 线上。

从设备保持SCL为低电平,直到ADDR位被清除并且待发送数据已写入DR寄存器。

(见图136 中发送序列EV1 EV3)。

当收到应答脉冲时:● TxE 位被硬件置位,如果设置了ITEVFEN 和ITBUFEN 位,则产生一个中断。

如果TxE 位被置位,但在上一次数据发送结束之前没有数据写入到DR 寄存器,则BTF 位被置位,接口将保持SCL 为低电平,以等待写入DR 寄存器。

图136从发送器的传送序列图说明:S=Start(起始条件),S r=重复的起始条件,P=Stop(停止条件),A=响应,NA=非响应,EVx=事件(ITEVFEN=1时产生中断)EV1:ADDR=1,读SR1然后读SR2将清除该事件EV3-1:TxE=1,移位寄存器空EV3:TxE=1,读DR将清除该事件;移位寄存器非空EV3-2:AF=1,在SR1寄存器的AF位写0可以清除AF位从接收器在接收到地址和清除ADDR 后,从接收器将通过内部移位寄存器从SDA 线接收到的字节存进DR 寄存器。

接口在接收到每个字节后都生成以下时序:● 如果设置了ACK 位,则产生一个应答脉冲● 硬件置位RxNE。

如果设置了ITEVFEN 和ITBUFEN 位,则产生一个中断。

如果RxNE被置位,并且在接收新的数据结束之前DR寄存器未被读出,BTF位被置位,接口保持SCL为低电平,等待读DR寄存器(见图137 传送序列)。

图137从接收器的传送序列图说明:S=Start(起始条件),S r=重复的起始条件,P=Stop(停止条件),A=响应,NA=非响应,EVx=事件(ITEVFEN=1时产生中断)EV1:ADDR=1,读SR1然后读SR2将清除该事件EV2:RxNE=1,读DR将清除该事件EV4:STOPF=1,读SR1然后写CR1寄存器将清除该事件关闭从通信在最后一个数据字节被发送后,主设备产生一个停止条件。

接口检测到这一条件时:● STOPF 位被置位,如果设置了ITEVFEN 位,则产生一个中断,然后接口等待读SR1 寄存器,然后写CR1 寄存器。

(见图137 传送时序EV4)。

1.4.2 I2C主模式在主模式时,I2C 接口启动数据传输并产生时钟信号。

串行数据传输总是以起始条件开始和以停止条件结束。

当用START 位在总线上产生了起始条件,设备就进入了主模式。

以下是主模式所要求的时序:● 在I2C_CR2 寄存器中设定外设时钟以产生正确的时序● 配置时钟控制寄存器● 配置上升时间寄存器● 编程I2C_CR2 寄存器启动外设● 置I2C_CR2 寄存器中的START 位为1,用于产生起始条件外设输入时钟频率必须至少是:● 标准模式下为:2MHz● 快速模式下为:4MHz起始条件当BUSY 位处于清除状态时对START 位置位,使接口产生一个开始条件并切换到主模式(M/SL 位置位)。

注:在主模式下,设置START 位将在当前字节传输完后由硬件产生一个重开始条件。

一旦开始条件发出:● SB 位被硬件置位,如果设置了ITEVFEN 位,则会产生一个中断。

相关主题