版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第14章
I2C接口与
EEPROM存储器作者:黄克亚2025年5月本章概要CONTENTSI2C通信原理EEPROM存储器及芯片介绍STM32F103的I2C接口STM32F103的I2C相关库函数I2C时序访问EEPROM存储器项目14.1I2C通信原理I2C(Inter-IntegratedCircuit,集成电路总线),又称为IIC或I2C,这种总线类型是由原飞利浦公司(现为恩智浦公司)在20世纪80年代初设计出来的一种简单、双向、二线制、同步串行总线,主要是用来连接整体电路。14.1I2C通信原理14.1.1I2C串行总线概述I2C(Inter-IntegratedCircuit)一种串行通信总线协议,用于连接微控制器、传感器、存储器和其他外设。由两根线组成:数据线(SDA),时钟线(SCL)采用双向传输方式,主从设备可以在同一根数据线上进行双向通信允许连接多个器件,支持多主机通信14.1I2C通信原理14.1.2I2C总线的数据传送01SCL高电平,SDA保持稳定SCL低电平,SDA状态才允许变化数据位的有效性规定14.1I2C通信原理14.1.2I2C总线的数据传送02“数据位有效性规定”不包含起止信号。SCL高电平,SDA的任何跳变都会被识别成为一个起始信号或停止信号。起始和终止信号14.1I2C通信原理14.1.2I2C总线的数据传送03数据传送格式1字节传送与应答每个字节为8位,高位(MSB)在前,低位(LSB)在后发送方发送完每一字节后,必须等待接收方返回一个应答响应信号响应时钟脉冲期间,接收方将SDA拉低为应答信号,接收方使SDA维持高电平为非应答信号。14.1I2C通信原理14.1.2I2C总线的数据传送03数据传送格式2总线的寻址DA3~DA0:4位器件地址是I2C总线器件固有的地址编码。A2~A0:3位引脚地址用于相同地址器件的识别:数据传送方向。=1:主机接收(读);=0:主机发送(写)14.1I2C通信原理14.1.2I2C总线的数据传送03数据传送格式3数据帧格式主机向从机写数据主机产生起始信号S主机发送寻址字节SLAVEADDRESS被选中的从机返回应答信号A主机发送数据DATA主机发送停止信号结束数据传输或发送重复起始信号进入下一次数据传输14.1I2C通信原理14.1.2I2C总线的数据传送03数据传送格式3数据帧格式主机从从机读数据主机产生起始信号S主机发送寻址字节SLAVEADDRESS被选中的从机返回应答信号A从机发送数据DATA主机发送停止信号结束数据传输或发送重复起始信号进入下一次数据传输14.1I2C通信原理14.1.2I2C总线的数据传送03数据传送格式3数据帧格式c)主机和从机双向数据传送主机和从机双向数据传送的数据传送过程是主机向从机写数据和主机由从机读数据的组合04传输速率I2C的标准传输速率为100Kbps,快速传输可达400Kbps。目前还增加了高速模式,最高传输速率可达3.4Mbps。14.2STM32F103的I2C接口STM32F103微控制器的小容量产品有1个I2C,中等容量和大容量产品有2个I2C。14.2STM32F103的I2C接口14.2.1STM32F103的I2C主要特性所有的I2C都位于APB1总线。支持标准(100kbps)和快速(400kbps)两种传输速率。所有的I2C可工作于主模式或从模式,可以作为主发送器、主接收器、从发送器或者从接收器。支持7位或10位寻址和广播呼叫。具有3个状态标志:发送器/接收器模式标志、字节发送结束标志、总线忙标志。具有2个中断向量:1个中断用于地址/数据通信成功,1个中断用于错误。具有单字节缓冲器的DMA。兼容系统管理总线SMBus2.0。14.2STM32F103的I2C接口14.2.2STM32F103的I2C内部结构根据控制寄存器CCR、CR1和CR2中的配置产生I2C协议的时钟信号,即SCL线上的信号。(1)时钟控制通过I2C协议将数据逐位从SDA线发送出去或从SDA线上的信号中提取出接收到的数据值(2)数据控制用于产生I2C中断和DMA请求。(3)控制逻辑I2C内部结构,由SDA线和SCL线展开,主要分为时钟控制、数据控制和控制逻辑等部分。14.2STM32F103的I2C接口14.2.3STM32F103的模式选择主模式●主发送器模式●主接收器模式从模式●从发送器模式●从接收器模式(默认)接口生成起始位后仲裁丢失或生成停止位主模式时,I2C接口启动数据传输并产生时钟信号。串行数据传输总是以起始条件开始并以停止条件结束。起始条件和停止条件都是在主模式下由软件控制产生。从模式时,I2C接口能识别它自己的地址(7位或10位)和广播呼叫地址。软件能够控制开启或禁止广播呼叫地址的识别。14.3STM32F103
的I2C相关库函数14.3STM32F103的I2C相关库函数14.3.1函数I2C_DeInit函数名I2C_DeInit函数原形voidI2C_DeInit(I2C_TypeDef*I2Cx)功能描述将外设I2Cx寄存器重设为缺省值输入参数I2Cx:x可以是1或者2,来选择I2C外设输出参数无返回值无先决条件无被调用函数RCC_APB1PeriphClockCmd().例:/*DeinitializeI2C2interface*/I2C_DeInit(I2C2);14.3STM32F103的I2C相关库函数14.3.2函数I2C_Init函数名I2C_Init函数原形voidI2C_Init(I2C_TypeDef*I2Cx,I2C_InitTypeDef*I2C_InitStruct)功能描述根据I2C_InitStruct中指定的参数初始化外设I2Cx寄存器输入参数1I2Cx:x可以是1或者2,来选择I2C外设输入参数2I2C_InitStruct:指向结构I2C_InitTypeDef的指针,包含了外设GPIO的配置信息输出参数无返回值无先决条件无被调用函数无I2C_InitTypeDefstructureI2C_InitTypeDef定义于文件“stm32f10x_i2c.h”:typedefstruct{u16I2C_Mode;u16I2C_DutyCycle;u16I2C_OwnAddress1;u16I2C_Ack;u16I2C_AcknowledgedAddress;u32I2C_ClockSpeed;}I2C_InitTypeDef;I2C_Mode:用以设置I2C的模式I2C_Mode描述I2C_Mode_I2C设置I2C为I2C模式I2C_Mode_SMBusDevice设置I2C为SMBus设备模式I2C_Mode_SMBusHost设置I2C为SMBus主控模式14.3STM32F103的I2C相关库函数14.3.2函数I2C_InitI2C_OwnAddress1:该参数用来设置第一个设备自身地址,它可以是一个7位地址或者一个10位地址。I2C_Ack:使能或者失能应答(ACK)I2C_DutyCycle:用以设置I2C的占空比I2C_DutyCycle描述I2C_DutyCycle_16_9I2C快速模式Tlow/Thigh=16/9I2C_DutyCycle_2I2C快速模式Tlow/Thigh=2注意:该参数只有在I2C工作在快速模式(时钟工作频率高于100KHz)下才有意义。I2C_Ack描述I2C_Ack_Enable使能应答(ACK)I2C_Ack_Disable失能应答(ACK)I2C_AcknowledgedAddres:定义了应答7位地址还是10位地址。I2C_AcknowledgedAddres描述I2C_AcknowledgeAddress_7bit应答7位地址I2C_AcknowledgeAddress_10bit应答10位地址I2C_ClockSpeed:该参数用来设置时钟频率,这个值不能高于400KHz。14.3STM32F103的I2C相关库函数14.3.2函数I2C_Init函数名I2C_Init函数原形voidI2C_Init(I2C_TypeDef*I2Cx,I2C_InitTypeDef*I2C_InitStruct)功能描述根据I2C_InitStruct中指定的参数初始化外设I2Cx寄存器输入参数1I2Cx:x可以是1或者2,来选择I2C外设输入参数2I2C_InitStruct:指向结构I2C_InitTypeDef的指针,包含了外设GPIO的配置信息例:/*InitializetheI2C1accordingtotheI2C_InitStructuremembers*/I2C_InitTypeDefI2C_InitStructure;I2C_InitStructure.I2C_Mode=I2C_Mode_SMBusHost;I2C_InitStructure.I2C_DutyCycle=I2C_DutyCycle_2;I2C_InitStructure.I2C_OwnAddress1=0x03A2;I2C_InitStructure.I2C_Ack=I2C_Ack_Enable;I2C_InitStructure.I2C_AcknowledgedAddress=I2C_AcknowledgedAddress_7bit;I2C_InitStructure.I2C_ClockSpeed=200000;I2C_Init(I2C1,&I2C_InitStructure);14.3STM32F103的I2C相关库函数14.3.3函数I2C_Cmd函数名I2C_Cmd函数原形voidI2C_Cmd(I2C_TypeDef*I2Cx,FunctionalStateNewState)功能描述使能或者失能I2C外设输入参数1I2Cx:x可以是1或者2,来选择I2C外设输入参数2NewState:外设I2Cx的新状态:ENABLE或者DISABLE输出参数无返回值无先决条件无被调用函数无例:/*EnableI2C1peripheral*/I2C_Cmd(I2C1,ENABLE);14.3STM32F103的I2C相关库函数14.3.4函数I2C_GenerateSTART函数名I2C_GenerateSTART函数原形voidI2C_GenerateSTART(I2C_TypeDef*I2Cx,FunctionalStateNewState)功能描述产生I2Cx传输START条件输入参数1I2Cx:x可以是1或者2,来选择I2C外设输入参数2NewState:I2CxSTART条件的新状态:ENABLE或者DISABLE输出参数无返回值无先决条件无被调用函数无例:/*GenerateaSTARTconditiononI2C1*/I2C_GenerateSTART(I2C1,ENABLE);14.3STM32F103的I2C相关库函数14.3.5函数I2C_GenerateSTOP函数名I2C_GenerateSTOP函数原形voidI2C_GenerateSTOP(I2C_TypeDef*I2Cx,FunctionalStateNewState)功能描述产生I2Cx传输STOP条件输入参数1I2Cx:x可以是1或者2,来选择I2C外设输入参数2NewState:I2CxSTOP条件的新状态:ENABLE或者DISABLE输出参数无返回值无先决条件无被调用函数无例:/*GenerateaSTOPconditiononI2C2*/I2C_GenerateSTOP(I2C2,ENABLE);14.3STM32F103的I2C相关库函数14.3.6函数I2C_Send7bitAddressI2C_Direction:该参数设置I2C界面为发送端模式或者接收端模式。函数名I2C_Send7bitAddress函数原形voidI2C_Send7bitAddress(I2C_TypeDef*I2Cx,u8Address,u8I2C_Direction)功能描述向指定的从I2C设备传送地址字输入参数1I2Cx:x可以是1或者2,来选择I2C外设输入参数2Address:待传输的从I2C地址输入参数3I2C_Direction:设置指定的I2C设备工作为发射端还是接收端输出参数无返回值无先决条件无被调用函数无I2C_Direction描述I2C_Direction_Transmitter选择发送方向I2C_Direction_Receiver选择接收方向例:/*Send,astransmitter,theSlavedeviceaddress0xA8in7-bitaddressingmodeinI2C1*/I2C_Send7bitAddress(I2C1,0xA8,I2C_Direction_Transmitter);14.3STM32F103的I2C相关库函数14.3.7函数I2C_SendData函数名I2C_SendData函数原形voidI2C_SendData(I2C_TypeDef*I2Cx,u8Data)功能描述通过外设I2Cx发送一个数据输入参数1I2Cx:x可以是1或者2,来选择I2C外设输入参数2Data:待发送的数据输出参数无返回值无先决条件无被调用函数无14.3.8函数I2C_ReceiveData函数名I2C_ReceiveData函数原形u8I2C_ReceiveData(I2C_TypeDef*I2Cx)功能描述返回通过I2Cx最近接收的数据输入参数I2Cx:x可以是1或者2,来选择I2C外设输出参数无返回值接收到的字先决条件无被调用函数无例:/*Transmit0x5DbyteonI2C2*/I2C_SendData(I2C2,0x5D);例:/*ReadthereceivedbyteonI2C1*/u8ReceivedData;ReceivedData=I2C_ReceiveData(I2C1);14.4项目实例STM32微控制器模拟I2C时序访问EEPROM存储器项目实施14.4项目实例14.4.1模拟I2C时序要求本项目将向读者介绍如何利用STM32的普通I/O口模拟I2C时序,并实现和EEPROM存储器AT24C02之间的双向通信,并将结果通过串口printf输出。对于模拟I2C总线,有几个重复应用的典型信号:起始信号(S)、终止信号(P)、发送应答位(ACK)、发送非应答位(NAK)。14.4项目实例14.4.2模拟I2C函数起始信号SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号。01终止信号SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。需要注意的是这里保持时间也是有一定限制的。02I2C总线产生起始信号函数参考代码如下:voidI2C_Start(void){I2C_SDA_OUT(); I2C_SDA_H;I2C_SCL_H;delay_us(5);I2C_SDA_L;delay_us(6);I2C_SCL_L;}I2C总线产生终止信号函数参考代码如下:voidI2C_Stop(void){I2C_SDA_OUT();I2C_SCL_L;I2C_SDA_L;I2C_SCL_H;delay_us(6);I2C_SDA_H;delay_us(6);}14.4项目实例14.4.2模拟I2C函数应答信号应答,也叫响应。数据的传输必须要带应答。03//主机产生应答信号ACKvoidI2C_Ack(void){I2C_SCL_L;I2C_SDA_OUT();I2C_SDA_L;delay_us(2);I2C_SCL_H;delay_us(5);I2C_SCL_L;}//主机不产生应答信号NACKvoidI2C_NAck(void){I2C_SCL_L;I2C_SDA_OUT();I2C_SDA_H;delay_us(2);I2C_SCL_H;delay_us(5);I2C_SCL_L;}//等待从机应答信号//返回值:1接收应答失败0接收应答成功u8I2C_Wait_Ack(void){u8tempTime=0;I2C_SDA_IN();I2C_SDA_H;delay_us(1);I2C_SCL_H;delay_us(1);while(GPIO_ReadInputDataBit(GPIO_I2C,I2C_SDA)){tempTime++;if(tempTime>250){I2C_Stop();return1;} }I2C_SCL_L;return0;}14.4项目实例14.4.2模拟I2C函数I2C发送一个字节数据05逻辑数据的表示要传输数据,那么肯定要分传输“1”和“0”,一般I2C读取的时候,都是在SCL的为高电平的时候进行读取,所以在SCL为高电平的时候,需要保持SDA稳定,高电平为“1”,低电平为“0”。而且注意的还有就是他们的保持时间要大于4us。04//I2C发送一个字节voidI2C_Send_Byte(u8txd){ u8i=0; I2C_SDA_OUT(); I2C_SCL_L;//拉低时钟开始数据传输
for(i=0;i<8;i++) { if((txd&0x80)>0)I2C_SDA_H; elseI2C_SDA_L; txd<<=1; I2C_SCL_H;delay_us(2);//发送数据
I2C_SCL_L;delay_us(2); }}14.4项目实例14.4.2模拟I2C函数I2C模拟接收一个字节数据06u8I2C_Read_Byte(u8ack){u8i=0,receive=0;I2C_SDA_IN();for(i=0;i<8;i++){ I2C_SCL_L;delay_us(2);I2C_SCL_H; receive<<=1; if(GPIO_ReadInputDataBit(GPIO_I2C,I2C_SDA)) receive++; delay_us(1); } if(ack==0)I2C_NAck(); elseI2C_Ack(); returnreceive;}14.4项目实例14.4.3EEPROM芯片24C02主要用于存储程序代码,可以在程序编写阶段修改;程序存储器FlashROM数据存储器SRAM其主要用于存储运行数据,可读可写,速度快,但是芯片断电数据丢失;EEPROM存储器EEPROM(ElectricallyErasableProgrammableReadOnlyMemory)是指带电可擦可编程只读存储器,是一种掉电后数据不丢失的存储芯片。嵌入式系统中主要存在三种存储器14.4项目实例14.4.3EEPROM芯片24C02本实验平台配备的EEPROM存储器为具有I2C接口的AT24C02芯片,其主要参数如下:(1)AT24C02可以提供2K位,也就是256个8位的EEPROM内存,可以保存256个字节的数据,有256个内存地址,也正好对应1个字节的地址范围。(2)AT24C02通过I2C总线接口进行操作。(3)AT24C02写操作时,可以一次写一个地址,也可以一次写一页。对于AT24C02来说,一页大小是8字节。写入的数据在同一页时,可以只写入一次地址,每写入1字节,地址自动加1。(4)AT24C02读操作时,每读完一次数据之后,读取地址都会自动加1。AT24C02接线原理图14.4项目实例14.4.4模拟I2C访问24C02项目分析预定义模拟I2C管脚首先对系统实际采用的模拟I2C管脚及其高低电平操作函数进行预定义,这样当系统硬件发生更改时,只需要将四条引脚预定义语句修改一下即可。/*定义使用的I/O口,移植仅需更改下面4个预定义即可*/#defineI2C_SCLGPIO_Pin_0//PF0#defineI2C_SDAGPIO_Pin_1//PF1#defineGPIO_I2CGPIOF#defineRCC_GPIO_I2CRCC_APB2Periph_GPIOF/*I2C时钟信号和数据信号操作宏定义*/#defineI2C_SCL_HGPIO_SetBits(GPIO_I2C,I2C_SCL)#defineI2C_SCL_LGPIO_ResetBits(GPIO_I2C,I2C_SCL)#defineI2C_SDA_HGPIO_SetBits(GPIO_I2C,I2C_SDA)#defineI2C_SDA_LGPIO_ResetBits(GPIO_I2C,I2C_SDA)14.4项目实例14.4.4模拟I2C访问24C02项目分析I2C管脚配置I2C管脚配置包括I2C管脚初始化、SDA输出配置和SDA输入配置3个函数,代码如下:voidI2C_INIT()//I2C管脚初始化{GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_GPIO_I2C,ENABLE);GPIO_InitStructure.GPIO_Pin=I2C_SCL|I2C_SDA;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIO_I2C,&GPIO_InitStructure);I2C_SCL_H;I2C_SDA_H;}voidI2C_SDA_OUT()//SDA输出配置{GPIO_InitTypeDefGPIO_InitStructure; GPIO_InitStructure.GPIO_Pin=I2C_SDA;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIO_I2C,&GPIO_InitStructure);}voidI2C_SDA_IN(void)//SDA输入配置{GPIO_InitTypeDefGPIO_InitStructure; GPIO_InitStructure.GPIO_Pin=I2C_SDA;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIO_I2C,&GPIO_InitStructure);}14.4项目实例14.4.4模拟I2C访问24C02项目分析AT24C02写操作AT24C02写操作一般步骤如下,对应图时序(1)发送起始信号(2)发送写器件地址(3)等待应答(4)发送要写入的24C02的地址(5)等待应答(6)发送要写入的数据(7)等待应答(8)发送数据结束发送结束信号参考代码如下:voidAT24Cxx_WriteOneByte(u8addr,u8dt){ I2C_Start(); //起始信号 I2C_Send_Byte(0xA0);//发送写器件地址 I2C_Wait_Ack(); //等待应答 I2C_Send_Byte(addr);//发送要写入单元地址 I2C_Wait_Ack(); //等待应答 I2C_Send_Byte(dt); //发送要写入的数据 I2C_Wait_Ack(); //等待应答 I2C_Stop(); //停止信号 delay_ms(10); //必要的延时}14.4项目实例14.4.4模拟I2C访问24C02项目分析AT24C02读操作AT24C02读操作一般步骤如下,对应图时序。(1)发送起始信号(2)发送写器件地址(3)等待应答(4)发送要读取的AT24C02的地址(5)等待应答(6)再发送起始信号(7)发送读器件地址(8)等待应答(9)接收数据(10)如果没有接收完数据,发送应答(11)接收数据(12)直到接收完数据,发送非应答(13)发送结束信号参考代码如下:u8AT24Cxx_ReadOneByte(u8addr){ u8temp=0; I2C_Start(); //起始信号 I2C_Send_Byte(0xA0);//发送写器件地址 I2C_Wait_Ack(); //等待应答 I2C_Send_Byte(addr);//发送要读取单元的地址 I2C_Wait_Ack(); //等待应答 I2C_Start(); //再次发送起始信号 I2C_Send_Byte(0xA1);//发送读器件地址 I2C_Wait_Ack(); //等待应答 temp=I2C_Read_Byte(0);//接收数据,非应答,0代表NACK I2C_Stop(); //停止信号 returntemp;}14.4项目实例第一步:复制第三章创建工程模板文件夹到桌面,并将文件夹改名为“13I2C+24C02”,将原工程模板编译一下,直到没有错误和警告为止。12ADC+DMA+Printf13I2C+24C02第二步:点击“File/New”新建两个文件,将其改名为I2C-24C02.C和I2C-24C02.H并保存到工程模板下的APP文件夹中。并将I2C-24C02.C文件添加到APP项目组下。14.4.5模拟I2C访问24C02项目实施14.4项目实例项目实施第三步:编写I2C-24C02.C源文件,首先包含I2C-24C02.H头文件,然后创建所有模拟I2C时序源函数。由于此部分程序在前面14.4.2~14.4.4节已有讲解,且代码相同,故在此不再将代码重复贴出。I2C初始化函数I2C_INIT;SDA输出配置函数I2C_SDA_OUT;SDA输入配置函数I2C_SDA_IN;起始信号函数I2C_Start;终止信号函数I2C_Stop;主机应答函数I2C_Ack;主机非应答函数I2C_Nack;等待从机应答函数I2C_Wait_Ack;字节发送函数I2C_Send_Byte;字节读取函数I2C_Read_Byte;AT24C02单字节写入函数AT24Cxx_WriteOneByte;AT24C02单字节读取函数AT24Cxx_ReadOneByte。14.4项目实例项目实施第四步:在I2C-24C02.H文件中输入如下源程序,其中条件编译格式不变,只要更改一下预定义变量名称即可,需要将刚定义函数的声明加到头文件当中参考代码如下:#ifndef_I2C24C02_H#define_I2C24C02_H#include"stm32f10x.h"#include"systick.h"/*定义时使用的I/O口,移植仅需修改下面4个宏定义*/#defineI2C_SCLGPIO_Pin_0 //SCL->PF0#defineI2C_SDAGPIO_Pin_1 //SDA->PF1#defineGPIO_I2CGPIOF#defineRCC_GPIO_I2CRCC_APB2Periph_GPIOF/*I2C时钟信号和数据信号操作宏定义*/#defineI2C_SCL_HGPIO_SetBits(GPIO_I2C,I2C_SCL)#defineI2C_SCL_LGPIO_ResetBits(GPIO_I2C,I2C_SCL)#defineI2C_SDA_HGPIO_SetBits(GPIO_I2C,I2C_SDA)#defineI2C_SDA_LGPIO_ResetBits(GPIO_I2C,I2C_SDA)/*GPIO模拟I2C相关函数*/voidI2C_INIT(void);voidI2C_SDA_OUT(void);voidI2C_SDA_IN(void);voidI2C_Start(void);voidI2C_Stop(void);voidI2C_Ack(void);voidI2C_NAck(void);u8I2C_Wait_Ack(void);voidI2C_Send_Byte(u8txd);u8I2C_Read_Byte(u8ack);/*24C02单字节读写函数*/voidAT24Cxx_WriteOneByte(u8addr,u8dt);u8AT24Cxx_ReadOneByte(u8addr);#endif参考程序代码14.4项目实例项目实施第五步:在main.h文件的中间部分添加#include"I2C-24C02.H"语句,即包含I2C-24C02.H头文件,main.h文件的源代码如下。参考代码如下:#ifndef_MAIN_H#define_MAIN_H#include"stm32f10x.h"#include"LED.H"#include"beepkey.h"#include"dsgshow.h"#include"EXTI.H"#include"timer.h"#include"PWM.H"#include"USART.H"#include"OLED.H"#include"ADC.H"#include"printf.h"#include"DMA-ADC.H"#include"I2C-24C02.H"#endif参考程序代码14.4项目实例项目实施第六步:在main.c文件中输入如下源程序,在main函数中,需要进行串口输出初始化,外部中断初始化,定时器初始化,I2C初始化,最后安排一个无限循环,等待中断发生。因为本例需要使用KEY4触发外部中断,所以还需要增加其控制引脚PE3的外部中断初始化程序,初始化方法和PE0~PE2是完全类似的,请读者自行修改EXTIInit()函数。参考代码如下:#include"main.h"intmain(){ hour=9;minu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《口腔器械消毒灭菌技术操作规范》试题及答案
- 软土地基换填施工专项施工方案
- 2026年新版心肺复苏试题库及答案
- 康复医学科医疗质量与制度管理
- 2026年护士专业知识考试试题及答案
- 标准完整儿科病历范文
- 施工组织设计方案与技术措施
- 清洗保洁企业检修员检修维修安全操作规程
- 妇科护理面试题及答案
- 第一单元自测练习卷2026-2027学年四年级语文上册统编版
- 2026年高三上学期数学秋季开学摸底考(江苏专用)
- GB/T 6904-2026工业循环冷却水及锅炉用水中pH的测定
- 2026年“麻醉药品、精神药品”管理和使用培训考核试题(含答案)
- 幼儿教师招聘考试全套试题及答案
- 2026年山东省临沂市重点中学小升初英语考试试卷及答案
- 石家庄城市经济职业学院教师招聘考试笔试试题及答案
- 2026年《保安员》上岗证考试题库及答案
- 非遗宋锦珍珠扇沙龙
- 物业客户关系维护与客户满意度提升方案
- (2026版)新《中华人民共和国渔业法》核心要点解读培训
- 2026年赫比ciic测试题及答案
评论
0/150
提交评论